?
本文主要介紹 socks5 協議內容以及其中用到的三種代理方法
代理服務器:負責轉發客戶端請求的服務器
代理服務器在網絡中轉發流量。 它是一個中間服務器,將客戶端與其請求的目的地分開。
socks 是會話層協議,主要用于客戶端與外網服務器之間通訊的中間傳遞。SOCKS是"SOCKet Secure"的縮寫。
協議詳解
連接
客戶端首先和代理服務器進行三次握手建立連接
協商認證
連接成功后進行協商認證,發送一個數據包
±----±---------±---------+
| VER | NMETHODS | METHODS |
±----±---------±---------+
| 1 | 1 | 1 to 255 |
±----±---------±---------+
VER: 協議版本號
NMETHODS:客戶端支持的認證方法數量
METHODS:每個byte對應一個認證方法
X’00’ 不需要身份驗證(NO AUTHENTICATION REQUIRED)
X’01’ GSSAPI
X’02’ 用戶密碼認證(USERNAME/PASSWORD)
X’03’ to X’7F’ IANA ASSIGNED
X’80’ to X’FE’ RESERVED FOR PRIVATE METHODS
代理服務器返回一個應答數據包
±----±-------+
| VER | METHOD |
±----±-------+
| 1 | 1 |
±----±-------+
VER: 指定協議版本號,此處為X’05’
METHOD: 指定認證方法。該方法應從客戶端提供的認證方法中挑選一個,或者是X’FF’用以拒絕認證
請求代理
客戶端在認證成功之后,需要發送一個數據包來請求服務端:
±----±----±------±-----±---------±---------+
| VER | CMD | RSV | ATYP | DST.ADDR | DST.PORT |
±----±----±------±-----±---------±---------+
| 1 | 1 | X’00’ | 1 | Variable | 2 |
±----±----±------±-----±---------±---------+
VER: 協議版本號,此處為X’05’
CMD: 指定代理方式
CONNECT X’01’
BIND X’02’
UDP ASSOCIATE X’03’
RSV: 預留位置,標準Socks5應為X’00’
ATYP: 指定DST.ADDR的類型
IPV4地址: X’01’
域名: X’03’
IPV6地址: X’04’
DST.ADDR: 目標的地址,長度由ATYP指定
IPV4: 4個byte
域名: 第一個byte指定長度n,其后跟著n個byte標識域名
IPV6: 16個byte
DST.PORT: 目標的端口
客戶端在認證成功之后,需要發送一個數據包來請求服務端:
±----±----±------±-----±---------±---------+
| VER | REP | RSV | ATYP | BND.ADDR | BND.PORT |
±----±----±------±-----±---------±---------+
| 1 | 1 | X’00’ | 1 | Variable | 2 |
±----±----±------±-----±---------±---------+
VER: 協議版本號 X’05’
REP: 回復請求的狀態
X’00’ 成功代理
X’01’ SOCKS服務器出現了錯誤
X’02’ 不允許的連接
X’03’ 找不到網絡
X’04’ 找不到主機
X’05’ 連接被拒
X’06’ TTL超時
X’07’ 不支持的CMD
X’08’ 不支持的ATYP
X’09’ to X’FF’ Socks5標準中沒有分配對應的狀態
RSV: 預留位
ATYP: BND.ADDR的類型
IPV4: X’01’
域名: X’03’
IPV6: X’04’
BND.ADDR: 服務端指定的地址,長度由ATYP指定
IPV4: 4個byte
域名: 第一個byte指定長度n,其后跟著n個byte標識域名
IPV6: 16個byte
BND.PORT: 服務端指定的端口
CONNECT 方法:
這個時最常用的代理方法,當服務端接收到的數據包中 CMD 為 0x01 時,服務器使用 Connect 方法進行代理。
此時,服務端嘗試使用TCP協議連接對應的 (DST.ADDR, DST.PORT),根據連接的情況,決定 REP 的值。
如果連接成功,回復的數據包中的 BND.ADDR,BND.PORT 沒有太大的意義,象征性的填寫Socks 服務端在此次連接中使用的 ADDR 和 PORT 即可。
BIND 方法
Bind方法使用于目標主機需要主動連接客戶機的情況(如 FTP 協議)
當服務端接收到的數據包中 CMD 為 0x02 時,服務器使用 Bind 方法進行代理。使用 Bind 方法代理時服務端需要回復客戶端至多兩次數據包。
服務端使用 TCP 協議連接對應的 (DST.ADDR, DST.PORT),如果失敗則返回失敗狀態的數據包并且關閉此次會話。如果成功,則監聽 (BND.ADDR, BND.PORT) 來接受請求的主機的請求,然后返回第一次數據包,該數據包用以讓客戶機發送指定目標主機連接客戶機地址和端口的數據包。
在目標主機連接服務端指定的地址和端口成功或失敗之后,回復第二次數據包。此時的(BND.ADDR, BND.PORT) 應該為目標主機與服務端建立的連接的地址和端口。
FTP 實例:
FTP Client – SOCKS Client – SOCKS Server – FTP Server
FTP Client 試圖建立 FTP 控制流。SOCKS Client 向 SOCKS Server 發送 CONNECT 請求,后者響應請求,最終FTP控制流建立。CONNECT 請求包中指明 FTPServer.ADDR / FTPServer.PORT。
2. FTP Client 試圖建立 FTP 數據流。SOCKS Client 建立新的到 SOCKS Server 的 TCP 連接,并在新的 TCP 連接上發送 BIND 請求。BIND 請求包中仍然指明 FTPSERVER.ADDR / FTPSERVER.PORT。
SOCKS Server 收到 BIND 請求,創建新套接字,偵聽在 AddrA/PortA 上,并向 SOCKSClient 發送第一個 BIND 響應包,包中 BND.ADDR/BND.PORT 即 AddrA/PortA。
SOCKS Client 收到第一個 BIND 響應包。FTP Client 通過 FTP 控制流向 FTP Server 發送 PORT 命令,通知 FTP Server 應該主動建立到 AddrA/PortA 的 TCP 連接。
FTP Server 收到 PORT 命令,主動建立到 AddrA/PortA 的 TCP 連接,假設 TCP 連接相關四元組是: AddrB,PortB,AddrA,PortA
SOCKS Server 收到來自 FTP Server 的 TCP 連接請求,向 SOCKS Client 發送第二個BIND 響應包,包中 BND.ADDR/BND.PORT 即 AddrB/PortB。然后 SOCKS Server 開始轉發FTP數據流。
UDP ASSOCIATE 方法:
使用 UDP ASSOCIATE 時,客戶端的請求包中 (DST.ADDR, DST.PORT) 不再是目標的地址,而是客戶端指定本身用于發送 UDP 數據包的地址和端口。
為了支持 UDP 轉發,服務端應該建立一個 UDP 服務器用以接收客戶端發送過來的 UDP 包。然后在TCP連接中回復一個數據包,(BND.ADDR, BND.PORT)應該是UDP服務器綁定的地址與端口。
UDP服務器接收到信息之后,對來源進行篩選,如果收到的UDP包來自第一次收到的請求包中的 (DST.ADDR, DST.PORT),那么,就認為是來自客戶端,需要對數據包的頭部進行解析,獲取到該數據包需要到達的地址
±----±-----±-----±---------±---------±---------+
| RSV | FRAG | ATYP | DST.ADDR | DST.PORT | DATA |
±----±-----±-----±---------±---------±---------+
| 2 | 1 | 1 | Variable | 2 | Variable |
±----±-----±-----±---------±---------±---------+
RSV: 保留字段,默認X’0000’。
FRAG: 該數據包的片段序號,如果值為X’00’則說明該數據包為獨立數據包,如果為1~127的某個值,則說明為整個數據包的一個片段。
當收到數據包的片段之后,如果構建的Socks5代理服務器支持UDP分包代理,那么需要接收包之后,進行一個緩存拼接,去掉頭部信息之后根據序號從小到大拼接。但這種方法較為復雜,服務器可以不接受此種方式。即,丟棄所有FRAG≠X’00’的數據包。
ATYP: 指定DST.ADDR的類型
IPV4: X’01’
域名: X’03’
IPV6: X’04’
DST.ADDR: 該數據包希望到達的目標地址
DST.PORT: 該數據包希望到達的目標端口
DATA: 實際要傳輸的數據
?
本文由 貴州做網站公司 整理發布,部分圖文來源于互聯網,如有侵權,請聯系我們刪除,謝謝!
網絡推廣與網站優化公司(網絡優化與推廣專家)作為數字營銷領域的核心服務提供方,其價值在于通過技術手段與策略規劃幫助企業提升線上曝光度、用戶轉化率及品牌影響力。這...
在當今數字化時代,公司網站已成為企業展示形象、傳遞信息和開展業務的重要平臺。然而,對于許多公司來說,網站建設的價格是一個關鍵考量因素。本文將圍繞“公司網站建設價...
在當今的數字化時代,企業網站已成為企業展示形象、吸引客戶和開展業務的重要平臺。然而,對于許多中小企業來說,高昂的網站建設費用可能會成為其發展的瓶頸。幸運的是,隨...
請問我的單位電腦要卸載賽門鐵克的軟件,但是要求輸入卸載密碼。怎么辦???我試過了。許多方法非常復雜,難以使用。最簡單也是最好的卸載方法是下載cleanwipe(Symantec的官方卸載工具),然后運行它并重新啟動它。怎樣徹底刪除SEP? CleanWipe.exe在互聯網上下載。在中間重新啟動兩次。2如果你不能完全卸載賽門鐵克端點保護,1)首先在桌面空白處右擊并選擇創建一個新記事本文檔,然后將下面...
沈陽廣全中學報名需要什么條件?沈陽市廣泉中學只要有學籍和初中都可以報名。廣泉沖蕩是一所民辦高中,省級高級示范中學。這個學校的軟硬件條件不錯,但是學費不低。廣全中學高中部在沈陽排名?高級中學在沈陽排名靠前,廣泉中學也是非常有名的民辦中學。它的教學質量很好,高考升學率很高,所以在沈陽的排名是名列前茅的。沈陽廣泉中學建立時間?沈陽市廣泉中學創建于1993年,是沈陽市一所歷史悠久的民辦中學,也是沈陽市升學...
QQ如何設置動態壁紙?聊q主菜單設置頁背景步驟::1、再點手機桌面圖標正常啟動軟件啊客服端。2、點擊上主菜單上的個人空間頭像,在直接出現的下拉菜單中再點“個性造型”。3、從自己的相冊中本地上傳動態百度圖片。4、再點“從我的相冊選擇背景設置”選項。5、在相冊文件夾中可以找到你要本地上傳的原圖并再點。6、用大拇指和食指在頻幕上劃動,移動手機和縮放比例圖片到理想什么狀態,最后直接點擊“能夠完成”,隨機打...