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
イーサネットパケットの合計サイズ
pcap-filter(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ヘッダーの「TotalLength」フィールドにアクセスできます。
ip[2:2] > 576
ip[2:2] <= 1000
UDPパケットまたはペイロードの合計サイズ
UDPには長さフィールドはありませんが、ヘッダーサイズは常に8であり、通常はIPv4ヘッダーサイズが常に20であると想定できます(IPv4オプションは非常にまれですが、IGMPで使用されます)。
したがって、1316バイトのUDPデータグラムをフィルタリングしようとしている場合は、
フィルタip[2:2] == 1344
を取得します。