六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

VB6中使用Winsock穿越各種代理的完成(TCP協議)

[摘要]感謝 Oleg Gdalevich 和 CSDN 用戶 zyg0(影子)對本文(程序)所做的貢獻本文中引用的RFC文檔內容歸原作者所有轉載本文請標明出處本文作者:吳滂本文中提及的程序可在 枕善居 http://www.mndsoft.com/blog/blogview.asp?logID=494...
感謝 Oleg Gdalevich 和 CSDN 用戶 zyg0(影子)對本文(程序)所做的貢獻

本文中引用的RFC文檔內容歸原作者所有

轉載本文請標明出處

本文作者:吳滂

本文中提及的程序可在 枕善居  http://www.mndsoft.com/blog/blogview.asp?logID=494 下載

關于用vb的winsock穿透代理的討論歸討論,一直沒有什么源代碼放出,現在我就放源出來,省的某些人拿這所謂的"技術"去騙錢.

由于缺乏測試環境,本程序只在我自己編寫的代理模擬器上測試過,其結果和騰訊QQ,MSN,網易泡泡穿越該模擬器時得出的結果基本一致.因此,代碼可能有錯誤的地方,請各位有條件的用戶自行改正,請見諒!

首先,是基礎知識,也就是RFC文檔.這個是必看內容.我的程序就是基于這些文檔寫出.下面是各RFC的連接,為了準確,我先提供英文版的連接,在下面的介紹中再把關鍵部分翻譯成中文.另外,要糾正一個錯誤.國內很多文章說socks5代理的用戶名/密碼校驗標準在 RFC 1928里有說明,其實這是一個完全錯誤的說法(我很懷疑寫那文章的人有沒有看過RFC),socks5用戶名/密碼校驗標準其實是在 RFC 1929 里面說明的.

RFC 1928 - socks5 代理標準

RFC 1929 - socks5 代理用戶名/密碼校驗標準

RFC ???? - socks4 代理標準

RFC 2616 - HTTP1.1 標準



我們現在直入正題:先說socks5的TCP穿透(有了這個例子大家自己照這可以寫UDP穿透)

首先和代理服務器連接-直接用winsock去connect指定的地址端口(通常是1080)即可.然后進入細節商議階段.

細節商議--無用戶名/密碼校驗

RFC 1928 中對于細節商議的第一步是這樣描述的:

The client connects to the server, and sends a version
   identifier/method selection message:

                   +----+----------+----------+
                    VER NMETHODS METHODS  
                   +----+----------+----------+
                    1       1      1 to 255
                   +----+----------+----------+

   The VER field is set to X''05'' for this version of the protocol.  The
   NMETHODS field contains the number of method identifier octets that
   appear in the METHODS field.


   The server selects from one of the methods given in METHODS, and
   sends a METHOD selection message:

                         +----+--------+
                          VER METHOD
                         +----+--------+
                          1      1    
                         +----+--------+

   If the selected METHOD is X''FF'', none of the methods listed by the
   client are acceptable, and the client MUST close the connection.

   The values currently defined for METHOD are:

          o  X''00'' NO AUTHENTICATION REQUIRED   ---------無用戶密碼 00
          o  X''01'' GSSAPI                       ---------??? GSSAPI ?
          o  X''02'' USERNAME/PASSWORD            ---------有用戶密碼 02
          o  X''03'' to X''7F'' IANA ASSIGNED
          o  X''80'' to X''FE'' RESERVED FOR PRIVATE METHODS
          o  X''FF'' NO ACCEPTABLE METHODS        ---------失敗       255

   The client and server then enter a method-specific sub-negotiation.



換言之,就是向服務器發送三個字節的Byte數組,由于是無須用戶/密碼校驗,展開來寫是 05 01 00

然后服務器返回兩個字節的信息,第一個字節固定,第而個字節是說明,如果是16進制的FF(即十進制255)表示連接失敗(o  X''FF'' NO ACCEPTABLE METHODS)根據上面的列表,我們連接成功應該第二字節為 00.

