@Sdelan_v_CCCP

Как сформировать Ethernet OAM PDU в Scapy?

Всем привет! Никак не могу догнать, как же там сформировать пакеты/PDU Ethernet OAM, указывая свои значения в поля type, subtype,flags, code. Возможно ли это вообще в Scapy? Если нет, то есть ли инструменты, которые позволяют сформировать и отправить такие PDU?
  • Вопрос задан
  • 2842 просмотра
Решения вопроса 1
@throughtheether
human after all
Возможно ли это вообще в Scapy?
Вы можете создать фрейм при помощи конструктора e=Ether(src='AA:AA:AA:AA:AA:AA',dst='01:80:c2:00:00:02',type=0x8809), и далее самостоятельно задать значение поля данных (e.payload=data, где data имеет тип Packet или str)
Пример (размер полей может быть не вполне корректен):
e=Ether(src='AA:AA:AA:AA:AA:AA',dst='01:80:c2:00:00:02',type=0x8809)
class EthernetOAM(Packet):
    name='Ethernet OAM'
    fields_desc=[
         ByteField('Subtype',3),
         ByteField('Flags',0),
         ByteField('Code',0),
    ]
OAM=EtherOAM()
OAM.payload="data+padding"
e.payload=OAM
OAM
>>> <EthernetOAM  |<Raw  load='data+padding' |>>
e
>>> <Ether  dst=01:80:c2:00:00:02 src=AA:AA:AA:AA:AA:AA type=0x8809 |<EthernetOAM  |<Raw  load='data+padding' |>>>


Если нет, то есть ли инструменты, которые позволяют сформировать и отправить такие PDU?
Инструментов много (как пример, trafgen или mausezahn в составе пакета netsniff-ng), но формировать поле данных вам придется самому, скорее всего.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Sdelan_v_CCCP Автор вопроса
Спасибо, throughtheether! Ваш ответ мне помог. Разобрался в каком направлении идти)) Допишу его еще немного от себя) Может кому понадобится))

Я создал файл test_packet.py примерно с таким содержанием
#! /usr/bin/env python
#! /usr/bin/env python

# Set log level to benefit from Scapy warnings
import logging
logging.getLogger("scapy").setLevel(1)

from scapy.all import *

class EthernetOAM(Packet):
	name = "Ethernet OAM"
	fields_desc = [ 
                                XByteField("Subtype", 0x03),
				XByteField("Flags1", 	0x00),
				XByteField("Flags2", 	0x02), 
				XByteField("Code",	0x00)
         ]

if __name__ == "__main__":
	interact(mydict=globals(), mybanner="I am Batman")

#End of file


запустил:
#sudo python test_packet.py

>>> e = Ether(src='AA:AA:AA:AA:AA:AA',dst='01:80:c2:00:00:02',type=0x8809)/EthernetOAM()

>>>sendp(e)

В принципе это все что мне было нужно)
Лучше всего конечно курить официальную документацию:
www.secdev.org/projects/scapy/build_your_own_tools.html
www.secdev.org/projects/scapy/doc/build_dissect.html
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы