2012-01-24 9 views
3

Linuxマシン上のすべてのネットワークインターフェイスからパケットをキャプチャする必要があります。 私はこれを行うために、pcap_open_live() APIを使用し、デバイスの引数として "any"を渡す予定です。libpcap - すべてのインターフェイスからパケットをキャプチャします

Iは、ポートの異なるタイプがありますイーサネットポート(例えばeth0)とGREトンネル(tun0言う) インターフェイスの異なるタイプから来るは異なるヘッダフォーマット持つパケット:イーサネットポートが有する

  1. パケットからのトンネルからMACヘッダ
  2. パケットは、私はパケットヘッダのpcap_loop()コールバックハンドラどのタイプに確認することができますどのようにLinuxの「調理」のキャプチャカプセル化(16バイト)ヘッダ

に来て私は?

答えて

6

受信したすべてのパケットは、同じ種類のパケットヘッダーを取得します。それはpcap_tでpcap_datalink()と呼ぶときに得られるタイプです。 pcap_datalink()が返す値は、DLT_の値で、tcpdump.orgサイトのLink-Layer Header Typesページに示されています。

あなたがanyデバイスを開いた場合は、pcap_datalink()あなたがキャプチャALLパケットは「調理」のキャプチャヘッダーがありますことを意味し、DLT_LINUX_SLLを返します - eth0からも、ものを!これらのパケットのイーサネットヘッダーを取得するには、anyではなく、eth0にキャプチャする必要があります。

関連する問題