Scapy中的IPv6过滤器

时间:2017-07-03 10:26:05

标签: python scapy tcpdump

我正在使用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:过滤解析错误

2 个答案:

答案 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