Я использую 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 вы используете?






Думаю, вы ищете 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'>
Что такое
p2? В чем именно заключается ошибка при использованииp[-1]?