首页 文章

如何使用scapy sniff-function过滤ICMPv6数据包?

提问于
浏览
1

我想只捕获ICMPv6 Echo Request数据包 . 我使用scapy sniff() - 使用BPF过滤器的函数,与tcpdump相同 . 我使用的过滤器与tcpdump一起工作,只捕获ICMPv6回应请求,但是当我在我的python脚本中使用它时,它根本不工作,scapy捕获所有数据包 . 为什么过滤器在我的脚本中不起作用?

#!/usr/bin/env python
from scapy.all import * 
a = sniff(filter="icmp6 && ip6[40] == 128", count=10)
a.summary()

输出:

Ether / IP / ICMP 192.168.1.74 > 192.168.1.84 echo-request 0 / Raw
Ether / IP / ICMP 192.168.1.84 > 192.168.1.74 echo-reply 0 / Raw
Ether / IPv6 / ICMPv6 Echo Request (id: 0x306 seq: 0x3bb)
Ether / IPv6 / ICMPv6 Echo Request (id: 0x306 seq: 0x3bb)
Ether / IPv6 / ICMPv6 Echo Reply (id: 0x306 seq: 0x3bb)
Ether / IPv6 / ICMPv6 Echo Reply (id: 0x306 seq: 0x3bb)
Ether / IP / TCP 192.168.1.84:ssh > 192.168.1.74:61336 PA / Raw
Ether / IP / TCP 192.168.1.74:61336 > 192.168.1.84:ssh A
Ether / IP / ICMP 192.168.1.74 > 192.168.1.84 echo-request 0 / Raw
Ether / IP / ICMP 192.168.1.84 > 192.168.1.74 echo-reply 0 / Raw

2 回答

  • 1

    我有一些问题要在我的系统上运行,但结果是我的一个接口上的错误v6设置 . scapy-python3确实似乎更好地处理了这个问题,它只是忽略了我的配置错误并继续执行而不是错误输出 .

    在我解决了你的代码示例在python 2.7和3.x上运行时没有任何问题 . 当我手动指定界面和不指定界面时 .

    Ether / IPv6 / ICMPv6 Echo Request (id: 0x5d24 seq: 0x190)
    Ether / IPv6 / ICMPv6 Echo Request (id: 0x5d24 seq: 0x191)
    Ether / IPv6 / ICMPv6 Echo Request (id: 0x5d24 seq: 0x192)
    Ether / IPv6 / ICMPv6 Echo Request (id: 0x5d24 seq: 0x193)
    Ether / IPv6 / ICMPv6 Echo Request (id: 0x5d24 seq: 0x194)
    Ether / IPv6 / ICMPv6 Echo Request (id: 0x5d24 seq: 0x195)
    Ether / IPv6 / ICMPv6 Echo Request (id: 0x5d24 seq: 0x196)
    Ether / IPv6 / ICMPv6 Echo Request (id: 0x5d24 seq: 0x197)
    Ether / IPv6 / ICMPv6 Echo Request (id: 0x5d24 seq: 0x198)
    Ether / IPv6 / ICMPv6 Echo Request (id: 0x5d24 seq: 0x199)
    

    如果您有可能在python 3.x中测试它,它可能对您更好,但感觉您的设置中的某些内容已关闭 . 我从来没有使用过scapy所以我不知道是否例如6to4隧道会让它混淆 .

    我在跑:

    Debian testing with kernel 4.11.0-1-amd64
    scapy 2.3.3 on Python 2.7.13
    scapy-python3 0.21 on Python 3.5.4
    
  • 0

    您应该指定接口 . 在某些情况下(包括在PPP接口上或同时嗅探多个接口时),Scapy有时无法应用BPF过滤器 .

    另一种选择可能是使用Python过滤器而不是BPF过滤器 . 主要缺点是它会影响性能,因为Scapy将接收(并解析)接口上看到的所有数据包:

    from scapy.all import * 
    a = sniff(lfilter=lambda pkt: ICMPv6EchoRequest in pkt, count=10)
    a.summary()
    

相关问题