2017-07-03 79 views
0

我正在使用scapy嗅探具有特定源ip/dest ip的IPv6数据包。Scapy中的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:过滤解析错误

回答

1

我从来没有使用Scapy的,而是我在你filter1表达注意到,您有:

+`port`+ 

...但你必须:

+host_ip 

也许你需要围绕host_ip回来?

如果这不是问题,你也可以尝试使用工具,如tcpdump,例如,tcpdump -d ${filter1}dumpcap,例如,dumpcap -d ${filter1}试图在Scapy的使用它们之前验证捕获过滤器。

+0

反引号被用于端口蟒蛇不允许串联地干扰(端口作为一个整数)与字符串,而主机的IP是一个字符串 –

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

+0

谢谢马丁 –