關(guān)于用vb的winsock穿透代理的討論歸討論,一直沒有什么源代碼放出,現(xiàn)在我就放源出來,省的某些人拿這所謂的"技術(shù)"去騙錢.
由于缺乏測試環(huán)境,本程序只在我自己編寫的代理模擬器上測試過,其結(jié)果和騰訊QQ,MSN,網(wǎng)易泡泡穿越該模擬器時得出的結(jié)果基本一致.因此,代碼可能有錯誤的地方,請各位有條件的用戶自行改正,請見諒!
首先,是基礎(chǔ)知識,也就是RFC文檔.這個是必看內(nèi)容.我的程序就是基于這些文檔寫出.下面是各RFC的連接,為了準(zhǔn)確,我先提供英文版的連接,在下面的介紹中再把關(guān)鍵部分翻譯成中文.另外,要糾正一個錯誤.國內(nèi)很多文章說socks5代理的用戶名/密碼校驗標(biāo)準(zhǔn)在 RFC 1928里有說明,其實這是一個完全錯誤的說法(我很懷疑寫那文章的人有沒有看過RFC),socks5用戶名/密碼校驗標(biāo)準(zhǔn)其實是在 RFC 1929 里面說明的.
RFC 1928 - socks5 代理標(biāo)準(zhǔn)
RFC 1929 - socks5 代理用戶名/密碼校驗標(biāo)準(zhǔn)
RFC ???? - socks4 代理標(biāo)準(zhǔn)
RFC 2616 - HTTP1.1 標(biāo)準(zhǔn)
我們現(xiàn)在直入正題:先說socks5的TCP穿透(有了這個例子大家自己照這可以寫UDP穿透)
首先和代理服務(wù)器連接-直接用winsock去connect指定的地址端口(通常是1080)即可.然后進(jìn)入細(xì)節(jié)商議階段.
細(xì)節(jié)商議--無用戶名/密碼校驗
RFC 1928 中對于細(xì)節(jié)商議的第一步是這樣描述的:
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.
由于缺乏測試環(huán)境,本程序只在我自己編寫的代理模擬器上測試過,其結(jié)果和騰訊QQ,MSN,網(wǎng)易泡泡穿越該模擬器時得出的結(jié)果基本一致.因此,代碼可能有錯誤的地方,請各位有條件的用戶自行改正,請見諒!
首先,是基礎(chǔ)知識,也就是RFC文檔.這個是必看內(nèi)容.我的程序就是基于這些文檔寫出.下面是各RFC的連接,為了準(zhǔn)確,我先提供英文版的連接,在下面的介紹中再把關(guān)鍵部分翻譯成中文.另外,要糾正一個錯誤.國內(nèi)很多文章說socks5代理的用戶名/密碼校驗標(biāo)準(zhǔn)在 RFC 1928里有說明,其實這是一個完全錯誤的說法(我很懷疑寫那文章的人有沒有看過RFC),socks5用戶名/密碼校驗標(biāo)準(zhǔn)其實是在 RFC 1929 里面說明的.
RFC 1928 - socks5 代理標(biāo)準(zhǔn)
RFC 1929 - socks5 代理用戶名/密碼校驗標(biāo)準(zhǔn)
RFC ???? - socks4 代理標(biāo)準(zhǔn)
RFC 2616 - HTTP1.1 標(biāo)準(zhǔn)
我們現(xiàn)在直入正題:先說socks5的TCP穿透(有了這個例子大家自己照這可以寫UDP穿透)
首先和代理服務(wù)器連接-直接用winsock去connect指定的地址端口(通常是1080)即可.然后進(jìn)入細(xì)節(jié)商議階段.
細(xì)節(jié)商議--無用戶名/密碼校驗
RFC 1928 中對于細(xì)節(jié)商議的第一步是這樣描述的:
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.