首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 實現 SOCKS5 協議通訊(四):UDP ASSOCIATE 與數據報封裝

     編輯:關於C語言

SOCKS5 UDP ASSOCIATE 建立 UDP 轉發關係後,客戶端需向服務器指定的 UDP 端口發送帶有 SOCKS5 UDP 請求頭的數據報。本文詳細說明 UDP 請求頭結構、分片機制、封裝規則及緩存要求。

UDP 請求頭結構

RSV  FRAG  ATYP  DST.ADDR  DST.PORT  DATA
2     1     1    Variable   2       Variable
  • RSV:保留,固定 0x0000。
  • FRAG:分片序號,0x00 表示獨立數據報;1~127 表示分片位置,值越大越接近尾端。
  • ATYP:地址類型(0x01=IPv4, 0x03=域名, 0x04=IPv6)。
  • DST.ADDR / DST.PORT:目標地址與端口(網絡字節序)。
  • DATA:用戶負載數據。

關鍵規則

  • 服務器不發送任何通知給客戶端,無法投遞的數據報直接丟棄。
  • 回應數據報必須加上相同 UDP 請求頭並按協商方法封裝。
  • 服務器僅接受來自協商 IP 的數據報,其他來源直接丟棄。
  • 分片重組隊列需在 5 秒內完成,超時或收到更小 FRAG 值時重置隊列。
  • 不支援分片的實現必須丟棄所有 FRAG≠0 的數據報。

緩存空間預留

SOCKS 感知 UDP 編程接口需報告可用緩存小於系統實際值:

  • ATYP=0x01:預留 10+method_dependent 字節
  • ATYP=0x03:預留 262+method_dependent 字節
  • ATYP=0x04:預留 20+method_dependent 字節
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved