ここにすべてのソースをコピーせずに、pcap_callback
から関数をヒットしていますpcap_dispatch
。はcaplen
正しい長さを示しているように見えますが (常に何かであるということです)、len は常に 0 です。このフィールドはもう入力されていませんか? これはおそらく、私がキャプチャしていないエラー状態ですか?
ここにスニペットがあります...
void myCallback ( const struct pcap_pkthdr *header, const u_char *packet, void* buffer )
{
if ( (uint16_t)(header->len) != (uint16_t)(header->caplen) )
/* Some Error */
streamObj << "Caplen (" << (uint16_t)(header->caplen) << " != "
<< ") Packet Len (" << (uint16_t)(header->len) << ")";
...
}
値はheader->len
常にゼロとして返されます。さらに情報が必要な場合は、お知らせください。
これは、2.6.32 カーネルで libpcap.so.0.9.8 を実行している SUSE Linux 11SP1 サーバーで見つかりました。この問題は、libpcap.so.0.9.3 を使用して SUSE Linux 10SP3 からアップグレードした後にのみ発生します。
編集: これは、libpcap.so.0.9.8 のみの問題のようです。/usr/lib/ のリンクを libpcap.so.0.9.3 を使用するように再指定すると、問題はなくなりました。