我试图在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)
答案 0 :(得分:0)
由于您在<form method="POST" target="/make">
<div id="Question">
</form>
上将Vxlan
绑定到UDP
,因此您的代码可以使用dport=4789
,因此您的代码可以轻微更改。实际上你可以做到:
UDP(dport=4789)
现在应该可以了!还要记住from this post,也就是数据包的目标,必须知道你的图层。