使用socks4 socks5 http代理的客户端

使用socks4 socks5 http代理的客户端///定义的结构structsock4req1{   charVN;   charCD;   unsignedshortPort;   unsignedlongIPAddr;   charother[1];};structsock4ans1{   charVN;   charCD;};structsock5req1{   charVer;   char

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

///定义的结构
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.net/148885.html原文链接:https://javaforall.net

(0)
上一篇 2022年6月26日 下午6:46
下一篇 2022年6月26日 下午6:46


相关推荐

  • 百度快照更新周期、百度收录更新时间[通俗易懂]

    百度快照更新周期、百度收录更新时间[通俗易懂]很多做SEO的都不清楚百度快照的更新周期,所以很多时候都不能有针对性的对网站进行操作,错过了很多机会。百度收录的更新日期一般是每个月的11号和26号,特别是26号,更新最大,但K站也是最多的。另外百度也有一个小的更新的日期,即每周四凌晨4点左右,对网站的访问量没有什么效果,只有到了中午的日期,百度对网站关键字的搜索停止重新调整之后,才会有访问量上的大的变化,有升有降。总体上来说是大致为一个

    2026年4月15日
    3
  • PyCharm跳回上一步操作和撤销操作

    PyCharm跳回上一步操作和撤销操作pycharm 是 Python 的开发工具 我们经常会用 alt b 进入某个方法查看具体实现或者用法 Demo 如果 tab 开的不多 我们可以通过 tab 标签找到原始页面 但是标签太多 我们不好管理 因此可以通过快捷方式 ctrl alt 左箭头 退回到原始页面 也可以在 pycharm 的顶层选项 View 中 把跳回箭头显示出来 把 View 中的 Toolb

    2026年3月27日
    1
  • uniapp fonticon 字体图标的使用

    uniapp fonticon 字体图标的使用uni app 使用字体图标 iconfont HRM2454 的博客 CSDN 博客上面文章 补充一下 把 css 样式的路径加上

    2026年3月17日
    2
  • DotNetTextBox控件添加外挂插件功能的图文教程。

    DotNetTextBox控件添加外挂插件功能的图文教程。在使用DotNetTextBox在线编辑器的时候,你可能觉得控件内置的功能不能满足你的编辑需要,这时DotNetTextBox控件强大的外挂插件功能就发挥作用了,使用外挂插件功能,你就能自行DIY任何自己想实现的功能,而且使用也非常简单,下面我们就为大家演示了为DotNetTextBox增加一个插入网页按钮(button)外挂插件的步骤:第一步:首先用VS2005打开system_dn…

    2022年10月19日
    3
  • 微信表情符号已写入判决书怎么删除_微信100个表情符号含义

    微信表情符号已写入判决书怎么删除_微信100个表情符号含义本文转载自IT之家,IT之家3月3日消息据法治日报报道,如今表情符号已经成为呈堂证供的一部分,登上多地法院判决书等司法文书。报道称,在广东省深圳市中级人民法院发布的一份民事判决书中,对一起涉及微信表情的合同纠纷案作出了判决。作为创作者的卢泓于2018年4月24日向深圳市道一影业集团有限公司法定代表人田民发送其创作的歌词。后者表明其在路上后,发送了微信表情符号[强]。“结合双方的前后聊天内容,一审法院认为该微信表情符号[强]并非是对卢泓歌词的认可,而是属于礼貌性回复,不能

    2025年8月18日
    5
  • Linux rsync命令用法详解

    Linux rsync命令用法详解在 Linux 系统下 数据备份的工具很多 除了前面介绍了 tar cpio dd 命令之外 本节再介绍一个用来备份数据的命令 就是 rsync 从字面意思上 rsync 可以理解为 remotesync 远程同步 但它不仅可以远程同步数据 类似于 scp 命令 还可以本地同步数据 类似于 cp 命令 不同于 cp 或 scp 的一点是 使用 rsync 命令备份数据时 不会直接覆盖以前的数据 如果数据已经存在 而是先判断已经存在的数据和新数据的差异 只有数据不同时才会把不相同的部分覆盖

    2026年3月26日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号