[英]the filter of sniff function in scapy does not work properly
似乎sniff
功能的filter
无法正常工作。
我正在使用以下过滤器执行嗅探
a=sniff(count=1,filter="tcp and host 192.168.10.55 and port 14010")
但是有时sniff
捕获到这样的UDP
数据包:
>>> a=sniff(count=1,filter="tcp and host 192.168.10.55 and port 14010")
>>> a
<Sniffed: TCP:0 UDP:1 ICMP:0 Other:0>
有时, sniff
捕获端口错误的TCP数据包:
>>> a=sniff(count=1,filter="tcp and host 192.168.10.55 and port 14010")
>>> a
<Sniffed: TCP:1 UDP:0 ICMP:0 Other:0>
>>> a[0]
<Ether dst=00:26:55:cb:3b:10 src=00:22:64:55:c8:89 type=0x800 |<IP version=4L ihl=5L tos=0x10 len=92 id=8683 flags=DF frag=0L ttl=64 proto=tcp chksum=0x9484 src=192.168.1.71 dst=192.168.1.133 options=[] |<TCP sport=ssh dport=1874 seq=350107599 ack=2484345720 dataofs=5L reserved=0L flags=PA window=254 chksum=0x846b urgptr=0 options=[] |<Raw load="yn\x01\x9d\xfca\xc9V-8\x18|\xc4\t\xf1\xc4\xd8\xd3\xc6\x95E\x19'h\xc0\x89\xf1\x08g\xa3\x9a\xa9\xf51RF\xc2\x1f\xe5a\xac\x83M\xc9\x0b\x80\x85\x1b\xcf\xb6f\xcc" |>>>>
有时, sniff
捕获到这样的ARP
数据包:
>>> a=sniff(count=1,filter="tcp and host 192.168.10.55 and port 14010")
>>> a
<Sniffed: TCP:0 UDP:0 ICMP:0 Other:1>
>>> a[0]
<Ether dst=ff:ff:ff:ff:ff:ff src=00:22:07:2c:53:97 type=0x806 |<ARP hwtype=0x1 ptype=0x800 hwlen=6 plen=4 op=who-has hwsrc=00:22:07:2c:53:97 psrc=192.168.1.178 hwdst=ff:ff:ff:ff:ff:ff pdst=192.168.1.179 |<Padding load='\x00\x07\x00\x00\x00\x00\x00\x00p\x00\x00\x00\x00\x00\x01\x14\x00\x00' |>>>
我在过滤器中遗漏了什么吗? 我如何避免这个问题?
我有相同或相似的问题-嗅探器不起作用。
安装tcpdump为我解决了这个问题。
您可以在以下站点http://biot.com/capstats/bpf.html中检查过滤器的语法。 我遇到了类似的问题,它为我工作。
您可能想参考以下问题: https : //stackoverflow.com/questions/37453283/filter-options-for-sniff-function-in-scapy# =
您也可以尝试通过运行代码之前打开所需的端口来测试程序。
我在VM上的Centos遇到了同样的问题。 我使用ip host进行过滤,而不是使用host。 在我看来,这似乎已经解决了这个问题。
错误的过滤器#
>>> packets = sniff (filter = "host 176.96.135.80", count =2, iface = "eth0", timeout =10)
>>> packets.summary()
Ether / IP / UDP 172.7.198.136:netbios_ns > 172.7.199.255:netbios_ns / NBNSQueryRequest
Ether / IP / TCP 176.96.135.80:53527 > 172.7.19.58:ssh A / Padding
固定#
>>> packets = sniff (filter = "ip host 176.96.135.80", count =2, iface = "eth0", timeout =10)
此后没有任何问题。
嗅探功能需要tcpdump才能应用“过滤器”。 如果没有tcpdump,scapy将报告警告,但不会抛出警告。 您可以启用日志记录进行检查。
import logging
import sys
logging.getLogger("scapy").setLevel(1)
logging.basicConfig(stream=sys.stdout, level=logging.INFO)
from scapy.all import *
过滤器功能存在一些已知的错误(尤其是在使用本地环回网络时!)。 建议使用lfilter(并且根据您的需要也使用stop_filter):
用法示例: lfilter=lambda p: any(proto in [14010]) for proto in [TCP]), stop_filter =lambda x: x.haslayer(TCP)
有关lfilter的更多详细信息,另请参见: https ://home.regit.org/2012/06/using-scapy-lfilter/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.