然后我們進入第二步,請看以下RFC說明:

Once the method-dependent subnegotiation has completed, the client
   sends the request details.  If the negotiated method includes
   encapsulation for purposes of integrity checking and/or
   confidentiality, these requests MUST be encapsulated in the method-
   dependent encapsulation.

   The SOCKS request is formed as follows:

        +----+-----+-------+------+----------+----------+
         VER CMD   RSV   ATYP DST.ADDR DST.PORT
        +----+-----+-------+------+----------+----------+
         1     1   X''00''   1    Variable     2     
        +----+-----+-------+------+----------+----------+

     Where:

          o  VER    protocol version: X''05''             ------------- 固定 05
          o  CMD
             o  CONNECT X''01''                           ------------- TCP方式 01
             o  BIND X''02''
             o  UDP ASSOCIATE X''03''                     ------------- UDP方式 03
          o  RSV    RESERVED                            ------------- 固定 00
          o  ATYP   address type of following address
             o  IP V4 address: X''01''                    ------------- IPv4 01
             o  DOMAINNAME: X''03''
             o  IP V6 address: X''04''
          o  DST.ADDR       desired destination address
          o  DST.PORT desired destination port in network octet
             order

   The SOCKS server will typically evaluate the request based on source
   and destination addresses, and return one or more reply messages, as
   appropriate for the request type.


發送 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進制的,請自己看程序

最后,接受服務器返回數據,看RFC:

       +----+-----+-------+------+----------+----------+
         VER REP   RSV   ATYP BND.ADDR BND.PORT
        +----+-----+-------+------+----------+----------+
         1     1   X''00''   1    Variable     2     
        +----+-----+-------+------+----------+----------+

     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 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

6.1 Status-Line

   The first line of a Response message is the Status-Line, consisting
   of the protocol version followed by a numeric status code and its
   associated textual phrase, with each element separated by SP
   characters. No CR or LF is allowed except in the final CRLF sequence.

       Status-Line = HTTP-Version SP Status-Code SP Reason-Phrase CRLF

6.1.1 Status Code and Reason Phrase

   The Status-Code element is a 3-digit integer result code of the
   attempt to understand and satisfy the request. These codes are fully
   defined in section 10. The Reason-Phrase is intended to give a short
   textual description of the Status-Code. The Status-Code is intended
   for use by automata and the Reason-Phrase is intended for the human
   user. The client is not required to examine or display the Reason-
   Phrase.

   The first digit of the Status-Code defines the class of response. The
   last two digits do not have any categorization role. There are 5
   values for the first digit:

      - 1xx: Informational - Request received, continuing process

      - 2xx: Success - The action was successfully received,
        understood, and accepted

      - 3xx: Redirection - Further action must be taken in order to
        complete the request

      - 4xx: Client Error - The request contains bad syntax or cannot
        be fulfilled

      - 5xx: Server Error - The server failed to fulfill an apparently
        valid request

   The individual values of the numeric status codes defined for
   HTTP/1.1, and an example set of corresponding Reason-Phrase''s, are
   presented below. The reason phrases listed here are only
   recommendations -- they MAY be replaced by local equivalents without
   affecting the protocol.

      Status-Code    =
            "100"  ; Section 10.1.1: Continue
           "101"  ; Section 10.1.2: Switching Protocols
           "200"  ; Section 10.2.1: OK
           "201"  ; Section 10.2.2: Created
           "202"  ; Section 10.2.3: Accepted
           "203"  ; Section 10.2.4: Non-Authoritative Information
           "204"  ; Section 10.2.5: No Content
           "205"  ; Section 10.2.6: Reset Content
           "206"  ; Section 10.2.7: Partial Content
           "300"  ; Section 10.3.1: Multiple Choices
           "301"  ; Section 10.3.2: Moved Permanently
           "302"  ; Section 10.3.3: Found
           "303"  ; Section 10.3.4: See Other
           "304"  ; Section 10.3.5: Not Modified
           "305"  ; Section 10.3.6: Use Proxy
           "307"  ; Section 10.3.8: Temporary Redirect
           "400"  ; Section 10.4.1: Bad Request
           "401"  ; Section 10.4.2: Unauthorized
           "402"  ; Section 10.4.3: Payment Required
           "403"  ; Section 10.4.4: Forbidden
           "404"  ; Section 10.4.5: Not Found
           "405"  ; Section 10.4.6: Method Not Allowed
           "406"  ; Section 10.4.7: Not Acceptable

           "407"  ; Section 10.4.8: Proxy Authentication Required
           "408"  ; Section 10.4.9: Request Time-out
           "409"  ; Section 10.4.10: Conflict
           "410"  ; Section 10.4.11: Gone
           "411"  ; Section 10.4.12: Length Required
           "412"  ; Section 10.4.13: Precondition Failed
           "413"  ; Section 10.4.14: Request Entity Too Large
           "414"  ; Section 10.4.15: Request-URI Too Large
           "415"  ; Section 10.4.16: Unsupported Media Type
           "416"  ; Section 10.4.17: Requested range not satisfiable
           "417"  ; Section 10.4.18: Expectation Failed
           "500"  ; Section 10.5.1: Internal Server Error
           "501"  ; Section 10.5.2: Not Implemented
           "502"  ; Section 10.5.3: Bad Gateway
           "503"  ; Section 10.5.4: Service Unavailable
           "504"  ; Section 10.5.5: Gateway Time-out
           "505"  ; Section 10.5.6: HTTP Version not supported
           extension-code


