18,356
社区成员
发帖
与我相关
我的任务
分享
int WINAPI hook_send(SOCKET s, const char FAR *buf, int len, int flags)
{
// 申请指定长度的共享内存空间
CShareMemory sm("IPPACK_SEND", sizeof(CMessageData) + len, TRUE);
// 取得指向共享内存的指针
CMessageData *pData = (CMessageData*)sm.GetBuffer();
// 设置参数
pData->dwThreadId = ::GetCurrentThreadId();
pData->socket = s;
pData->nDataLength = len;
memcpy(pData->data(), buf, pData->nDataLength);
//根据条件在这里拦截
// 调用原来的函数,发送数据
g_send.Unhook();
int nRet = ::send(pData->socket, pData->data(), pData->nDataLength, flags);
g_send.Rehook();
return nRet;
}
int WINAPI hook_recv(SOCKET s, char FAR *buf, int len, int flags)
{
CShareMemory sm("IPPACK_RECEIVE", sizeof(CMessageData) + len, TRUE);
CMessageData *pData = (CMessageData*)sm.GetBuffer();
//在这里修改接收的网络数据包
// 调用原来的函数,接受数据,设置参数
g_recv.Unhook();
int nRet = ::recv(s, pData->data(), len, flags);
g_recv.Rehook();
pData->dwThreadId = ::GetCurrentThreadId();
pData->socket = s;
pData->nDataLength = nRet;
//
// 返回数据
memcpy(buf, pData->data(), pData->nDataLength);
return nRet;
}