pcap ファイルからパケットを読み取るために C++ で libpcap を使用しています。
rc = pcap_next_ex((pcap_t*)handle, &header, (const unsigned char**)packet);
パケット ヘッダーを (ペイロードなしで) 解析したいと思います。
たとえば、送信元と送信先の IP アドレスを抽出するために、特定のパケットを解析するにはどうすればよいでしょうか?
ありがとう
libpcap のコード サンプルを確認してください http://www.tcpdump.org/pcap.html
関数には、パケットの先頭をgot_packet(u_char *args, const struct pcap_pkthdr *header, const u_char *packet);
指すポインターがあります。*packet
イーサネットヘッダーを解析するには、対応するポインターを使用するだけです
ethernet = (struct sniff_ethernet*)(packet);
IP層用
ip = (struct sniff_ip*)(packet + SIZE_ETHERNET);
他のプロトコルを解析したい場合は、独自の構造を定義するだけです。ペイロードを解析したい (または解析したくない) 場合は、ペイロードの先頭へのポインターを定義できます (または定義しません)。
IP ヘッダーのデータ フィールドはビッグ エンディアンの順序でパックされ、パケット ペイロードは IP ヘッダーの直後に追加されます。ここで例を見てください