2012-04-11 39 views
4

UDPパケットをファイルに保存する必要があり、利用可能なさまざまなツール(wireshark、tcpdump、...)を再利用するためにpcapフォーマットを使用したいと考えています。 this threadにいくつかの情報がありますが、グローバルファイルヘッダー 'struct pcap_file_header'の書き込み方法が見つかりません。pcapファイルを作成する

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()を使ってヘッダを挿入するためにファイルディスクリプタを取得できますか?

答えて

3

このヘッダを書く必要はありません。pcap_open_deadはそれを行う必要があります。 pcap_dumpと友人の代わりに直接ファイルを書きたい場合は、そのヘッダを自分で書き込んで書き込む必要があります。簡単なプログラムの例であるhereは、これらの関数でpcapファイルを書き出します。


直接ファイルの書き込みに関するオリジナルの答え、:

私はこの作品正確にどのように覚えていないことができますが、私は、あなたをPCAPファイルを書き出すだろうとしばらく前redirにパッチを書きましたそれを例として使用することができます。

this debian bugに添付されています。 (固定バグのリンク。)

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

+0

ありがとうございますが、通常のファイルwrite()呼び出しを使用してすべてを行ったようです。私はpcap_dump()を使用していますが、ファイルディスクリプタを取得する場所を特定できません。 –

+0

@RobertKubrick上記の更新。私は 'pcap_dump'でもIPヘッダを偽装する必要があるので元の答えは残しました。上にリンクされているパッチがそれを助けるかもしれません。 – je4d

+0

本当に、グローバルファイルヘッダーを書き込む必要はありません。確認しました。 –

関連する問題