私はパケットを処理するユーザ空間プログラムを持っています。私はiptablesの助けを借りて彼らをそこに送ります。キャプチャされたIPパケットの同じ送信元および宛先アドレス
しかし、パケットの送信元と送信先を正しく取得するのに問題があります。宛先は192.168.1.66で、ソースは192.168.0.102である必要があります。私が書く場合でも、奇妙なことがある:
char *dstIpAddress = inet_ntoa(((struct ip*)full_packet)->ip_dst);
char *srcIpAddress = inet_ntoa(((struct ip*)full_packet)->ip_src);
私は宛先と送信元192.168.1.66の両方を取得します。
しかし、私が書く場合:
char *srcIpAddress = inet_ntoa(((struct ip*)full_packet)->ip_src);
char *dstIpAddress = inet_ntoa(((struct ip*)full_packet)->ip_dst);
私は宛先と送信元両方192.168.0.102を取得します。
問題はどこですか?
これは、 'inet_ntoa'が同じ' char'配列への両方のポインタを返すからです。結果を 'std :: string'に保存します。 –
そんなダンプミスで時間が浪費してしまった。あなたのコメントを答えとして書いてください、私はそれを正解とマークします.. – user2123079
[RTM](https://msdn.microsoft.com/en-us/library/windows/desktop/ms738564%28v=vs.85) %29.aspx)。 "返される文字列は、次のWindowsソケット関数呼び出しが同じスレッド内で行われるまで有効であることが保証されているため、別のWindowsソケット呼び出しが行われる前にデータをコピーする必要があります。 –