使用Libpcap过滤源端口和目的端口

1 投票
1 回答
1429 浏览
提问于 2025-04-18 05:14

我正在使用 pylibpcap 提供的示例代码,具体可以在 这里 找到。这个代码的用法是: sniff.py <interface> <expr>。其中的 <expr> 看起来和 tcpdump 的语法是一样的,但我无法同时过滤源端口和目标端口都是5000的流量。

如果用 tcpdump 的话,命令会像这样: tcpdump -i eth1 -n tcp port 5000

在使用 sniff.py 时,我尝试了像 sniff.py eth1 "src port 5000 and dst port 5000" 这样的命令,但它并没有成功。

有没有什么好的建议呢?

1 个回答

2

libpcap(在Windows上叫WinPcap,它是libpcap在Windows上的移植版)是一个处理过滤器语法的库;tcpdump使用libpcap,而pylibpcap是libpcap的一个封装,所以它们都使用相同的过滤器语法。

在当前版本的libpcap中,过滤器的语法可以在pcap-filter手册页中找到。在这个语法中,port N相当于src port N or dst port Nsrc port Ndst port Nport N会检查TCP、UDP和SCTP的端口。tcp port Ntcp src port Ntcp dst port N只检查TCP端口。

试着在tcpdump和你的程序中都使用port 5000。如果它们都只捕获单向的流量,那问题显然不在你的代码里。可以试试使用port 5000 or (vlan and port 5000)(在tcpdump中你需要把它用引号括起来,也就是

tcpdump -i eth1 -n "tcp port 5000 or (vlan and tcp port 5000)"

看看这样是否有帮助。

撰写回答