1

ICMP Echo Reply パケットの末尾に 8 バイトのタイムスタンプを追加する特定のネットワーク カード (NetFPGA) があります (チェックサムは無視されます)。この方法で raw ソケットでパケットを読み取ろうとしたとき:

recvsock = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP);

タイムスタンプが追加されていない IP + ICMP データのみを取得しました。私は試した:

recvsock = socket(AF_PACKET, SOCK_RAW, htons(ETH_P_IP));

このようにしてすべてを取得し、アドレスをバインドできません。また試しました:

recvsock = socket(AF_INET, SOCK_RAW, htons(ETH_P_IP));

でも何も釣れなかった..

特定のICMPエコー応答パケットのみをキャッチするが、追加された8バイトのタイムスタンプを省略しない生のソケットを開く方法はありますか?

ありがとう
イド

4

1 に答える 1

0

私が見つけたものから、未加工のソケットで完全なパケットをキャッチし、ソケットにフィルタリングを行わせる方法はないようです。私がしなければならなかったのは、この方法でソケットを開くことです:

recvsock = socket(AF_PACKET, SOCK_RAW, htons(ETH_P_IP));

すべての着信 IP パケットをキャッチし、libpcap フィルタリング機能に基づいて ICMP パケットをフィルタリングします。

于 2013-10-28T13:03:18.763 に答える