SOCKS5
SOCKS5發(fā)展及現(xiàn)狀:
網(wǎng)絡發(fā)展到今天,SOCKS5也歷經(jīng)了幾次大的修改。
現(xiàn)在SOCKS5通過特殊方法,可以實現(xiàn)以下功能:
1.局部指定進程使用SOCKS5訪問網(wǎng)絡。
2.全局訪問網(wǎng)絡。也就是讓電腦上所有流量都走SOCKS5.
3.網(wǎng)絡加速功能,就是玩國外的一些游戲的時候,網(wǎng)絡卡,可以使用SOCKS5加速。
4.可以讓每個進程不同IP,即在電腦上多開游戲或者多開模擬器,或者其它進程等,可以讓每個進程不同外網(wǎng)IP來訪問網(wǎng)絡。
最初象我們,08年研究的時候,那個時候用HOOK API,也就是HOOK CONNECT WSACONNECT來攔截網(wǎng)絡,然后使用SOCKS5轉發(fā)出去,實現(xiàn)上述的4項功能。
后來一些游戲啊,一些網(wǎng)絡應用程序自己構造了一些API,如NP保護的游戲,這類應用使用HOOK API就不行了。所以在10年左右,就開始使用了LSP來攔截WSPAccept,
WSPAddressToString,
WSPAsyncSelect,
WSPBind,
WSPCancelBlockingCall,
WSPCleanup,
WSPCloseSocket,
WSPConnect,
WSPDuplicateSocket,
WSPEnumNetworkEvents,
WSPEventSelect,
WSPGetOverlappedResult,
WSPGetPeerName,
WSPGetSockName,
WSPGetSockOpt,
WSPGetQOSByName,
WSPIoctl,
WSPJoinLeaf,
WSPListen,
WSPRecv,
WSPRecvDisconnect,
WSPRecvFrom,
WSPSelect,
WSPSend,
WSPSendDisconnect,
WSPSendTo,
WSPSetSockOpt,
WSPShutdown,
WSPSocket,
WSPStringToAddress等,然后根據(jù)規(guī)則用SOCKS5代理協(xié)議轉發(fā)網(wǎng)絡。LSP相對來講,當時是應用層里比較好的攔截網(wǎng)絡方式,同樣也實現(xiàn)了以上4種功能。
截止到目前,因為大部分游戲或者網(wǎng)絡應用都會檢測自己進程是否被注入,是否讀寫了內(nèi)存。因為HOOK API及LSP,都是要給進程加載一個DLL,所以這兩種方法已經(jīng)不適合現(xiàn)在的環(huán)境。現(xiàn)在都是用驅動WFP TDI或者NDIS來攔截網(wǎng)絡數(shù)據(jù),然后應用層與驅動通信,通過規(guī)則用SOCKS5來交換網(wǎng)絡數(shù)據(jù),實現(xiàn)上述的4種功能或者其它功能。
本人研究網(wǎng)絡多年,希望結交志同道合的朋友。博客里已經(jīng)有一個文章寫有詳細的原理及實現(xiàn)的成品軟件及部分代碼。
可以參考https://blog.csdn.net/QQ1289671197/article/details/102532889
下面介紹SOCKS5詳細原理:
解釋一下為什么它被稱之為SOCKS。其實該協(xié)議設計之初是為了讓有權限的用戶可以穿過過防火墻的限制,使得高權限用戶可以訪問一般用戶不能訪問的外部資源。當時設計者考慮到幾乎所有使用TCP/IP通信的應用軟件都使用socket(套接字,實際上是一組應用程序接口)完成底層的數(shù)據(jù)通信。為了方便軟件開發(fā)者使用該協(xié)議,協(xié)議設計者就刻意對應了幾組socket編程最經(jīng)典的操作,并且將協(xié)議定名為SOCKS。
最先被廣泛使用的SOCKS協(xié)議是其第四版本,就是SOCKS4。IE和一些其他應用程序直接用“Socks”表示SOCKS4協(xié)議。該版本支持TCP的connect(作為客戶端連接)和listen(打開一個監(jiān)聽端口),不支持UDP協(xié)議。SOCKS4A對SOCKS4作了一點增強,即允許客戶端將域名發(fā)送給SOCKS服務器,讓SOCKS服務器進行域名解析。
SOCKS5是第五版,相對第四版作了大幅度的增強。首先,它增加了對UDP協(xié)議的支持;其次,它可以支持多種用戶身份驗證方式和通信加密方式;最后,修改了SOCKS服務器進行域名解析的方法,使其更加優(yōu)雅。經(jīng)過這次脫胎換骨的升級,SOCKS5于1996年被IETF確認為標準通信協(xié)議,RFC編號為1928。經(jīng)過10余年的時間,大量的網(wǎng)絡應用程序都支持SOCKS5代理。
SOCKS5雖然可以支持多種用戶身份驗證方式,但是應用程序真正實現(xiàn)的一般也只有兩種:不驗證和用戶名密碼驗證。所以大多數(shù)應用程序SOCKS5代理設置也只有用戶名/密碼這一種可選驗證方法。另外,盡管從SOCKS4開始,就支持打開TCP監(jiān)聽端口,但是直到SOCKS5,也只允許這個端口接收一個客戶端連接。因此網(wǎng)絡服務提供者(如http服務器)不能使用SOCKS。實際上,很多SOCKS服務器的實現(xiàn)也不支持打開TCP監(jiān)聽端口。
雖然說設計SOCKS協(xié)議的初衷是在保證網(wǎng)絡隔離的情況下,提高部分人員的網(wǎng)絡訪問權限,但是國內(nèi)似乎很少有組織機構這樣使用。一般情況下,大家都會使用更新的網(wǎng)絡安全技術來達到相同的目的,人們找到了SOCKS協(xié)議新的用途——突破網(wǎng)絡通信限制,這和該協(xié)議的初衷實際上正好相反。比如某些網(wǎng)游的部分服務器設置為只接收部分地區(qū)的IP地址的連接。為了突破這種限制,可以找一個該地區(qū)的SOCKS5代理服務器,然后用PSD接管網(wǎng)游客戶端,通過SOCKS5代理服務器連接游戲服務器。這樣游戲服務器就會認為該客戶端位于本地區(qū),從而允許進行游戲。還有一種情況是:防火墻僅允許部分端口(如http的80端口)通信,那么可以利用SOCKS5協(xié)議和一個打開80端口監(jiān)聽的SOCKS5服務器連接,從而可以連接公網(wǎng)上其他端口的服務器。利用一些額外的技術手段,甚至可以騙過內(nèi)部的http代理服務器,這時在使用內(nèi)網(wǎng)http代理上網(wǎng)的環(huán)境下也可以不受限制的使用網(wǎng)絡服務,這稱之為SOCKS over HTTP。
當然,使用代理服務器后,將不可避免的出現(xiàn)通信延遲,所以應該盡量選擇同網(wǎng)絡(指網(wǎng)通/ 電信),距離近的服務器。
sock5代理的工作程序是:
1.需要向代理方服務器發(fā)出請求信息。
2.代理方應答
3.需要代理方接到應答后發(fā)送向代理方發(fā)送目的ip和端口
4.代理方與目的連接
5.代理方將需要代理方發(fā)出的信息傳到目的方,將目的方發(fā)出的信息傳到需要代理方。代理完成。
由于網(wǎng)上的信息傳輸都是運用tcp或udp進行的,所以使用socks5代理可以辦到網(wǎng)上所能辦到的一切,而且不輿目的方會查到你的ip,既安全又方便 sock5支持UDP和TCP,但兩種代理是有區(qū)別的,以下分類說明
如何用代理TCP協(xié)議
1.向服務器的1080端口建立tcp連接。
2.向服務器發(fā)送 05 01 00 (此為16進制碼,以下同)
3.如果接到 05 00 則是可以代理
4.發(fā)送 05 01 00 01 + 目的地址(4字節(jié)) + 目的端口(2字節(jié)),目的地址和端口都是16進制碼(不是字符串!!)。 例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.接受服務器返回的自身地址和端口,連接完成
6.以后操作和直接與目的方進行TCP連接相同。
如何用代理UDP連接
1.向服務器的1080端口建立udp連接
2.向服務器發(fā)送 05 01 00
3.如果接到 05 00 則是可以代理
4.發(fā)送 05 03 00 01 00 00 00 00 + 本地UDP端口(2字節(jié))
5.服務器返回 05 00 00 01 +服務器地址+端口
6.需要申請方發(fā)送 00 00 00 01 +目的地址IP(4字節(jié))+目的端口 +所要發(fā)送的信息
7.當有數(shù)據(jù)報返回時 向需要代理方發(fā)出00 00 00 01 +來源地址IP(4字節(jié))+來源端口 +接受的信息
注:此為不需要密碼的代理協(xié)議,只是socks5的一部分,完整協(xié)議請RFC1928
總結
- 上一篇: 电气工程学python_浅谈如何学习电气
- 下一篇: 百度地图离线调用(详细教程)