создать пакетный протокол scapy с повторным использованием полезной нагрузки для более чем одного поля - PullRequest
0 голосов
/ 03 июля 2018

Я пытаюсь создать свой собственный протокол для scapy и застрял в последние пару дней.

То, что я хочу сделать, это использовать первые 14 байтов для первого слоя, 6 для dst mac, 6 src mac, 2 для заполнения. Остальная часть пакета будет полезной нагрузкой.

Проблема в том, что я не совсем уверен, как сделать 5-й и 6-й байты в пакете полем, которое даст значение ShortField.

class MyEther(Packet):

   name = "MyEther"

   fields_desc =[
          MACField("dst", None),
          MACField("src", None),
          StrLenField('padding', None, length_from=lambda x: 2)
   ]

помощь очень ценится!

1 Ответ

0 голосов
/ 03 июля 2018

В этом случае использование MACField не подходит. Вы должны использовать IntField, за которым следует ShortField, для каждого MACField.

fields_desc = [
    IntField(“a”, 0),
    ShortField(“b”, 0), # here are your 5-6 bytes
    ....
]

Если вы действительно знаете, что делаете, и знаете, что вам нужен MACField, вы можете использовать

struct.unpack(“!H”, mac2str(packet.dst)[4:6])

(mac2str импортируется из scapy)

...