可知,如果連接成功,服務器返回的信息是 "HTTP/" + 代理版本 + "200" + 描述("Connection established")

所以我們只要判斷返回的信息是否以"http"開頭,是否存在" 200 "字眼即可.

以下是關鍵函數的源代碼:

Public Function ProxyStep(ProxyType As Integer, PStep As Integer)
Dim SendByte() As Byte
If ProxyType = 0 Then                    ''@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ sock4代理
If PStep = 1 Then

ReDim SendByte(0 To 8) As Byte

SendByte(0) = 4                          '' 04

SendByte(1) = 1                          '' 01

SendByte(2) = Int(DestPort / 256)

SendByte(3) = DestPort Mod 256

SendByte(4) = GetIPByte(1, DestIP)

SendByte(5) = GetIPByte(2, DestIP)

SendByte(6) = GetIPByte(3, DestIP)

SendByte(7) = GetIPByte(4, DestIP)

SendByte(8) = 0                  ''最后要以 0 結束

Form1.Winsock1.SendData SendByte()

ConnStep = PStep + 1
Exit Function

End If

If PStep = 2 Then            ''代理回復,第二字節為 90 為成功,其余值為失敗
If Asc(Mid(RevBuffer, 2, 1)) <> 90 Then
Debug.Print Asc(Mid(RevBuffer, 2, 1))
MsgBox "連接sock4代理失敗!", 48, "錯誤"
Form1.Winsock1.Close
ConnStep = 0
Exit Function
Else
Form1.Label8.Caption = "連接目標服務器成功!"
ConnStep = -1
Form2.Show
Exit Function
End If

End If
End If

''*******************下面的例子有大量重復代碼,是為了讓大家更清楚地了解sock5穿透過程,大家可以拿回去自己優化 **********************************

If ProxyType = 1 Then ''@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ sock5代理

Select Case PStep


Case 1
ReDim SendByte(0 To 2) As Byte   ''第一步 無驗證發送 05 01 00, 有驗證發送 05 02 02
SendByte(0) = 5                     '' 05
SendByte(1) = 1             ''01 ''在有用戶密碼驗證時此字節是 1 還是 2 有諸多爭論,現以騰訊QQ穿越代理模擬器時發送的數據為準,如有錯誤,請自己修改!
SendByte(2) = IIf(Form1.Check1.Value = 0, 0, 2) ''00 或 02
Form1.Winsock1.SendData SendByte()
ConnStep = PStep + 1
Exit Function

