パケット長によるTCPDUMPのフィルタリング

パケット長によるTCPDUMPのフィルタリング

パケット長で絞り込みたいと考えていますtcpdump。`| grep はできることはわかっていますが、この特定のパケット長を 'tcpdump' のオプションとして渡すことができるかどうか疑問に思っています。次のコマンドを使用して、ネットワーク上に存在するすべての MPEG-TS マルチキャストを表示するスクリプトを作成しようとしています。

sudo tcpdump -c 1000 -ti <network_interface> multicast | grep 1316 | sort | uniq

このコマンドは機能し、まさに私が望む出力が得られますが、tcpdumpコマンドに長さを渡すことで次のように簡略化できると考えました。

sudo tcpdump -c 1000 -ti <network_interface> multicast and length 1316 | sort | uniq

答え1

イーサネットパケットの合計サイズ

によるとpcap フィルタ(7)、次の条件を使用できます。

  • less length、 に相当len <= length

  • greater length、 に相当len >= length

  • 例に基づくと、 も使用できるはずですが、これについては文書化されていません。len == length

これにはリンク層ヘッダーとネットワーク層ヘッダー (つまり、キャプチャされたすべてのもの) が含まれることに注意してください。そのため、空の TCP ACK の IP「合計長」フィールドは 60 ですが、合計 74 バイトとして表示されます。

この StackOverflow スレッドも参照してください:https://stackoverflow.com/questions/9874093/how-to-filter-tcpdump-output-based-on-packet-length

合計 IP パケット サイズ

によるとtcpdump(1)、IPv4 ヘッダーの「合計長」フィールドにアクセスできます。

  • ip[2:2] > 576
  • ip[2:2] <= 1000
  • および類似のもの。

UDPパケットまたはペイロードの合計サイズ

UDPには長さフィールドはありませんが、ヘッダーサイズは常に8であり、いつものIPv4ヘッダーサイズは常に20であると仮定します(IPv4オプションはとてもまれですが、IGMP では使用されます。

したがって、1316バイトのUDPデータグラムをフィルタリングしようとする場合、

  • IP.合計長 = IP.ヘッダー[20] + UDP.ヘッダー[8] + UDP.ペイロード[1316]

フィルターを取得しますip[2:2] == 1344

関連情報