私はtcpdumpにかなり慣れていません。非常に簡単なタスクを除いて、これを使用したことはありません。
最近、私は次の仕事を完了するように頼まれました。
私が持っているもの:スイッチに接続されたネットワークインターフェイスを備えたサーバー。そのスイッチ上のすべてのトラフィックは、このサーバーにミラーリングされます。必要なもの:これらすべてのトラフィックをPCAP形式のファイルに保存します。ファイルには
トラフィックは日中〜100MByte/sであり、私の仕事ではパケット損失は許容できません(24時間は継続的でなければなりません)。
とにかく、上記のように、私はすべてを必要としません。
質問:
ありがとうございました。
私の最善の策は次のようなものを使用することです:
tcpdump -ieth0 -s96 -w traffic.dump 'ip or icmp or tcp or udp'
「トリッキー」な部分は、「-s」(snaplen)パラメータに正しい値を選択することです(snaplenは、tcpdumpがキャプチャするパケットの最大長です)。
Tcpdumpのmanページから:
デフォルトの68(NITでは最小は実際には96)ではなく、各パケットのデータのsnaplenバイトをスナーフします。 68バイトはIP、ICMP、TCPおよびUDPには十分ですが、ネームサーバーおよびNFSパケットからプロトコル情報を切り捨てる可能性があります(下記参照)。制限されたスナップショットのために切り捨てられたパケットは、 `` [| proto] ''、ここでprotoは切り捨てが発生したプロトコルレベルの名前です。スナップショットを大きくすると、パケットの処理にかかる時間が長くなり、パケットの量が効果的に減少することに注意してくださいバッファリング。これにより、パケットが失われる可能性があります。snaplenを、関心のあるプロトコル情報をキャプチャする最小数に制限する必要があります。
この例では、「ほぼ」96を使用して、ethernet + ip +(icmp || udp || tcp)ヘッダー値を100%キャプチャすることを確認しています。
トラフィックにIPまたはTCPオプション(タイムスタンプ))があり、この情報もキャプチャしたい場合は、snaplenパラメーター(つまり、増加/減少)を使用する必要があります。
パケットのヘッダーの長さがsnaplenより短い場合は、ペイロードの一部をキャプチャすることもできます。
最後に、キャプチャされたトラフィックを読み取るには、次のようなものを使用します。
tcpdump -e -nn -vv -r traffic.dump
importantの部分は、「-e」オプションを使用してイーサネットヘッダーを印刷できるようにする場所です。
これ ページは、さまざまな状況でのイーサネット/ tcp/udpヘッダーのサイズについてのアイデアを提供し、snaplenパラメータの「正しい」値に到達するのに役立つ場合があります。