Как получить последний индекс в пакете Scapy?

1

Я использую Scapy для обработки и обнюхивания пакетов. Я пытаюсь получить последний индекс полезной нагрузки пакета нюхания. Например:

p=IPv6()/UDP()/DHCPv6_Solicit()

DHPCv6_Solicit() будет последней полезной нагрузкой, а индекс для нее равен 2

p[2] #print DHCPv6_Solicit() object

Я попытался получить последний индекс, используя -1, но Scapy дал мне эту ошибку

Traceback (most recent call last):
   File "/usr/lib/python3.5/code.py", line 91, in runcode
   exec(code, self.locals)
   File "<console>", line 1, in <module>
   File "/usr/local/lib/python3.5/dist-packages/scapy/packet.py", line 966, in __getitem__
   raise IndexError("Layer [%s] not found" % lname)
IndexError: Layer [-1] not found

Я попытался получить длину массива, используя

len(p2)

но Scapy показал длину пакета в байтах. Как я могу найти последний индекс полезной нагрузки пакета Scapy?

  • 0
    Что такое p2 ? В чем именно заключается ошибка при использовании p[-1] ?
  • 0
    Я обновляю вопрос
Показать ещё 1 комментарий
Теги:
scapy

1 ответ

0

Я думаю, что вы ищете packet.lastlayer():

>>> p = IPv6()/UDP()/DHCP6_Solicit()
>>> p.lastlayer()
<DHCP6_Solicit  |>

Вы также можете использовать packet.layers() и использовать список индексирования, как вы ожидали:

>>> p.layers()
[<class 'scapy.layers.inet6.IPv6'>, <class 'scapy.layers.inet.UDP'>, <class 'scapy.layers.dhcp6.DHCP6_Solicit'>]
>>> p.layers()[-1]
<class 'scapy.layers.dhcp6.DHCP6_Solicit'>
  • 0
    @ user201635 это решило твою проблему? Если да, можете ли вы пометить это как принятый ответ?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню