我希望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 将具有一个 60 的 IP“总长度”字段,但将被视为总共 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[2:2] == 1344
。