用C#成功的HOOK了Sock的recv函数。如何获取数据包对应IP地址和端口?
用网上的HOOKAPI扩展后成功,如何获取数据包IP地址?
部份代码如下。HOOKAPI可在网上找。
int recvProc(int s2, IntPtr buf2, int len2, int flag2)
{
int ret = 0;
recv_Hook.Suspend(); //暂停拦截,转交系统调用
ret = recv(s2, buf2, len2, flag2); //接收数据,此处可进行拦截,//第二个参数为IntPtr类型。byt[]不行
recv_Hook.Continue(); //恢复HOOK 一定要先recv,恢复Hook后再进行缓冲区数据读取。
if (ret == -1) //SOCKET_ERROR
return ret;
byte[] buffer2 = new byte[len2];
Marshal.Copy(buf2, buffer2, 0, len2); //读缓冲区封包数据
CommValues.RecvQue.Enqueue(buffer2);//封包入队列,等处理。异步操作有更好的方法吗?
return ret;
}
这一步成功了。没有任何问题,也没有读不完数据的问题。但我想根据IP地址和端口来确定要不要入队。
我的思路是:
参数:int S2 获得的应是Sock的句柄 或者说文件描述符
再根据S2获得Sock的信息或实例。但C#水平有限,无法成功。
如何根据以上Hook的recv函数,得到对应数据包的源IP、源端口等信息。第一次上CSDN。分有点少。
有达人能帮忙解决一下吗。万分感谢。