Как проверить наличие слоя в пакете scapy? - PullRequest
12 голосов
/ 04 апреля 2011

Как проверить наличие определенного слоя в пакете scapy?Например, мне нужно проверить поля src / dst заголовка IP, как я узнаю, что конкретный пакет действительно имеет заголовок IP (в отличие от IPv6, например).Я иду, чтобы проверить поле заголовка IP, я получаю сообщение о том, что уровень IP не существует.Вместо IP-заголовка этот конкретный пакет имел IPv6.

pkt = Ether(packet_string)
if pkt[IP].dst == something:
  # do this

Моя ошибка возникает при попытке обратиться к уровню IP.Как проверить существование этих слоев, прежде чем пытаться манипулировать ими?

Спасибо!

Ответы [ 2 ]

20 голосов
/ 05 апреля 2011

Вы должны попробовать оператор "in". Он возвращает истину или ложь в зависимости от того, присутствует ли уровень в пакете.

root@u1010:~/scapy# scapy
Welcome to Scapy (2.2.0-dev)
>>> load_contrib("ospf")
>>> pkts=rdpcap("rogue_ospf_hello.pcap")
>>> p=pkts[0]
>>> IP in p
True
>>> UDP in p
False
>>>
root@u1010:~/scapy#
16 голосов
/ 16 апреля 2012

Для завершения я подумал, что я бы также упомянул метод haslayer.

>>> pkts=rdpcap("rogue_ospf_hello.pcap") 
>>> p=pkts[0]
>>> p.haslayer(UDP)
0
>>> p.haslayer(IP)
1

Надеюсь, это тоже поможет ..

...