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

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

Что такое p2? В чем именно заключается ошибка при использовании p[-1]?

mkrieger1 27.08.2018 23:19

Я обновляю вопрос

user201635 27.08.2018 23:34

Какую версию Scapy вы используете?

Aymn Alaney 28.08.2018 23:31
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
3
718
1

Ответы 1

Думаю, вы ищете 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'>

Другие вопросы по теме