【问题标题】:identifying icmpv6 type识别icmpv6类型
【发布时间】:2012-09-24 17:07:14
【问题描述】:

在 python-scapy 中,我如何根据 icmpv6 类型进行过滤。比如icmpv6类型是135(neighbor solicitation),如何使用这种类型的表达式进行过滤:

if(x == 135):  
    do this  

我想在上面的表达式中找到 x。scapy 中有 TCP、UDP、IPv6 的标签,但没有 ICMPv6 的标签。例如,要访问数据包 p 中 IPv6 标头中的源地址参数,我可以使用 p[IPv6].src,因为标签 IPv6 存在于 scapy 中。但是如何访问 ICMPv6 参数呢?

如果使用 scapy 或此方法无法完成,请提出替代方法。这个问题困扰了我很久。谢谢。

【问题讨论】:

    标签: python networking network-programming scapy


    【解决方案1】:

    你应该使用Packet.haslayer('ICMPv6ND_NS')...

    >>> from scapy.all import rdpcap
    >>> paks = rdpcap('ipv6.pcap')
    >>> for idx, pak in enumerate(paks):
    ...     if pak.haslayer('ICMPv6ND_NS'):
    ...         print "Index %s: %s" % (idx, repr(pak))
    ...
    Index 3: <Ether  dst=00:21:a0:50:ce:00 src=00:02:55:7b:b2:f6 type=0x86dd |
    <IPv6  version=6L tc=0L fl=0L plen=32 nh=ICMPv6 hlim=255 
    src=fe80::202:55ff:fe7b:b2f6 dst=fe80::221:a0ff:fe50:ce00 |
    <ICMPv6ND_NS  type=Neighbor Solicitation code=0 cksum=0x8b54 R=0L S=0L 
    O=0L res=0x0L tgt=fe80::221:a0ff:fe50:ce00 |<ICMPv6NDOptSrcLLAddr  type=1 
    len=1 lladdr=00:02:55:7b:b2:f6 |>>>>
    >>>
    

    仅供参考,这些是 ipv6.pcap 中的数据包...

    [mpenning@Bucksnort ~]$ tshark -r ipv6.pcap
      1   0.000000 2000:fc50:1000:100:202:55ff:fe7b:b2f6 -> 2001:420:1101:1::a ICMPv6 Echo request
      2   1.007475 2000:fc50:1000:100:202:55ff:fe7b:b2f6 -> 2001:420:1101:1::a ICMPv6 Echo request
      3   2.014461 2000:fc50:1000:100:202:55ff:fe7b:b2f6 -> 2001:420:1101:1::a ICMPv6 Echo request
      4   4.997348 fe80::202:55ff:fe7b:b2f6 -> fe80::221:a0ff:fe50:ce00 ICMPv6 Neighbor solicitation
      5   4.998613 fe80::221:a0ff:fe50:ce00 -> fe80::202:55ff:fe7b:b2f6 ICMPv6 Neighbor advertisement
    [mpenning@Bucksnort ~]$
    

    【讨论】:

      猜你喜欢
      • 2017-06-19
      • 2016-10-18
      • 2016-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-02
      • 2015-10-23
      • 1970-01-01
      相关资源
      最近更新 更多