3

recvWs2_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興味深い点は、渡された(type )にもかかわらず、情報がないことですSOCKET

4

1 に答える 1

0

私は解決策を見つけました...私はただ失敗しました。正しいコードは次のとおりです。

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

できます。

于 2013-05-08T22:07:41.783 に答える