通过 Scapy 向数据包添加新协议,但我没有在控制器或 Wireshark 上看到该字段
adding a new protocol to the packet by Scapy, but I do not see the field on the controller or Wireshark
我正在尝试通过 Scapy 向 pkt 添加元数据字段。我使用 mininet 作为启动网络模拟的平台。
from scapy.all import *
from datetime import datetime
class Metadata(Packet):
name = "Metadata"
fields_desc = [ XByteField("metadata", 1) ]
def generatePackets():
if len(sys.argv) != 4:
print "Usage: arping2tex <net>\n eg: arping2text 192.168.1.0/24"
sys.exit(1)
src= sys.argv[1]
dst= sys.argv[2]
x = int(sys.argv[3])
ip=IP(src= src, dst= dst)
metadata = Metadata(metadata = 200)
udp=UDP(sport= 2235, dport=5546)#,
data = datetime.utcnow().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3]
pkt = (ip/udp/metadata/data)
print pkt.show()
send(pkt, count = x)
if __name__ == '__main__':
generatePackets()
当我发送 pkt 时,我可以在发件人 (xterm) 上看到元数据字段
Xterm for the sender with new field
但是,我没有在控制器、Wireshark 或目标主机上看到元数据字段。
Xterm for the receiver without the new field
拜托,我需要一个解释,或者我做错了什么。
您的元数据存在于另一侧。
你可以在接收方的有效负载上看到它
您发送了:
元数据:c8 / raw:“一个日期”
您收到:
原始:c8“约会”
现在让我们深入了解发生了什么。
您的接收器收到带有一些数据的 UDP 帧。由于没有注册任何协议,它无法知道前 2 个字节是元数据,然后假设它是正常负载的一部分。
您可以通过在发送前重新运行该命令来确认这一点:
pkt.show2()
而不是 运行
pkt.show()
区别在于show2()在打印前重建并重新解码数据包,而show()只打印数据包。然后你会看到你发送了接收者收到的东西。
我正在尝试通过 Scapy 向 pkt 添加元数据字段。我使用 mininet 作为启动网络模拟的平台。
from scapy.all import *
from datetime import datetime
class Metadata(Packet):
name = "Metadata"
fields_desc = [ XByteField("metadata", 1) ]
def generatePackets():
if len(sys.argv) != 4:
print "Usage: arping2tex <net>\n eg: arping2text 192.168.1.0/24"
sys.exit(1)
src= sys.argv[1]
dst= sys.argv[2]
x = int(sys.argv[3])
ip=IP(src= src, dst= dst)
metadata = Metadata(metadata = 200)
udp=UDP(sport= 2235, dport=5546)#,
data = datetime.utcnow().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3]
pkt = (ip/udp/metadata/data)
print pkt.show()
send(pkt, count = x)
if __name__ == '__main__':
generatePackets()
当我发送 pkt 时,我可以在发件人 (xterm) 上看到元数据字段 Xterm for the sender with new field
但是,我没有在控制器、Wireshark 或目标主机上看到元数据字段。 Xterm for the receiver without the new field
拜托,我需要一个解释,或者我做错了什么。
您的元数据存在于另一侧。 你可以在接收方的有效负载上看到它
您发送了: 元数据:c8 / raw:“一个日期” 您收到: 原始:c8“约会”
现在让我们深入了解发生了什么。 您的接收器收到带有一些数据的 UDP 帧。由于没有注册任何协议,它无法知道前 2 个字节是元数据,然后假设它是正常负载的一部分。
您可以通过在发送前重新运行该命令来确认这一点: pkt.show2() 而不是 运行 pkt.show()
区别在于show2()在打印前重建并重新解码数据包,而show()只打印数据包。然后你会看到你发送了接收者收到的东西。