我使用pylibpcap
here提供的示例代码,该代码用作:sniff.py <interface> <expr>
。 <expr>
似乎使用与tcpdump
相同的语法,但我无法同时对源端口5000和目标端口5000进行过滤。
使用tcpdump就像tcpdump -i eth1 -n tcp port 5000
。
使用sniff.py我尝试了sniff.py eth1 "src port 5000 and dst port 5000"
之类的内容,但它不起作用。
有什么想法吗?
答案 0 :(得分:1)
libpcap(或Windows上的WinPcap;它是Windows的libpcap的一个端口)是处理有问题的过滤器语法的库; tcpdump使用libpcap,而pylibpcap是libpap的包装器,所以它们都使用相同的过滤器语法。
在当前版本的libpcap中,过滤器的语法记录在the pcap-filter man page中。在该语法中,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)"
看看是否有帮助。