Почему я не вижу слой на принимающем компьютере?

Я пытался создать новый слой в scapy, но когда я отправляю пакет на другой компьютер, новый слой теряется. я положил следующий код на компьютер-отправитель и компьютер-получатель.

import  sys 
i, o, e = sys.stdin, sys.stdout, sys.stderr
from scapy.all import *

sys.stdin, sys.stdout, sys.stderr = i, o, e
from scapy.packet import *
from scapy.fields import *
from scapy.layers.inet import UDP, IP
from scapy.layers.dns import DNS
from scapy.layers.l2 import Ether

vxlanmagic = "0x8"


class Vxlan(Packet):
    name = "Virtual eXtensible Local Area Network"
    fields_desc = [ByteField("flag", 8),
                   X3BytesField("reserved1", 0),
                   X3BytesField("vni", 0),
                   ByteField("reserved2", 0)]

    def guess_payload_class(self, payload):
        if self.flag == vxlanmagic:
            return Vxlan
        else:
            return Packet.guess_payload_class(self, payload)

    def mysummary(self):
        return self.sprintf("VXLAN (vni=%VXLAN.vni%)")

split_layers(UDP, DNS, sport=53)
bind_layers(UDP, Vxlan, dport=4789)
bind_layers(Vxlan, Ether)
packet = IP(dst='192.168.1.28')/Vxlan()
packet.show()
send(packet)

1 ответ

Ваш код работает нормально с небольшим изменением, так как вы связали Vxlan в UDP на dport=4789, вам придется построить свой пакет так, чтобы он использовал UDP(dport=4789), Так что на самом деле вы можете сделать:

packet = IP(dst='192.168.1.28')/UDP(dport=4789)/Vxlan()

и теперь это должно работать! Также помните из этого поста, что и целевой пакет должен знать о вашем слое.

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