就是讓 TCP 連接通過 Http 代理。看起來是個很神秘的事。
說白了,也就很簡單了。 Http Tunnel 實際上就是 https 代理。因為 https 是加密通道,通信雙方用 SSL 加密通訊數據。這時代理在這裡是透明的,收到數據後,直接中轉。而不關心用戶到底轉的是什麼數據。
所以我們也可以利用 https 代理,以實現 TCP 通過 Http 代理。
直接說方法了。
正式通訊前,Client 連接 Http Proxy Server.,Client 向 Http Proxy Server 發送連接命令。如果連接成功,http proxy server 返回 200 狀態碼,表連連完成。這時就可以想 TCP 一樣,直接通訊了。
實例:
Client -> Http Proxy Server
CONNECT login.live.com:443 HTTP/1.0
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; IDCRL 4.100.313.1; IDCRL-cfg 4.0.5633.0; App msnmsgr.exe, 8.1.178.0, {7108E71A-9926-4FCB-BCC9-9A9D3F32E423})
Host: login.live.com
Content-Length: 0
Proxy-Connection: Keep-Alive
Pragma: no-cache
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; IDCRL 4.100.313.1; IDCRL-cfg 4.0.5633.0; App msnmsgr.exe, 8.1.178.0, {7108E71A-9926-4FCB-BCC9-9A9D3F32E423})
Host: login.live.com
Content-Length: 0
Proxy-Connection: Keep-Alive
Pragma: no-cache
Http Proxy Server -> Client
HTTP/1.0 200 Connection established
Proxy-agent: CCProxy 6.4.0
Proxy-agent: CCProxy 6.4.0
完成!
有兩點說明: 1. 要 Http Proxy server 支持 Https 代理。 2. 連接成功返回 200, 其它表示失敗。
