6

UDP パケットをファイルに保存する必要があり、pcap 形式を使用して利用可能なさまざまなツール (wireshark、tcpdump など) を再利用したいと考えています。このスレッドにはいくつかの情報がありますが、グローバル ファイル ヘッダー 'struct pcap_file_header' を書き込む方法が見つかりません。

pcap_t* pd = pcap_open_dead(DLT_RAW, 65535);
pcap_dumper_t* pdumper = pcap_dump_open(pd, filename);

struct pcap_file_header file_hdr;
file_hdr.magic_number = 0xa1b2c3d4;
file_hdr.version_major = 2;
file_hdr.version_minor = 4;
file_hdr.thiszone = 0;
file_hdr.sigfigs = 0;
file_hdr.snaplen = 65535;
file_hdr.linktype = 1;

// How do I write file_hdr to m_pdumper?

while( (len = recvmsg(sd, &msg_hdr, 0)) > 0 )
  pcap_dump((u_char*)m_pdumper, &m_pcap_pkthdr, (const u_char*)&data);

グローバル ファイル ヘッダーはどのように記述すればよいですか? 特定の pcap 関数が利用できない場合、ファイル記述子を取得して write() を使用してヘッダーを挿入するにはどうすればよいですか?

4

2 に答える 2

6

そのヘッダーを記述する必要はありませpcap_open_deadん。それを行う必要があります。pcap_dumpand friendsを使用する代わりにファイルを直接書きたい場合は、そのヘッダーを自分で記入して書き込む必要があるだけです。これらの関数を使用して pcap ファイルを書き出す簡単なプログラムの例を次に示します。


ファイルを直接書き込むことに関する元の回答:

これがどのように機能するか正確には思い出せませんがredir、少し前に pcap ファイルを書き出すパッチを書きました。例として使用できるかもしれません。

この debian bugに添付されていることがわかります。(バグリンクは修正されました。)

その一部は、イーサネットおよび IP ヘッダーを偽造するためのものであり、使用している場合や、上記のリンクされたパッチがライブラリを使用せずにファイルを書き出す場合に適用できない場合がありますがpcap_dump_openpcap_dump役立つpcap場合に備えて、とにかくここに残します.

于 2012-04-11T20:57:01.730 に答える
0

UDP と TCP のみに関心がある場合は、DLT_EN10MB代わりに使用する必要がありますDLT_RAW(完全な UDP パケット キャプチャをシミュレートするには pcap_open_dead を参照)。

WireShak で編集する場合は、はるかに優れています。

于 2015-08-12T12:40:38.523 に答える