写了一个SPI程序,准备修改TCP数据包,也就是HTTP协议中的某些字段,当把某个字段删掉也就是消息包长度减小时,IE的表现都很正常,但是在消息包中增加某些数据后,此时消息包的长度增大了,此时进行发送,IE就会崩溃,下面是我修改TCP消息包的源代码,请各位大虾指点一下,多谢!
int WSPAPI WSPSend(
  SOCKET s,
  LPWSABUF lpBuffers,
  DWORD dwBufferCount,
  LPDWORD lpNumberOfBytesSent,
  DWORD dwFlags,
  LPWSAOVERLAPPED lpOverlapped,
  LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
  LPWSATHREADID lpThreadId,
  LPINT lpErrno
)
{
string strContent;
    WriteLog("lpBuffers->len = %d",lpBuffers->len);
    if ((NULL == lpBuffers->buf) || (lpBuffers->len < 0))
    {
        return 0;
    }
    strContent.assign(lpBuffers->buf,lpBuffers->len);
    string strHost;
    bool bResult = GetHost(strContent,strHost);
    if ((bResult) && ("xxxx" == strHost))
    {
         if (ChangeContent(strContent))
        {
        char *pchTemp = new char[3000];
        memset(pchTemp,0,3000);
        memcpy(pchTemp,strContent.c_str(),strContent.length());
        int iLenChanged = strContent.length();
            lpBuffers->len = iLenChanged;
                lpBuffers->buf = pchTemp;
        }
    } return nextproctable.lpWSPSend(s,lpBuffers,dwBufferCount,
            lpNumberOfBytesSent,dwFlags,lpOverlapped,lpCompletionRoutine,
            lpThreadId,lpErrno);

}

解决方案 »

  1.   

    那怎么样才能不让IE的buf溢出呢?我试过hook send函数,好像跟用LSP编程是一样的效果,把消息包改小就没问题,把消息包改大就会出问题
      

  2.   

    极有可能是IE的buffer溢出了。
    建议你换个函数,将int WSPAPI WSPSend()替换下试试。 
      

  3.   

    我就是替换的WSPSend啊,不是很明白why6455626兄的意思,能否指明一下?多谢!
      

  4.   

    dwBufferCount要改掉,如果你改变了长度。
      

  5.   

    dwBufferCount是缓冲区的个数,并非缓冲区的长度,如果要改,应该如何修改呢?有没有源代码参考一下?多谢!
      

  6.   

    LSP提供的接口不支持篡改数据???