转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> VB.NET程序 >> 正文
VB6 中 使用Winsock穿越各种代理的实现(TCP协议)         ★★★★

VB6 中 使用Winsock穿越各种代理的实现(TCP协议)

作者:闵涛 文章来源:闵涛的学习笔记 点击数:3976 更新时间:2009/4/23 15:03:55
;   Where:

          o  VER    protocol version: X''''05''''          ------------ 固定 05
          o  REP    Reply field:
             o  X''''00'''' succeeded                      ------------ 若为 00 成功 其余可以都看成失败
             o  X''''01'''' general SOCKS server failure
             o  X''''02'''' connection not allowed by ruleset
             o  X''''03'''' Network unreachable
             o  X''''04'''' Host unreachable
             o  X''''05'''' Connection refused
             o  X''''06'''' TTL expired
             o  X''''07'''' Command not supported
             o  X''''08'''' Address type not supported
             o  X''''09'''' to X''''FF'''' unassigned
          o  RSV    RESERVED
          o  ATYP   address type of following address

             o  IP V4 address: X''''01''''
             o  DOMAINNAME: X''''03''''
             o  IP V6 address: X''''04''''
          o  BND.ADDR       server bound address
          o  BND.PORT       server bound port in network octet order

   Fields marked RESERVED (RSV) must be set to X''''00''''.
 

可见,对于返回信息,只须判断第二字节是否为00.若为 00 连接成功,剩下的操作和直连一样,Winsock可直接用SendData 和 GetData 发送\接受数据.

下面介绍需要验证用户名/密码的socks5穿透

第一步还是发送三个字节,只是内容有变,展开来写为: 05 01 02

服务器返回信息也有所不同,正确的返回为 05 02

成功后发送用户/密码信息,请看RFC 说明:

