Loading AI tools
计算机网络协议 来自维基百科,自由的百科全书
SOCKS是一種網絡傳輸協定,名字取自SOCKetS[註 1],主要用於客戶端與外網伺服器之間通訊的中間傳遞。
當防火牆後的客戶端要訪問外部的伺服器時,就跟SOCKS代理伺服器連接。這個代理伺服器控制客戶端訪問外網的資格,允許的話,就將客戶端的請求發往外部的伺服器。
這個協定最初由David Koblas開發,而後由NEC的Ying-Da Lee將其擴充到SOCKS4。最新協定是SOCKS5,與前一版本相比,增加支援UDP、驗證,以及IPv6。
根據OSI模型,SOCKS是對談層的協定,位於表示層與傳輸層之間。
SOCKS協定不提供加密。
SOCKS工作在比HTTP代理更低的層次:SOCKS使用握手協定來通知代理軟件其客戶端試圖進行的SOCKS連接,然後儘可能透明地進行操作,而常規代理可能會解釋和重寫報頭(例如,使用另一種底層協定,例如FTP;然而,HTTP代理只是將HTTP請求轉發到所需的HTTP伺服器)。雖然HTTP代理有不同的使用模式,HTTP CONNECT方法允許轉發TCP連接;然而,SOCKS代理還可以轉發UDP流量(僅SOCKS5),而HTTP代理不能。HTTP代理通常更了解HTTP協定,執行更高層次的過濾(雖然通常只用於GET和POST方法,而不用於CONNECT方法)。
下面是客戶端向SOCKS 4代理伺服器,傳送的連接請求包的格式(以位元組為單位):
VN | CD | DSTPORT | DSTIP | USERID |
---|---|---|---|---|
1 | 1 | 2 | 4 | 可變長度 |
代理伺服器而後傳送回應包(以位元組為單位):
VN | CD | DSTPORT | DSTIP |
---|---|---|---|
1 | 1 | 2 | 4 |
如果請求被拒絕,SOCKS伺服器馬上與客戶端斷開連接;如果請求被允許,代理伺服器就充當客戶端與目的主機之間進行雙向傳遞,對客戶端而言,就如同直接在與目的主機相連。
SOCKS 4A是SOCKS 4協定的簡單擴充,允許客戶端對無法解析域名的目的主機進行存取。
客戶端對DSTIP的頭三個位元組設定為NULL,最後一個位元組為非零;對應的IP位址就是0.0.0.x,其中x是非零,這當然不可能是目的主機的地址,這樣即使客戶端可以解析域名,對此也不會發生衝突。USERID以緊跟的1位元組的0(NULL)作結尾,客戶端必須傳送目的主機的域名,並以另一個1位元組的0(NULL)作結尾。CONNECT和BIND請求的時候,都要按照這種格式(以位元組為單位):
VN | CD | DSTPORT | DSTIP 0.0.0.x | USERID | NULL | HOSTNAME | NULL |
---|---|---|---|---|---|---|---|
1 | 1 | 2 | 4 | 可變長度 | 1 | 可變長度 | 1 |
使用4a協定的伺服器必須檢查請求包里的DSTIP欄位,如果表示地址0.0.0.x,x是非零結尾,那麼伺服器就得讀取客戶端所發包中的域名欄位,然後伺服器就得解析這個域名,可以的話,對目的主機進行連接。
SOCKS5比SOCKS4a多了驗證、IPv6、UDP支援。建立與SOCKS5伺服器的TCP連接後客戶端需要先傳送請求來確認協定版本及認證方式,格式為(以位元組為單位):
VER | NMETHODS | METHODS |
---|---|---|
1 | 1 | 1-255 |
伺服器從客戶端提供的方法中選擇一個並通過以下訊息通知客戶端(以位元組為單位):
VER | METHOD |
---|---|
1 | 1 |
之後客戶端和伺服器端根據選定的認證方式執行對應的認證。
認證結束後客戶端就可以傳送請求資訊。如果認證方法有特殊封裝要求,請求必須按照方法所定義的方式進行封裝。
SOCKS5請求格式(以位元組為單位):
VER | CMD | RSV | ATYP | DST.ADDR | DST.PORT |
---|---|---|---|---|---|
1 | 1 | 0x00 | 1 | 動態 | 2 |
伺服器按以下格式回應客戶端的請求(以位元組為單位):
VER | REP | RSV | ATYP | BND.ADDR | BND.PORT |
---|---|---|---|---|---|
1 | 1 | 0x00 | 1 | 動態 | 2 |
在客戶端、伺服器端協商使用用戶名密碼認證後,客戶端發出用戶名密碼,格式為(以位元組為單位):
鑑定協定版本 | 用戶名長度 | 用戶名 | 密碼長度 | 密碼 |
---|---|---|---|---|
1 | 1 | 動態 | 1 | 動態 |
鑑定協定版本目前為 0x01 。
伺服器鑑定後發出如下回應:
鑑定協定版本 | 鑑定狀態 |
---|---|
1 | 1 |
其中鑑定狀態 0x00 表示成功,0x01 表示失敗。
部分SOCKS伺服器軟件:
一般情況下應用程式會內嵌對SOCKS協定的支援。但socksify,proxifier軟件可強制使不支援SOCKS的應用通過代理聯網。
客戶端 | 許可證 | 版本 | 發佈日期 | 平台 | 支援協定 |
Dante client(頁面存檔備份,存於互聯網檔案館) | BSD/CMU | 1.1.18 | 09/2005 | Linux | v4, v5 |
FreeCap(頁面存檔備份,存於互聯網檔案館) | GPL | 3.18 | 02/2005 | Windows | - |
Hummingbird socks(頁面存檔備份,存於互聯網檔案館) | - | - | - | Windows | - |
ProxyCap(頁面存檔備份,存於互聯網檔案館) | - | 2.03 | - | Windows | - |
SocksCap | Non-Comercial home use | - | - | - | v5 |
Super Socks5Cap(頁面存檔備份,存於互聯網檔案館) | - | 1.5.3 | - | Windows | - |
tsocks(頁面存檔備份,存於互聯網檔案館) | GPL | 1.8 | 10/2002 | - | - |
nylon | - | - | 06/2003 | OpenBSD | - |
Win2Socks(頁面存檔備份,存於互聯網檔案館) | - | 2.7.0 | 06/2022 | Windows | v5 |
proxifier(頁面存檔備份,存於互聯網檔案館) | - | 3.4.2 | 08/2019 | Windows,Mac | v4,v5 |
SocksCap | - | - | - | Windows | v4,v5 |
tun2socks(頁面存檔備份,存於互聯網檔案館) | BSD-Clause | 1.0.0.2 | 09/2021 | Windows | v5 |
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.