Verification

在將真實流量交給免費 Proxy 之前,先驗證它

3 min read Published Updated 470 words

免費代理失敗的次數遠比成功多。公開列表會循環數以萬計的候選項目,而你的任務是找出其中目前存活、速度夠快且沒有惡意的那一小部分。五項測試,每項成本低廉,依序執行。

測試一:TCP 可達性

curl --connect-timeout 5 --proxy http://1.2.3.4:8080 \
     -s -o /dev/null -w "%{http_code}\n" \
     https://api.ipify.org

非零的結束代碼或空白回應代表該代理已失效。在任何時刻,約有 60–80% 的免費列表會無法通過此測試。請立即跳過,不要重試。

測試二:出口 IP 驗證

同一個呼叫會回傳請求所來自的公開 IP。如果該 IP 等於 1.2.3.4(代理的位址),表示代理正確轉發流量。如果等於你的本地 IP,則代理已損壞或為透明代理:它接受了連線,但實際上並未透過自身進行中繼。即使 TCP 成功,也應視為失敗。

測試三:標頭透明度

curl --proxy http://1.2.3.4:8080 https://httpbin.org/headers

回應會回顯目標端收到的標頭。請檢查是否有 X-Forwarded-ForViaForwarded 包含你的真實 IP。如果找到,表示代理處於透明或匿名模式,而非高匿模式。對於透過 CONNECT 進行的 HTTPS,這點無關緊要——目標端只會看到 TLS 握手,不會看到應用層標頭——但對於明文 HTTP,這決定了代理是否適用於你的用途。

測試四:負載下的延遲

單次測量的時間誤差較大。透過代理連續執行十次請求,並取中位數。高於兩秒則不適用於互動式操作。低於 500 毫秒則與不使用代理相當。介於兩者之間,代理適合批次爬取,但不適合瀏覽。

測試五:TLS 指紋完整性

透過代理連接到已知的 TLS 端點,並驗證憑證鏈是否與不使用代理時相同。若不匹配,表示代理正在攔截 TLS——執行中間人攻擊,你的「加密」流量實際上從代理之後就不再加密。在正確設定的 SOCKS 代理上很少發生(它們無法看到 TLS),但在配置錯誤的企業 HTTPS 代理以及偶爾出現的惡意公共節點上則會出現。openssl s_client -proxy 1.2.3.4:8080 -connect example.com:443 會印出憑證鏈。

實務工作流程

取得列表,依國家與協定進行篩選,將五項測試分散到大約 50 個並行工作者的池中,並保留通過的項目。從 100 個原始候選項目中,一次典型的執行會產生 5–15 個可用的條目。HTTP 與 HTTPS 的衰減率約為 30–60 分鐘,SOCKS 則稍長——請以該頻率排程重新整理,並將通過的集合餵入你的爬蟲或瀏覽器設定。在單一批次的生命週期內快取測試結果,並於下一批次重新測試。