Once the SOCKS V5 server has started, and the client has selected the
   Username/Password Authentication protocol, the Username/Password
   subnegotiation begins.  This begins with the client producing a
   Username/Password request:

           +----+------+----------+------+----------+
           |VER | ULEN |  UNAME   | PLEN |  PASSWD  |
           +----+------+----------+------+----------+
           | 1  |  1   | 1 to 255 |  1   | 1 to 255 |
           +----+------+----------+------+----------+

   The VER field contains the current version of the subnegotiation,
   which is X''''01''''. The ULEN field contains the length of the UNAME field
   that follows. The UNAME field contains the username as known to the
   source operating system. The PLEN field contains the length of the
   PASSWD field that follows. The PASSWD field contains the password
   association with the given UNAME.

   The server verifies the supplied UNAME and PASSWD, and sends the
   following response:

                        +----+--------+
                        |VER | STATUS |
                        +----+--------+
                        | 1  |   1    |
                        +----+--------+

   A STATUS field of X''''00'''' indicates success. If the server returns a
   `failure'''' (STATUS value other than X''''00'''') status, it MUST close the
   connection.

即 发送 01 + 用户名长度(一字节) + 转换成16进制码的用户名 + 密码长度(一字节) + 转换成16进制码的密码,关于如何把用户名和密码转换为10进制Byte数组,请自己看程序.

然后服务器返回两个字节的信息,只须判断第二字节,00 为成功,其余为失败.

剩下的步骤和无用户名密码校验是一样的,即

发送 05 01 00 01 + 目的地址(4字节) + 目的端口(2字节),目的地址和端口都是16进制码(不是字符串)。
例202.103.190.27 - 7201
则发送的信息为:05 01 00 01 CA 67 BE 1B 1C 21
(CA=202 67=103 BE=190 1B=27 1C21=7201)

关于我是怎么把16进制码换成10进制的,请自己看程序

最后接受服务器返回信息.对于返回信息,只须判断第二字节是否为00.若为 00 连接成功,剩下的操作和直连一样,Winsock可直接用SendData 和 GetData 发送\接受数据.

socks4的TCP穿透(事实上,socks4只支持TCP穿透)

无用户名/密码验证

请看 RFC 说明

1) CONNECT

The client connects to the SOCKS server and sends a CONNECT request when
it wants to establish a connection to an application server. The client
includes in the request packet the IP address and the port number of the
destination host, and userid, in the following format.

+----+----+----+----+----+----+----+----+----+----+....+----+
| VN | CD | DSTPORT |      DSTIP        | USERID       |NULL|
+----+----+----+----+----+----+----+----+----+----+....+----+
 1    1      2              4             variable       1

VN is the SOCKS protocol version number and should be 4. CD is the
SOCKS command code and should be 1 for CONNECT request. NULL is a byte
of all zero bits.

 

我们首先还是连接服务器,然后根据RFC的格式发送数据给服务器.由于是无用户密码验证,我们需要发送9个字节的数据,展开写为 04 01 + 目标端口(2字节) + 目标IP(4字节) + 00,奇怪的是,表中的USERID部分似乎是没有用的,我参照过大量的C++代码,代码中都没有体现该部分.

至于如何转换目标端口和IP为相应的Byte数组,请自己看示例程序.消息发出后,服务器会返回信息,格式如下:

+----+----+----+----+----+----+----+----+
| VN | CD | DSTPORT |      DSTIP        |
+----+----+----+----+----+----+----+----+
   1    1      2              4

VN is the version of the reply code and should be 0. CD is the result
code with one of the following values:

90: request granted               -------------- 成功
91: request rejected or failed    -------------- 失败
92: request rejected becasue SOCKS server cannot connect to
    identd on the client
93: request rejected because the client program and identd
    report different user-ids

The remaining fields are ignored.

 

根据RFC的说法,代理服务器返回8字节的数据,我们只要判断第二字节是否为90即可,若是90连接成功,否则失败.剩下的操作和直连一样,Winsock可直接用SendData 和 GetData 发送\接受数据.

HTTP1.1 代理的穿透

由于RFC 2616过于冗长,加上HTTP代理穿透的步骤比socks简单,这里就不详细说明了,我只给出连接的步骤和发送数据格式.

第一步仍然是用Winsock去连接代理服务器.第二步为发送请求字符,其格式为:

无用户名/密码校验 格式:

"CONNECT" + 空格 + 目标连接地址 + ":" + 目标连接端口 + 空格 + "HTTP/1.1" + Chr(13) + Chr(10) + "Host:" + 空格 + 目标连接地址 + ":" + 目标连接端口 + Chr(13) + Chr(10) + Chr(13) + Chr(10)

用户名/密码验证格式:

"CONNECT" + 空格 + 目标连接地址 + ":" + 目标连接端口 + 空格 + "HTTP/1.1" + Chr(13) + Chr(10) + "Host:" + 空格 + 目标连接地址 + ":" + 目标连接端口 + Chr(13) + Chr(10) + "Authorization: Basic" + 空格 + 经Base64加密过后的[用户名:密码] + Chr(13) + Chr(10) + Chr(13) + Chr(10) + "Proxy-Authorization: Basic" + 空格 + 经Base64加密过后的[用户名:密码] + Chr(13) + Chr(10) + Chr(13) + Chr(10)

发送请求完毕后,将收到代理的回应,根据RFC说明(注意 Status-Line 和 Status-Code):

6 Response

   After

上一页  [1] [2] [3] [4] [5]  下一页


[Web开发]VB实现客户机←→服务器(TCP/IP)编程监听代码  [常用软件]优化脱兔:突破XP TCP连接限制 脱兔,连接限制
[常用软件]Winamp5 Alpha版最新试用 中  [VB.NET程序]VB.NET编写的TCP异步通讯类(目前测试中)
[VB.NET程序]VB6 自动编译组件  [VB.NET程序]在 VB 中 引 用 .dbf 及 索 引 文 件
[Delphi程序]Delphi6/7 中XML 文档的应用  [Delphi程序]Delphi 中 COM 实现研究手记(一)
[Delphi程序]DBGrid 中 Cell内文字、渐进式背景色的画法  [Delphi程序]在 程 序 中 加 入 英 文 朗 读 功 能
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台