ここで何かが抜けている可能性が高いのですが、PCAP 仕様には、キャプチャされたパケットの送信者IPアドレスとPORTが示されていません。
PCAPファイルで誰がパケットを送信したかを知る方法はありますか?
ここで何かが抜けている可能性が高いのですが、PCAP 仕様には、キャプチャされたパケットの送信者IPアドレスとPORTが示されていません。
PCAPファイルで誰がパケットを送信したかを知る方法はありますか?
EJPが言ったことによると、パケットデータを自分で解析する必要があります。ファイル ヘッダーのフィールドの値のリストと、パケット データの先頭にあるヘッダーの対応する形式については、tcpdump.org リンク層ヘッダー タイプ ページを参照してください。network
これらのヘッダーを調べて、パケットが IP パケットかどうかを判断する必要があります。そうである場合は、IPv4 または IPv6 ヘッダーを解析する必要があります (ヘッダーが IPv4 または IPv6 パケットであることを示しているかどうか、またはヘッダーの「バージョン」フィールドが 4 か 6 かによって異なります)。 version」フィールドは、IPv4 ヘッダーと IPv6 ヘッダーの同じ場所に表示されます。 のLINKTYPE_RAW
場合、IPv4 または IPv6 ヘッダーの前にヘッダーがないため、「version」フィールドを確認してソース IP アドレスを見つける必要があります。IPv4 ヘッダーの形式については、RFC 791を参照してください。IPv6 ヘッダーの形式については、RFC 2460を参照してください。
ポート番号が必要な場合は、IPv4 ヘッダーの「プロトコル」フィールドを確認するか、IPv6 ヘッダーの「次のヘッダー」フィールドを確認して拡張ヘッダーを処理し、IP の上で実行されているプロトコルを特定する必要があります。そのフィールドの値については、 IANA Protocol Numbers レジストリを参照してください。TCP は 6 で、UDP は 17 です。プロトコルが TCP の場合、TCP ヘッダーの形式についてはRFC 793を参照してください。プロトコルが UDP の場合、UDP ヘッダーの形式についてはRFC 768を参照してください。
または、C または C++ 用のlibtraceや他の言語用の他のライブラリ (たとえば、Perl、Python、C#、および Java 用に存在する可能性があると思います) など、既存のパケット解析ライブラリを使用することもできます。上記の多くを行うことは避けてください。
(さらに言えば、pcap 形式の仕様を調べる必要はありません。libpcap/WinPcap を使用して pcap ファイルを読み取る必要があります。これは、プログラムが一部の pcap-ng ファイルも読み取ることができる可能性があることを意味します。 (十分に新しいバージョンの libpcap を使用している場合)。
パケットの発信元は、IP パケット自体にあります。したがって、PCap ヘッダーにも含める必要はありません。