PCAPライブキャプチャ用の最適なSnaplen
質問
使用するとき pcap_open_live
インターフェイスから嗅ぐために、私はさまざまな数字を使用して多くの例を見てきました SNAPLEN
価値、範囲 BUFSIZ
(<stdio.h>
)「マジックナンバー」へ。
キャプチャしているインターフェイスのMTUをSnaplenとして設定する方が理にかなっていませんか?このようにして、PCAPバッファーに一度に多くのパケットを取り付けることができます。 MRUがMTUに等しいと仮定するのは安全ですか?
それ以外の場合は、Snaplen値を設定する非エキゾチックな方法はありますか?
ありがとう
解決
MTUは最大です ペイロード リンクレイヤーに渡すことができるサイズ。リンク層ヘッダーは含まれていないため、たとえば、イーサネットでは1514または1518ではなく1500になり、フルサイズのイーサネットパケットをキャプチャするほど大きくはありません。
さらに、802.11無線情報のRadioTapヘッダーなどのメタデータヘッダーは含まれていません。
また、アダプターが断片化/セグメンテーション/再組み立てのオフロードを任意の形態にしている場合、アダプターに手渡されるか、アダプターから受信したパケットがまだ断片化またはセグメント化されていないか、再組み立てされている可能性があり、そのため、 多くの MTUよりも大きい。
PCAPバッファーでより多くのパケットを取り付けることに関して、それはメモリマップされたTPACKET_V1およびTPACKET_V2にのみ適用され、LinuxのTPACKET_V2キャプチャメカニズムは固定サイズのパケットスロットを備えています。他のキャプチャメカニズムは、パケットごとに最大サイズのスロットを予約していないため、より短いスナップショットの長さは重要ではありません。 TPACKET_V1とTPACKET_V2の場合、スナップショットの長さが小さくなると違いが生じる可能性がありますが、少なくともイーサネットでは、LIBPCAP 1.2.1の試行では、イーサネットの適切なバッファスロットサイズを選択することができます。 (TPACKET_V3は、パケットごとの固定サイズのスロットを持っているようには見えません。その場合、この問題はありませんが、最近公式にリリースされたカーネルにのみ表示され、LibPCAPにはまだサポートがありません。)