使用Libpcap过滤源端口和目的端口
我正在使用 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 N
;src port N
、dst port N
和port N
会检查TCP、UDP和SCTP的端口。tcp port N
、tcp src port N
和tcp 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)"
看看这样是否有帮助。