我正在使用Scapy嗅探功能来跟踪本地接口上的传入流量。我想隔离并打印特定的数据包。为此,我必须匹配TCP / UDP / IP头的特定字段中的值。是否有详细的文件解释Scapy嗅探过滤器的用法?如何设置过滤器以引用某些数据包字段值?
例如,我需要只显示SYN + ACK数据包的过滤器。出于某种原因,这不符合预期:
sniff(iface="Intel(R) Ethernet Connection (4) I219-LM",
filter="ip src x.x.x.x and tcp-syn !=0 and tcp-rst !=1",
prn=lambda x: x.summary)
过滤器使用标准BPF语法编写,如https://www.wireshark.org/docs/man-pages/pcap-filter.html所述
对于您的用例(仅限SYN-ACK数据包),我认为它会是这样的:
filter = "host x.x.x.x and (tcp[tcpflags] & (tcp-syn|tcp-ack)) == (tcp-syn|tcp-ack)"
sniff(iface="Intel(R) Ethernet Connection (4) I219-LM",
filter=filter, prn=lambda x: x.summary)