3

recv在 Ws2_32.dll 的 -function 上安装了一个钩子。现在,当recv被调用时,我想获取有关谁发送信息的信息。所以我尝试了以下方法来获取发件人的远程地址,但我得到的地址总是错误的,对于互联网来说非常不现实(例如我得到 2.0.0.80)。

我究竟做错了什么?

int __stdcall TcpHook::my_recv(SOCKET s, char *buf, int len, int flags)
{
    sockaddr addr;
    int len2 = sizeof(addr);
    getpeername(s, &addr, &len2);

    char *sender = inet_ntoa(*(in_addr*)&addr);
    // print out sender etc.

    return tcpHook.recvOriginal(s, buf, len, flags);
}

s有趣的一点是,尽管通过了(类型SOCKET),但我没有任何信息。

4

1 回答 1

0

我找到了解决方案......我只是失败了。正确的代码是:

inet_ntoa((*(sockaddr_in*)&addr).sin_addr);

有用。

于 2013-05-08T22:07:41.783 回答