Определение типа icmpv6
В Python-Scapy, как я могу фильтровать по типу icmpv6. Например, если тип icmpv6 равен 135(запрос соседа), как я могу фильтровать, используя этот тип выражения:
if(x == 135):
do this
Я хочу найти x в приведенном выше выражении. В scapy есть теги для TCP, UDP, IPv6, но нет тегов для ICMPv6. Например, чтобы получить доступ к параметру адреса источника в заголовке IPv6 в пакете p, я могу использовать p[IPv6].src, поскольку тег IPv6 находится в scapy. Но как получить доступ к параметрам ICMPv6?
Если это невозможно сделать с помощью 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 ~]$