如何在 tcpdump 中根据协议使用复杂的过滤器?

如何在 tcpdump 中根据协议使用复杂的过滤器?

wireshark我可以通过和中的许多协议进行过滤tshark,如下所示:

sudo tshark -i <My_Interface> -Y '(ip.addr == <My_IP> and isakmp)'

如何在tcpdump这样的命令中添加协议过滤器?

sudo tcpdump -i any -nn host <My_IP>

答案1

您可以在末尾使用过滤器。这些过滤器称为 Berklee 数据包过滤器或简称 BPF。在您的示例中,您可以这样做:

tcpdump -nn -vvv -e -s 0 -X -c 100 -i eth0 host 1.2.3.4 and \(proto 17 and port 500\)

这将捕获到以下地址的流量:或者来自 1.2.3.4,使用第 3 层协议 17 (UDP)第 4 层端口 500。您还可以使用友好名称(如果它们存在于和中),/etc/protocols如下/etc/services所示:

host 1.2.3.4 and \(proto udp and port isakmp\)

您可以使用更多的 BPF 来限制诸如协议版本之类的内容,以便仅捕获 IPv6(ip6)或捕获在 TCP 数据包中设置了 SYN 标志的流量(tcp[tcpflags] == tcp-syn)。

如果你需要一个实时工具,我已经创建了https://tcpdump101.com这将允许您构建 tcpdump 语法和 BPF,以便您可以直接复制和粘贴它。希望它能帮到您。

答案2

经过一些解决方法后,我可以创建自己的过滤器:

whileIFS= read -r line; do if [[ $line =~ 'isakmp' ]]; then echo $line; fi; done < <(sudo tcpdump -i any -nn host <My_IP>)

相关内容