Posted on 2009-12-27 17:51
S.l.e!ep.¢% 閱讀(2375)
評(píng)論(0) 編輯 收藏 引用 所屬分類:
NetWork
首先解釋一下為什么它被稱之為SOCKS。其實(shí)該協(xié)議設(shè)計(jì)之初是為了讓有權(quán)限的用戶可以穿過(guò)過(guò)防火墻的限制,使得高權(quán)限用戶可以訪問(wèn)一般用戶不能訪問(wèn)的外部資源。當(dāng)時(shí)設(shè)計(jì)者考慮到幾乎所有使用TCP/IP通信的應(yīng)用軟件都使用socket(套接字,實(shí)際上是一組應(yīng)用程序接口)完成底層的數(shù)據(jù)通信。為了方便軟件開發(fā)者使用該協(xié)議,協(xié)議設(shè)計(jì)者就刻意對(duì)應(yīng)了幾組socket編程最經(jīng)典的操作,并且將協(xié)議定名為SOCKS。
最先被廣泛使用的SOCKS協(xié)議是其第四版本,就是SOCKS4。IE和一些其他應(yīng)用程序直接用“Socks”表示SOCKS4協(xié)議。該版本支持TCP的connect(作為客戶端連接)和listen(打開一個(gè)監(jiān)聽端口),不支持UDP協(xié)議。SOCKS4A對(duì)SOCKS4作了一點(diǎn)增強(qiáng),即允許客戶端將域名發(fā)送給SOCKS服務(wù)器,讓SOCKS服務(wù)器進(jìn)行域名解析。
SOCKS5是第五版,相對(duì)第四版作了大幅度的增強(qiáng)。首先,它增加了對(duì)UDP協(xié)議的支持;其次,它可以支持多種用戶身份驗(yàn)證方式和通信加密方式;最后,修改了SOCKS服務(wù)器進(jìn)行域名解析的方法,使其更加優(yōu)雅。經(jīng)過(guò)這次脫胎換骨的升級(jí),SOCKS5于1996年被IETF確認(rèn)為標(biāo)準(zhǔn)通信協(xié)議,RFC編號(hào)為1928。經(jīng)過(guò)10余年的時(shí)間,大量的網(wǎng)絡(luò)應(yīng)用程序都支持SOCKS5代理。
SOCKS5雖然可以支持多種用戶身份驗(yàn)證方式,但是應(yīng)用程序真正實(shí)現(xiàn)的一般也只有兩種:不驗(yàn)證和用戶名密碼驗(yàn)證。所以大多數(shù)應(yīng)用程序SOCKS5代理設(shè)置也只有用戶名/密碼這一種可選驗(yàn)證方法。另外,盡管從SOCKS4開始,就支持打開TCP監(jiān)聽端口,但是直到SOCKS5,也只允許這個(gè)端口接收一個(gè)客戶端連接。因此網(wǎng)絡(luò)服務(wù)提供者(如http服務(wù)器)不能使用SOCKS。實(shí)際上,很多SOCKS服務(wù)器的實(shí)現(xiàn)也不支持打開TCP監(jiān)聽端口。
由于SOCKS5實(shí)際上仍然對(duì)應(yīng)了socket的經(jīng)典操作,所以有人利用這一點(diǎn)編寫了一種通用軟件,可以讓不支持SOCKS5協(xié)議的應(yīng)用軟件也能通過(guò)SOCKS5服務(wù)器進(jìn)行網(wǎng)絡(luò)通信,而應(yīng)用軟件則對(duì)此一無(wú)所知。這類軟件最著名的莫過(guò)于SocksCap32了,它是Permeo公司(其前身是NEC北美公司的一個(gè)部門,而SOCKS最初就是NEC北美公司的工程師開發(fā)并維護(hù)的)早期推出的一款產(chǎn)品。用戶可以免費(fèi)使用其試用版。試用版和正式版相比,沒(méi)有功能上的限制,只有使用時(shí)間的限制。但是到目前為止,Permeo總是會(huì)在老版本到期之前推出一個(gè)延后了期限的“新”版本,所以用戶實(shí)際上可以免費(fèi)使用。SocksCap32是利用API鉤子,截獲應(yīng)用軟件對(duì)socket函數(shù)的調(diào)用來(lái)實(shí)現(xiàn)對(duì)SOCKS5客戶端的模擬。盡管SocksCap32很有名,但是由于推出的時(shí)間較早,對(duì)很多現(xiàn)代應(yīng)用軟件時(shí)常表現(xiàn)的力不從心,所以Permeo又提供了Permeo Security Driver(以下稱為PSD)。這款產(chǎn)品使用了驅(qū)動(dòng)技術(shù)從底層直接截獲應(yīng)用軟件的socket通信,因此幾乎可以為所有應(yīng)用軟件提供SOCKS5客戶端的支持。PSD不提供試用版,但是可以找到其早期版本的注冊(cè)碼。
雖然說(shuō)設(shè)計(jì)SOCKS協(xié)議的初衷是在保證網(wǎng)絡(luò)隔離的情況下,提高部分人員的網(wǎng)絡(luò)訪問(wèn)權(quán)限,但是國(guó)內(nèi)似乎很少有組織機(jī)構(gòu)這樣使用。一般情況下,大家都會(huì)使用更新的網(wǎng)絡(luò)安全技術(shù)來(lái)達(dá)到相同的目的。但是由于SocksCap32和PSD這類軟件,人們找到了SOCKS協(xié)議新的用途——突破網(wǎng)絡(luò)通信限制,這和該協(xié)議的初衷實(shí)際上正好相反。比如某些網(wǎng)游的部分服務(wù)器設(shè)置為只接收部分地區(qū)的IP地址的連接。為了突破這種限制,可以找一個(gè)該地區(qū)的SOCKS5代理服務(wù)器,然后用PSD接管網(wǎng)游客戶端,通過(guò)SOCKS5代理服務(wù)器連接游戲服務(wù)器。這樣游戲服務(wù)器就會(huì)認(rèn)為該客戶端位于本地區(qū),從而允許進(jìn)行游戲。還有一種情況是:防火墻僅允許部分端口(如http的80端口)通信,那么可以利用SOCKS5協(xié)議和一個(gè)打開80端口監(jiān)聽的SOCKS5服務(wù)器連接,從而可以連接公網(wǎng)上其他端口的服務(wù)器。利用一些額外的技術(shù)手段,甚至可以騙過(guò)內(nèi)部的http代理服務(wù)器,這時(shí)在使用內(nèi)網(wǎng)http代理上網(wǎng)的環(huán)境下也可以不受限制的使用網(wǎng)絡(luò)服務(wù),這稱之為SOCKS over HTTP。通通通([url]www.tongtongtong.com[/url])是老牌SOCKS over HTTP代理提供商,實(shí)現(xiàn)了所有的SOCKS5的連接功能,且有多組國(guó)內(nèi)外服務(wù)器。信天游([url]www.xtyproxy.com[/url]),則是最近剛剛出現(xiàn)的代理服務(wù)提供商,功能和通通通相比還有差距,但是目前完全免費(fèi)。當(dāng)然,使用代理服務(wù)器后,將不可避免的出現(xiàn)通信延遲,所以應(yīng)該盡量選擇同網(wǎng)絡(luò)(指網(wǎng)通/ 電信),距離近的服務(wù)器。
sock5代理的工作程序是:
1.需要向代理方服務(wù)器發(fā)出請(qǐng)求信息。
2.代理方應(yīng)答
3.需要代理方接到應(yīng)答后發(fā)送向代理方發(fā)送目的ip和端口
4.代理方與目的連接
5.代理方將需要代理方發(fā)出的信息傳到目的方,將目的方發(fā)出的信息傳到需要代理方。代理完成。
由于網(wǎng)上的信息傳輸都是運(yùn)用tcp或udp進(jìn)行的,所以使用socks5代理可以辦到網(wǎng)上所能辦到的一切,而且不輿目的方會(huì)查到你的ip,既安全又方
便 sock5支持UDP和TCP,但兩種代理是有區(qū)別的,以下分類說(shuō)明
如何用代理TCP協(xié)議
1.向服務(wù)器的1080端口建立tcp連接。
2.向服務(wù)器發(fā)送 05 01 00 (此為16進(jìn)制碼,以下同)
3.如果接到 05 00 則是可以代理
4.發(fā)送 05 01 00 01 + 目的地址(4字節(jié)) + 目的端口(2字節(jié)),目的地址和端口都是16進(jìn)制碼(不是字符串!!)。 例202.103.190.27 -7201 則發(fā)送的信息為:05 01 00 01 CA 67 BE 1B 1C 21 (CA=202 67=103 BE=190 1B=27 1C21=7201)
5.接受服務(wù)器返回的自身地址和端口,連接完成
6.以后操作和直接與目的方進(jìn)行TCP連接相同。
如何用代理UDP連接
1.向服務(wù)器的1080端口建立udp連接
2.向服務(wù)器發(fā)送 05 01 00
3.如果接到 05 00 則是可以代理
4.發(fā)送 05 03 00 01 00 00 00 00 + 本地UDP端口(2字節(jié))
5.服務(wù)器返回 05 00 00 01 +服務(wù)器地址+端口
6.需要申請(qǐng)方發(fā)送 00 00 00 01 +目的地址IP(4字節(jié))+目的端口 +所要發(fā)送的信息
7.當(dāng)有數(shù)據(jù)報(bào)返回時(shí) 向需要代理方發(fā)出00 00 00 01 +來(lái)源地址IP(4字節(jié))+來(lái)源端口 +接受的信息
注:此為不需要密碼的代理協(xié)議,只是socks5的一部分,完整協(xié)議請(qǐng)RFC1928