Case 2               ''代理回復
If Asc(Mid(RevBuffer, 2, 1)) = 255 Then ''FF (255) 為失敗
MsgBox "連接代理失敗!", 64
Form1.Winsock1.Close
ConnStep = 0
Exit Function

End If
If Asc(Mid(RevBuffer, 2, 1)) = 0 And Asc(Mid(RevBuffer, 1, 1)) = 5 Then ''若代理回復 05 00 為無驗證連接成功
Form1.Label8.Caption = "連接成功!無驗證"

ReDim SendByte(0 To 9) As Byte           ''第二步 無驗證 發送連接請求
SendByte(0) = 5
SendByte(1) = 1
SendByte(2) = 0
SendByte(3) = 1
SendByte(4) = GetIPByte(1, DestIP)
SendByte(5) = GetIPByte(2, DestIP)
SendByte(6) = GetIPByte(3, DestIP)
SendByte(7) = GetIPByte(4, DestIP)
SendByte(8) = Int(DestPort / 256)   ''把10進制端口分成兩個字節
SendByte(9) = DestPort Mod 256      ''把10進制端口分成兩個字節
Form1.Winsock1.SendData SendByte()

ConnStep = ConnStep + 1

Exit Function

End If

If Asc(Mid(RevBuffer, 2, 1)) = 2 And Asc(Mid(RevBuffer, 1, 1)) = 5 Then ''第二步 有用戶名密碼驗證 成功為 05 02
Form1.Label8.Caption = "連接成功!有驗證"
ReDim SendByte(0 To 2 + Len(UserName) + Len(UserPassword)) As Byte

SendByte(0) = 1

SendByte(1) = Len(UserName)

MemCopy SendByte(2), ByVal UserName, Len(UserName)                     ''將用戶名轉換

SendByte(2 + Len(UserName)) = Len(UserPassword)

MemCopy SendByte(3 + Len(UserName)), ByVal UserPassword, Len(UserPassword) ''將密碼轉換


Form1.Winsock1.SendData SendByte()

ConnStep = ConnStep + 1

Exit Function
End If

Case 3
If Asc(Mid(RevBuffer, 2, 1)) <> 0 And Form1.Check1.Value = 1 Then ''有驗證,驗證失敗 代理回復第二字節為 00 驗證成功,其余值為失敗
MsgBox "sock5代理校驗用戶名、密碼失敗!", 48, "錯誤"
Form1.Winsock1.Close
ConnStep = 0
Exit Function
End If

If Asc(Mid(RevBuffer, 2, 1)) = 0 And Form1.Check1.Value = 1 Then ''有驗證,驗證成功,回復值第二字節為 00 ,其余值為失敗
Form1.Label8.Caption = "連接成功!有驗證!"
ReDim SendByte(0 To 9) As Byte                                   ''發送連接請求
SendByte(0) = 5
SendByte(1) = 1
SendByte(2) = 0
SendByte(3) = 1
SendByte(4) = GetIPByte(1, DestIP)
SendByte(5) = GetIPByte(2, DestIP)
SendByte(6) = GetIPByte(3, DestIP)
SendByte(7) = GetIPByte(4, DestIP)
SendByte(8) = Int(DestPort / 256) ''把10進制端口分成兩個字節
SendByte(9) = DestPort Mod 256    ''把10進制端口分成兩個字節
Form1.Winsock1.SendData SendByte()

ConnStep = ConnStep + 1

Exit Function
End If

If Asc(Mid(RevBuffer, 2, 1)) = 0 And Form1.Check1.Value = 0 Then

Form1.Label8.Caption = "連接目標服務器成功!" ''無驗證的最后一步,代理回復第二字節為 00 成功,其余值為失敗
ConnStep = -1
Form2.Show
Exit Function
End If


If Asc(Mid(RevBuffer, 2, 1)) <> 0 And Form1.Check1.Value = 0 Then

MsgBox "連接目標服務器失敗!", 48, "錯誤" ''無驗證的最后一步,代理回復第二字節為 00 成功,其余值為失敗
ConnStep = 0
Form1.Winsock1.Close

Exit Function
End If

