Socks5協(xié)議簡(jiǎn)介

socks5是一個(gè)代理協(xié)議,主要的作用就是代理客戶端來(lái)訪問(wèn)遠(yuǎn)程服務(wù)器,起到一個(gè)中介作用。

一般情況下當(dāng)代理客戶端因?yàn)榉阑饓Φ仍蛟L問(wèn)不了遠(yuǎn)程服務(wù)器,而另一個(gè)服務(wù)器即可以訪問(wèn)遠(yuǎn)程服務(wù)器又可以被客戶端訪問(wèn)到時(shí),可以在這個(gè)服務(wù)器上部署socks5服務(wù)端,本地部署socks5客戶端,讓這個(gè)中介服務(wù)器來(lái)代理訪問(wèn)遠(yuǎn)程服務(wù)器。

下面介紹協(xié)議流程,可以簡(jiǎn)單分為握手階段,準(zhǔn)備階段和代理階段

握手階段

客戶端建立和代理服的tcp連接A,并發(fā)送第一幀數(shù)據(jù):

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

VER:協(xié)議版本號(hào),socks5情況下為0x05

代理服務(wù)器收到后,會(huì)鑒別VER,回應(yīng)

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

METHOD:身份驗(yàn)證方法,不需要身份驗(yàn)證時(shí)為0x00,此時(shí)直接進(jìn)入”準(zhǔn)備階段“(不為0x00時(shí),需要走身份驗(yàn)證流程,參見(jiàn)socks5身份驗(yàn)證

準(zhǔn)備階段

客戶端發(fā)送第二幀數(shù)據(jù):

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

CMD:命令,tcp代理0x01,udp代理0x03
RSV:保留字段
ATYP:地址類型 0x01:ipv4,0x03:域名,0x04:ipv6
DST.ADDR:目標(biāo)地址
DST.PORT:目標(biāo)端口
比如數(shù)據(jù) :0x05|0x01|0x00|0x03|0x0d7777772e62616964752e636f6d|0x01bb
代表需要代理的是tcp連接,目標(biāo)地址類型是域名,真實(shí)解析出來(lái)目標(biāo)地址就是"www.baidu.com:443",即告訴代理服,幫我和"www.baidu.com:443"作代理吧

代理服收到后,就直接建立和DST.ADDR的tcp連接B,回復(fù)

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

REP:狀態(tài)位,0x00代表連接DST.ADDR成功了
RSV:保留字段
ATYP:地址類型 0x01:ipv4,0x03:域名,0x04:ipv6
BND.ADDR:綁定地址,連接B的本地地址
BND.PORT:綁定端口,連接B的本地端口
比如,返回0x05|0x00|0x00|0x01|0xc0a8c76a|0xcdf0,代表準(zhǔn)備代理成功了,進(jìn)入下一步吧

代理階段

客戶端把發(fā)給目標(biāo)服的數(shù)據(jù)由連接A發(fā)給代理服,代理服將這些數(shù)據(jù)轉(zhuǎn)由連接B發(fā)給目標(biāo)服,同時(shí)代理服收到的目標(biāo)服數(shù)據(jù)轉(zhuǎn)由連接A返回給客戶端


總結(jié)

以上是整個(gè)socks5代理的tcp代理流程的簡(jiǎn)單流程,udp代理會(huì)復(fù)雜些,后面會(huì)單獨(dú)寫(xiě)一篇,
想詳細(xì)了解的可以參照我的golang實(shí)現(xiàn)https://github.com/0990/socks5

引用

RFC1928-SOCKS Protocol Version 5

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容