電腦網路與 Internet 通訊

L09 本機 CONNECT、SOCKS5 與解析責任

本實驗使用的程式:L09-proxy.py。文中指令以課程根目錄為工作目錄;建議下載教材套件,解壓後在 computer-networking 目錄執行。

目標與預測

對應 17、22。Python 3.10 以上,標準函式庫。使用真實本機 TCP 與 HTTP,僅轉送由程式建立的 127.0.0.1 服務。lesson.test 是代理內靜態別名,不進行外部 DNS。協定子集:HTTP/1.1 CONNECT、SOCKS5 無驗證 CONNECT 之 IPv4/域名;不含 BIND、UDP ASSOCIATE、IPv6、TLS 和一般目的地。

預測三種模式源站看到誰的來源埠?名稱模式是否由客戶端送出 IP?

執行與觀察

python3 labs/L09-proxy.py

依序取得 HTTP CONNECT 域名、SOCKS 域名、SOCKS IP 三次源站 HTTP 200。CONNECT 另有代理的 200 Connection Established;SOCKS 成功則是 REP=0x00,不是 HTTP 狀態碼。每筆結果記 client_source 與 origin_peer;proxy_events 記 proxy_client_peer、proxy_origin_source 與 resolution。

模式客戶送出的目的解析責任(本實驗)要比對的端點
CONNECT 域名lesson.test:portP 查靜態別名表C source 與 P client peer;S peer 與 P origin source
SOCKS 域名ATYP3+lesson.testP 查靜態別名表同上
SOCKS IPATYP1+127.0.0.1已提供 IP同上

實際埠每次變動。若兩組端點各自相符,支持兩段 TCP 的模型;這不是完整 TCP 握手擷取。程式將目的範圍鎖在本機單一服務;不是可部署的公開代理。

變更、問題與提交

手畫「本地 DNS 先解析後送 IP」與「傳域名至 P」兩圖。真實 DNS 解析不在此實驗內,不能聲稱程式量測了 DNS 速度或洩漏。選做新增一個應被拒絕的請求,記錄回覆並確認沒有新增上游事件;保留原目的限制。SOCKS 不支援命令回 REP=0x07,不支援 ATYP 回 0x08,目的政策拒絕回 0x02。

  1. HTTP CONNECT 回 200 後,代理轉送的是哪些 bytes?
  2. 為何 origin_peer 不是 client_source?
  3. 加入內層 HTTPS 後,哪些證據仍需新增?
  4. SOCKS CONNECT 成功是否證明 UDP ASSOCIATE 也支援?

提交三次輸出、兩圖與限制;評分預測 20、端點證據 30、解析責任 30、限制 20。標準答案見解答冊。