我正在使用scapy来嗅探具有特定源ip / dest ip的IPv6数据包。
示例:
filter1 ="tcp port "+`port`+ " and ip6 host 2001::4 and tcp[tcpflags] & tcp-syn !=0 and !icmp and !arp and not host "+host_ip
a= sniff(count =1,filter=filter1,iface=eth)
这会引发异常,如下所示: scapy.error.Scapy_Exception:过滤解析错误
答案 0 :(得分:1)
我从来没有使用过scapy,但我注意到你的filter1
表达式中你有:
+`port`+
......但你有:
+host_ip
也许你需要围绕host_ip
?
如果这不是问题,您还可以尝试使用tcpdump等工具验证捕获过滤器,例如tcpdump -d ${filter1}
或dumpcap,例如{{1在尝试在scapy中使用它们之前。
答案 1 :(得分:1)
对于复杂的过滤器,scapy允许您使用python函数作为过滤器:
desiredip = "2001::4"
undesiredip = host_ip
def isMyPacket (pkt):
if IPv6 in pkt:
pktip6 = pkt[IPv6]
if pktip6.src == desiredip or pktip6.dst == desiredip:
if pktip6.src != undesiredip and pktip6.dst != undesiredip:
if TCP in pktip6:
if pktip6[TCP].flags & 0x02: #Check if it is a SYN
return True #If all conditions are met
return False
a= sniff(count =1,lfilter=isMyPacket,iface=eth)
无论如何,你不需要检查它是arp还是icmp:如果是TCP,你肯定知道它不是arp或icmp。
有关scapy中的TCP标记的更多信息:Get TCP Flags with Scapy