古詩詞大全網 - 成語經典 - Socks5協議簡介

Socks5協議簡介

socks5是壹個代理協議,主要的作用就是代理客戶端來訪問遠程服務器,起到壹個中介作用。

壹般情況下當代理客戶端因為防火墻等原因訪問不了遠程服務器,而另壹個服務器即可以訪問遠程服務器又可以被客戶端訪問到時,可以在這個服務器上部署socks5服務端,本地部署socks5客戶端,讓這個中介服務器來代理訪問遠程服務器。

下面介紹協議流程,可以簡單分為握手階段,準備階段和代理階段

客戶端建立和代理服的tcp連接A,並發送第壹幀數據:

VER:協議版本號,socks5情況下為0x05

代理服務器收到後,會鑒別VER,回應

METHOD:身份驗證方法,不需要身份驗證時為0x00,此時直接進入”準備階段“(不為0x00時,需要走身份驗證流程,參見 socks5身份驗證 )

客戶端發送第二幀數據:

CMD:命令,tcp代理0x01,udp代理0x03

RSV:保留字段

ATYP:地址類型 0x01:ipv4,0x03:域名,0x04:ipv6

DST.ADDR:目標地址

DST.PORT:目標端口

比如數據 :0x05|0x01|0x00|0x03|0x0d7777772e62616964752e636f6d|0x01bb

代表需要代理的是tcp連接,目標地址類型是域名,真實解析出來目標地址就是" www.baidu.com:443 ",即告訴代理服,幫我和" www.baidu.com:443 "作代理吧

代理服收到後,就直接建立和DST.ADDR的tcp連接B,回復

REP:狀態位,0x00代表連接DST.ADDR成功了

RSV:保留字段

ATYP:地址類型 0x01:ipv4,0x03:域名,0x04:ipv6

BND.ADDR:綁定地址,連接B的本地地址

BND.PORT:綁定端口,連接B的本地端口

比如,返回0x05|0x00|0x00|0x01|0xc0a8c76a|0xcdf0,代表準備代理成功了,進入下壹步吧

客戶端把發給目標服的數據由連接A發給代理服,代理服將這些數據轉由連接B發給目標服,同時代理服收到的目標服數據轉由連接A返回給客戶端

以上是整個socks5代理的tcp代理流程的簡單流程,udp代理會復雜些,後面會單獨寫壹篇,

想詳細了解的可以參照我的golang實現 /0990/socks5

RFC1928-SOCKS Protocol Version 5