前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用socks4 socks5 http代理的客户端

使用socks4 socks5 http代理的客户端

作者头像
全栈程序员站长
发布2022-09-13 15:46:16
1.2K0
发布2022-09-13 15:46:16
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

///定义的结构 struct sock4req1 { char VN; char CD; unsigned short Port; unsigned long IPAddr; char other[1]; };

struct sock4ans1 { char VN; char CD; };

struct sock5req1 { char Ver; char nMethods; char Methods[255]; };

struct sock5ans1 { char Ver; char Method; };

struct sock5req2 { char Ver; char Cmd; char Rsv; char Atyp; unsigned long IPAddr; unsigned short Port; // char other[1]; };

struct sock5ans2 { char Ver; char Rep; char Rsv; char Atyp; char other[1]; };

struct authreq { char Ver; char Ulen; char Name[255]; char PLen; char Pass[255]; };

struct authans { char Ver; char Status; };

/// ///代码片段 void CTestDlg::OnSocks4() { CString m_sError; ClientSock.Create();

//Socks4代理服务器端口及地址 //if( !ClientSock.Connect( “195.65.215.38”,1080) ) if( !ClientSock.Connect( “192.168.123.194”,1080) ) { m_sError = _T(“不能连接到代理服务器!”); ClientSock.Close(); MessageBox(m_sError); return ; }

char buff[100]; memset(buff,0,100); struct sock4req1 *m_proxyreq; m_proxyreq = (struct sock4req1 *)buff; m_proxyreq->VN = 4; m_proxyreq->CD = 1; m_proxyreq->Port = ntohs(21); m_proxyreq->IPAddr = inet_addr(“219.201.39.50”); strcpy(m_proxyreq->other , “”); ClientSock.Send(buff,9); struct sock4ans1 *m_proxyans; m_proxyans = (struct sock4ans1 *)buff; memset(buff,0,100); ClientSock.Receive(buff,100); if(m_proxyans->VN != 0 || m_proxyans->CD != 90) { m_sError = _T(“通过代理连接主站不成功!”); ClientSock.Close(); MessageBox(m_sError); return ; }

//连接已经建立,发送及接收数据 memset(buff,0,100); strcpy(buff,”Hello!”); ClientSock.Send(buff,sizeof(buff)); memset(buff,0,100); ClientSock.Receive(buff,100); MessageBox(buff); ClientSock.Close(); }

void CTestDlg::OnSocks5() { // TODO: Add your control notification handler code here //http://my.nbip.net/homepage/nblulei/ttdl/sockdllb.htm CString m_sError; ClientSock.Create(); //Socks5代理服务器端口及地址 //if( !ClientSock.Connect(“61.238.12.84”,12654) ) if( !ClientSock.Connect(“192.168.123.194”,1080) ) { m_sError = _T(“不能连接到代理服务器!”); ClientSock.Close(); MessageBox(m_sError); return ; } char buff[600]; struct sock5req1 *m_proxyreq1; m_proxyreq1 = (struct sock5req1 *)buff; m_proxyreq1->Ver = 5; m_proxyreq1->nMethods = 2; m_proxyreq1->Methods[0] = 0; m_proxyreq1->Methods[1] = 2; ClientSock.Send(buff,4); struct sock5ans1 *m_proxyans1; m_proxyans1 = (struct sock5ans1 *)buff; memset(buff,0,600); ClientSock.Receive(buff,600); if(m_proxyans1->Ver != 5 || (m_proxyans1->Method!=0 && m_proxyans1->Method!=2)) { m_sError = _T(“通过代理连接主站不成功!”); ClientSock.Close(); MessageBox(m_sError); return ; } if(m_proxyans1->Method == 2) { int nUserLen = strlen(“alon”); int nPassLen = strlen(“alon”); struct authreq *m_authreq = {0}; m_authreq = (struct authreq *)buff; m_authreq->Ver = 1; m_authreq->Ulen = nUserLen; strcpy(m_authreq->Name,”alon”); m_authreq->PLen = nPassLen; strcpy(m_authreq->Pass,”alon”); ClientSock.Send(buff,513); struct authans *m_authans; m_authans = (struct authans *)buff; memset(buff,0,600); ClientSock.Receive(buff,600); if(m_authans->Ver != 1 || m_authans->Status != 0) { m_sError = _T(“代理服务器用户验证不成功!”); ClientSock.Close(); MessageBox(m_sError); return ; } } struct sock5req2 *m_proxyreq2; m_proxyreq2 = (struct sock5req2 *)buff; m_proxyreq2->Ver = 5; m_proxyreq2->Cmd = 1; m_proxyreq2->Rsv = 0; m_proxyreq2->Atyp = 1; m_proxyreq2->IPAddr = inet_addr(“219.201.39.50”); m_proxyreq2->Port = ntohs(21);

ClientSock.Send(buff,sizeof(struct sock5req2)); struct sock5ans2 *m_proxyans2; memset(buff,0,600); m_proxyans2 = (struct sock5ans2 *)buff; ClientSock.Receive(buff,600); if(m_proxyans2->Ver != 5 || m_proxyans2->Rep != 0) { m_sError = _T(“通过代理连接主站不成功!”); ClientSock.Close(); MessageBox(m_sError); return ; }

//连接已经建立,发送及接收数据 memset(buff,0,600); strcpy(buff,”Hello!”); ClientSock.Send(buff,sizeof(buff)); memset(buff,0,600); ClientSock.Receive(buff,600); MessageBox(buff); ClientSock.Close(); }

void CTestDlg::OnHttp() { // TODO: Add your control notification handler code here CString m_sError; ClientSock.Create(); //if( !ClientSock.Connect(“61.145.123.202”,3128) ) if( !ClientSock.Connect(“211.92.143.19”,3128) ) //if( !ClientSock.Connect(“WWW.TOM.COM”,80) ) { m_sError = _T(“不能连接到代理服务器!”); ClientSock.Close(); MessageBox(m_sError); return ; }

char buff[600] = {0}; // sprintf( buff, “%s%s:%d%s”,”CONNECT “,”219.201.39.50″,21,” HTTP/1.1/r/nUser-Agent: MyApp/0.1/r/n/r/n”); sprintf( buff, “%s%s:%d%s”,”CONNECT “,”219.201.39.50″,21,” HTTP/1.1/r/nUser-Agent: CERN-LineMode/2.15 libwww/2.17b3/r/n/r/n”); // sprintf( buff, “%s%s:%d%s”,”CONNECT “,”www.tom.com”,80,” HTTP/1.1/r/nUser-Agent: CERN-LineMode/2.15 libwww/2.17b3/r/n/r/n”); // sprintf( buff, “%s%s”,”GET “,”HTTP://WWW.TOM.COM HTTP/1.1/r/n/r/n”); ClientSock.Send(buff,strlen(buff)); //发送请求 memset(buff,0,600); ClientSock.Receive(buff,600); if(strstr(buff, “HTTP/1.0 200 Connection established”) == NULL) //连接不成功 { m_sError = _T(“通过代理连接主站不成功!”); ClientSock.Close(); return ; }

/* if( strstr(buff, “Error 403”) ) { //return GoError(PROXYERROR_PROXYDISABLE); //代理服务器拒绝请求 } if( strstr(buff, “407 Proxy authentication required”) ) //需要身份验证 { //return GoError(PROXYERROR_USERNAMEORPASSWORD); //用户身份校检不成功 } if( strstr(buff, “Connection refuesed”) ) { //return GoError(PROXYERROR_CONNECTHOSTSERVER); //通过代理连接主站不成功 } if( strstr(buff, “Access Denied”) ) { //return GoError(PROXYERROR_USERNAMEORPASSWORD); //用户身份校检不成功 } if(strstr(buff, “Connection refused by Remote Host”) ) { //return GoError(PROXYERROR_CONNECTHOSTSERVER); //通过代理连接主站不成功 } ClientSock.Close(); */

//连接已经建立,发送及接收数据 memset(buff,0,600); strcpy(buff,”Hello!”); ClientSock.Send(buff,sizeof(buff)); memset(buff,0,600); ClientSock.Receive(buff,600); MessageBox(buff); ClientSock.Close(); }

/ ///另附一些http的请求和返回 发送一: CONNECT 61.135.158.91:80 HTTP/1.1 User-Agent: MyApp/0.1

发送二: CONNECT 61.135.158.91:80 HTTP/1.1 User-Agent: CERN-LineMode/2.15 libwww/2.17b3

发送三: CONNECT 127.0.0.1:2222 HTTP/1.0 User-agent: MyApp/1.0 Proxy-authorization: enter xxxxxx

接收一: HTTP/1.0 403 Forbidden Server: Topproxy-2.0/ Mime-Version: 1.0 Date: Thu, 18 Nov 2004 16:37:53 GMT Content-Type: text/html Content-Length: 718 Expires: Thu, 18 Nov 2004 16:37:53 GMT X-Squid-Error: ERR_ACCESS_DENIED 0 X-Cache: MISS fro

接收二: HTTP/1.0 502 Proxy Error ( SSL port specified is not allowed. ) Via: 1.0 PROXY Pragma: no-cache Cache-Control: no-cache Content-Type: text/html

<!DOCTYPE HTML PUBLIC “-//IETF//DTD HTML//EN”> <html>

<head> <meta http-equiv=”Conten”

接收三: HTTP/1.1 403 Forbidden Date: Sat, 20 Nov 2004 14:33:13 GMT Content-Length: 257 Content-Type: text/html Server: NetCache appliance (NetApp/5.6R1D6)

<HTML> <HEAD><TITLE>403 Forbidden</TITLE></HEAD> <BODY> <H1>Forbidden</H1> <H4>

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/148885.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云服务器
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档