通過HTTP協(xié)議與代理服務器建立連接,協(xié)議信令中包含要連接到的遠程主機的IP和端口號,如果有需要身份驗證的話還需要加上授權(quán)信息,服務器收到信令后首先進行身份驗證,通過后便與遠程主機建立連接,連接成功之后會返回給客戶端200,表示驗證通過,就這么簡單,下面是具體的信令格式:
CONNECT 124.xxx.xxx.xx:443 HTTP/1.1 //建立http隧道要443端口
Proxy-Connection: Keep-Alive?? //客戶端到服務器端的連接持續(xù)有效
Content-Length: 0
Host: 124.xxx.xxx.xx?? //主機地址
Proxy-Authorization:Basic YTph //身份驗證信息
User-Agent: OpenFetion //可以標識請求者的信息,如什么瀏覽器類型和版本、操作系統(tǒng)、使用語言等信息
???? 其中Proxy-Authorization是身份驗證信息,Basic后面的字符串是用戶名和密碼組合后進行base64編碼的結(jié)果,也就是對username:password進行base64編碼。
??? 其實編碼對安全性沒什么意義,base64嚴格意義上都已經(jīng)不能算是加密了,現(xiàn)在信息安全這么受重視的年代,不需要密鑰的加密算法還是叫編碼更貼切一些,抓到這種包之后瞬間就可以得到用戶名和密碼。
HTTP/1.0 200 Connection established
??? 客戶端收到收面的信令后表示成功建立連接,接下來要發(fā)送給遠程主機的數(shù)據(jù)就可以發(fā)送給代理服務器了,代理服務器建立連接后會在根據(jù)IP地址和端口號對應的連接放入緩存,收到信令后再根據(jù)IP地址和端口號從緩存中找到對應的連接,將數(shù)據(jù)通過該連接轉(zhuǎn)發(fā)出去。