HTTP代理穿透原理
HTTP代理穿透原理
HTTP代理服務器中能夠提供一種HTTP CONNECT代理服務,能夠允許用戶建立TCP連接到任何端口。通過CONNECT方法穿透代理的實現方法爲:
CONNECT代理服務器的代理端口(如:8080);如果成功返回就可以按照正常的Socket進行通訊。當然在此之前需要先獲得代理相關的信息。
如何獲取HTTP代理相關信息
程序中是通過讀取註冊表來獲取計算機HTTP代理相關信息的,在註冊表的\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings鍵值下就保存着HTTP代理服務器及端口等信息,
根據該鍵值下的ProxyEnable值可以判斷是否有HTTP代理,沒有代理的情況下ProxyEnable值爲0。
當然一般情況下程序去中訪問該鍵值可能是受限的,所有就需要獲取到訪問令牌不受限制的UserSid,使用該UserSid去讀取HTTP代理信息。
通過HTTP代理代碼片段
網絡上摘一點代碼,原理大概上能實現了的
memset(buff,0,sizeof(buff));
sprintf(buff,"CONNECT %s:%d HTTP/1.1\r\nAccept: */*\r\nContent-Type: text/html\r\nProxy-Connection: Keep-Alive\r\nContent-length: 0\r\n\r\n",lpszHost,nPort);
send(m_Socket,buff,strlen(buff),0);
........
memset(buff,0,sizeof(buff));
recv(m_Socket, buff, sizeof(buff), 0);
if(strstr(buff,"200 Connection")!=NULL)
return true;//連接成功
此外,如果是GET/POST代理你也可以模擬發post和get包,這個沒什麼說的,熟悉http協議就可以遊刃有餘的去編程了!主要是需要用大白鯊或其他http截包工具去分析調試。但是,對於客戶服務端程序這樣就需要額外添加一箇中間跳板空間來中轉數據。這本身又是很影響速度的。而post每次傳輸的數據還是有點經不起用。
HTTP代理服務器中能夠提供一種HTTP CONNECT代理服務,能夠允許用戶建立TCP連接到任何端口。通過CONNECT方法穿透代理的實現方法爲:
CONNECT代理服務器的代理端口(如:8080);如果成功返回就可以按照正常的Socket進行通訊。當然在此之前需要先獲得代理相關的信息。
如何獲取HTTP代理相關信息
程序中是通過讀取註冊表來獲取計算機HTTP代理相關信息的,在註冊表的\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings鍵值下就保存着HTTP代理服務器及端口等信息,
根據該鍵值下的ProxyEnable值可以判斷是否有HTTP代理,沒有代理的情況下ProxyEnable值爲0。
當然一般情況下程序去中訪問該鍵值可能是受限的,所有就需要獲取到訪問令牌不受限制的UserSid,使用該UserSid去讀取HTTP代理信息。
通過HTTP代理代碼片段
網絡上摘一點代碼,原理大概上能實現了的
memset(buff,0,sizeof(buff));
sprintf(buff,"CONNECT %s:%d HTTP/1.1\r\nAccept: */*\r\nContent-Type: text/html\r\nProxy-Connection: Keep-Alive\r\nContent-length: 0\r\n\r\n",lpszHost,nPort);
send(m_Socket,buff,strlen(buff),0);
........
memset(buff,0,sizeof(buff));
recv(m_Socket, buff, sizeof(buff), 0);
if(strstr(buff,"200 Connection")!=NULL)
return true;//連接成功
此外,如果是GET/POST代理你也可以模擬發post和get包,這個沒什麼說的,熟悉http協議就可以遊刃有餘的去編程了!主要是需要用大白鯊或其他http截包工具去分析調試。但是,對於客戶服務端程序這樣就需要額外添加一箇中間跳板空間來中轉數據。這本身又是很影響速度的。而post每次傳輸的數據還是有點經不起用。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.