web-dev-qa-db-ja.com

パケット長での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-filter(7)によると、次の条件を使用できます。

  • less lengthlen <= lengthと同等

  • greater lengthlen >= 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ヘッダーの「TotalLength」フィールドにアクセスできます。

  • ip[2:2] > 576
  • ip[2:2] <= 1000
  • および同様。

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

UDPには長さフィールドはありませんが、ヘッダーサイズは常に8であり、通常はIPv4ヘッダーサイズが常に20であると想定できます(IPv4オプションは非常にまれですが、IGMPで使用されます)。

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

  • IP.TotalLength = IP.Header [20] + UDP.Header [8] + UDP.Payload [1316]

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

3
user1686