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

[入库:2006年2月23日] [更新:2007年3月24日]

本文简介:

+----+----+----+----+----+----+----+----+
| 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 receiving and interpreting a request message, a server responds
   with an HTTP response message.

       Response      = Status-Line               ; Section 6.1
                       *(( general-header        ; Section 4.5
                        | response-header        ; Section 6.2
                        | entity-header ) CRLF)  ; Section 7.1
                       CRLF
                       [ message-body ]          ; Section 7.2

本文关键:VB6 中 使用Winsock穿越各种代理的实现(TCP协议)
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top