Case 4 ''只有有驗證才會用到這一步
If Asc(Mid(RevBuffer, 2, 1)) <> 0 Then
MsgBox "sock5代理連接目標服務器失敗!", 48, "錯誤"
ConnStep = 0
Form1.Winsock1.Close
Exit Function
Else
Form1.Label8.Caption = "連接目標服務器成功!"
ConnStep = -1
Form2.Show
Exit Function
End If



End Select
End If

If ProxyType = 2 Then ''@@@@@@@@@@@@@@@@@@@@@@@@HTTP1.1代理
If PStep = 1 Then ''無用戶名密碼驗證
If Form1.Check1.Value = 0 Then
HTTPHeader = "CONNECT " & Form1.Text5.Text & ":" & Form1.Text6.Text & _
" HTTP/1.1" & Chr(13) & Chr(10) & "Host: " & Form1.Text5.Text & ":" & Form1.Text6.Text & Chr(13) & Chr(10) & Chr(13) & Chr(10)

ConnStep = PStep + 1
Form1.Winsock1.SendData HTTPHeader
Exit Function

End If

If Form1.Check1.Value = 1 Then '' 有用戶名密碼驗證

HTTPHeader = "CONNECT " & Form1.Text5.Text & ":" & Form1.Text6.Text & _
" HTTP/1.1" & Chr(13) & Chr(10) & "Host: " & Form1.Text5.Text & ":" & _
Form1.Text6.Text & Chr(13) & Chr(10) & "Authorization: Basic " & StrtoBase64(Form1.Text3.Text & _
":" & Form1.Text4.Text) & Chr(13) & Chr(10) & Chr(13) & Chr(10) & "Proxy-Authorization: Basic " & _
StrtoBase64(Form1.Text3.Text & ":" & Form1.Text4.Text) & Chr(13) & Chr(10) & Chr(13) & Chr(10)
'' Chr(13) & Chr(10) 能否直接用vbCrLf ? 我不知道
Debug.Print HTTPHeader
ConnStep = PStep + 1
Form1.Winsock1.SendData HTTPHeader
Exit Function
End If



End If

If PStep = 2 Then ''代理服務器回復,格式:HTTP/[代理版本] [狀態代碼] [狀態說明]

If LCase(Left(RevBuffer, 4)) = "http" And Mid(" 200 ", 1) <> 0 Then ''狀態代碼為 200 為成功

Form1.Label8.Caption = "連接目標服務器成功!"

Form2.Show
ConnStep = -1

Else

MsgBox "HTTP1.1代理連接目標服務器失敗!", 48, "錯誤"
ConnStep = 0
Form1.Winsock1.Close
Exit Function

End If

End If
End If

End Function


主站蜘蛛池模板: 欧美在线天堂 | 齐天大性床战铁扇公主 | 日本国产在线观看 | 亚洲a级片在线观看 | 亚洲日本va中文字幕 | 在线播放精品视频 | 三级国产在线 | 四虎影在线永久免费观看 | 尹人在线视频 | 天天干夜夜欢 | 添人人躁日日躁夜夜躁夜夜揉 | 亚洲国产成人久久一区二区三区 | 亚洲成年人免费网站 | 一级a毛片免费观看久久精品 | 日本激情小视频 | 婷婷在线影院 | 伊人免费网 | 色天网站| 我色综合 | 在线看污视频 | 欧美一级黄色片视频 | 五月婷婷丁香综合 | 日本福利片在线观看 | 四虎影城 | 午夜欧美福利 | 自拍网视频 | 日韩欧美亚洲综合久久影院d3 | 一区在线观看 | 欧美一级淫片a免费播放口aaa | 青青草原影视 | 爽爽影院免费线看 | 天天上天天操 | 午夜视频在线观看182tv | 日本午夜网站 | 日韩精品在线观看视频 | 亚洲国产99在线精品一区二区 | 日本一道dvd在线播放 | 中文字幕在线精品视频入口一区 | 亚洲欧美自拍另类图片色 | 五月激情丁香网 | 日韩黄色网 |