首页/杀毒教程/内容

PcShare2005的HTTP隧道的弊端

杀毒教程2024-02-27 阅读()
[摘要]INTERNET_FLAG_RELOAD)) { StopWork(); return FALSE; }INTERNET_BUFFERS BufferIn = {0}; ...

   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建立的通信管道不能交叉接收和发送数据, 所以用两个, 一个负责接收, 一个负责发送





第1页  第2页  第3页  第4页  第5页 

……

相关阅读