PcShare2005的HTTP隧道的弊端
發表時間:2023-06-02 來源:明輝站整理相關軟件相關文章人氣:
[摘要]它的HTTP隧道是通過wininet API實現的 看看這段代碼:重點用紅色標記 if(!m_PipeRecv.ConnectHttpServer( m_ServerAddr, m...
它的HTTP隧道是通過wininet API實現的
看看這段代碼:重點用紅色標記
if(!m_PipeRecv.ConnectHttpServer(
m_ServerAddr, m_ServerPort, nRecv,
INTERNET_FLAG_PRAGMA_NOCACHE
INTERNET_FLAG_NO_CACHE_WRITE
INTERNET_FLAG_RELOAD))
{
StopWork();
return FALSE;
}
if(!HttpSendRequest(m_PipeRecv.hHttpFp , NULL , 0 , NULL, 0))
{
StopWork();
return FALSE;
}
if(!m_PipeSend.ConnectHttpServer(
m_ServerAddr, m_ServerPort, nSend,
INTERNET_FLAG_PRAGMA_NOCACHE
INTERNET_FLAG_NO_CACHE_WRITE
INTERNET_FLAG_RELOAD))
{
StopWork();
return FALSE;
}
INTERNET_BUFFERS BufferIn = {0};
BufferIn.dwStructSize = sizeof( INTERNET_BUFFERS );
BufferIn.dwBufferTotal = 1024 * 1024 * 1024 + 973741824;
if(!HttpSendRequestEx(m_PipeSend.hHttpFp,
&BufferIn,NULL,HSR_INITIATE,0))
{
StopWork();
return FALSE;
}
return TRUE;
/////////////////////////////////////////////////////////////////////////////////////////////////////////
HttpSendRequest(m_PipeRecv.hHttpFp , NULL , 0 , NULL, 0))
有個這些都是POST方式建立的連接, 所以這里POST一個0字節, 因為這個m_PipeRecv是用來接收數據的, 不需要發送數據, 但是他能接收多少數據則由Pcshare里的HTTP響應頭Content-Length的數值決定, 一但大于這個數值, 通信就會斷開
HttpSendRequestEx里的HSR_INITIATE表示POST的數據, 用InternetWriteFile來發送, 這是POST大數據的方法, 前面有看到這句“BufferIn.dwBufferTotal = 1024 * 1024 * 1024 + 973741824;”, 這定義這個POST的數據大小, 這時候弊端就出來了, 如果我們遠程監控的服務端發送的數據量大于了這個數值BufferIn.dwBufferTotal, 這個連接就會斷開……
這時候我們發現, Content-Length和BufferIn.dwBufferTotal 都是32位的, 也就是只能傳輸4GB數據……, 超過了, 連接就會斷開……, 而PcShare2005里對這兩個數值的設置似乎還都不是最大的,當然了一般情況下, 我們不會用掉這么多的數據量
新版的PcShare應該是用socket模擬的HTTP協議, 拋棄了wininet API的方法吧.。 新版的也沒有強調是雙管道通信, 雙管道其實是迫不得已的設計, wininet建立的通信管道不能交叉接收和發送數據, 所以用兩個, 一個負責接收, 一個負責發送
上面是電腦上網安全的一些基礎常識,學習了安全知識,幾乎可以讓你免費電腦中毒的煩擾。