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:port | P 查靜態別名表 | C source 與 P client peer;S peer 與 P origin source |
| SOCKS 域名 | ATYP3+lesson.test | P 查靜態別名表 | 同上 |
| SOCKS IP | ATYP1+127.0.0.1 | 已提供 IP | 同上 |
實際埠每次變動。若兩組端點各自相符,支持兩段 TCP 的模型;這不是完整 TCP 握手擷取。程式將目的範圍鎖在本機單一服務;不是可部署的公開代理。
變更、問題與提交
手畫「本地 DNS 先解析後送 IP」與「傳域名至 P」兩圖。真實 DNS 解析不在此實驗內,不能聲稱程式量測了 DNS 速度或洩漏。選做新增一個應被拒絕的請求,記錄回覆並確認沒有新增上游事件;保留原目的限制。SOCKS 不支援命令回 REP=0x07,不支援 ATYP 回 0x08,目的政策拒絕回 0x02。
- HTTP CONNECT 回 200 後,代理轉送的是哪些 bytes?
- 為何 origin_peer 不是 client_source?
- 加入內層 HTTPS 後,哪些證據仍需新增?
- SOCKS CONNECT 成功是否證明 UDP ASSOCIATE 也支援?
提交三次輸出、兩圖與限制;評分預測 20、端點證據 30、解析責任 30、限制 20。標準答案見解答冊。