gpt4 book ai didi

python - 从 UDP 中刮掉 scapy 负载的 8 个字节

转载 作者:行者123 更新时间:2023-12-01 09:24:08 25 4
gpt4 key购买 nike

我正在使用 scapy 发送 udp 数据包。我看到前 8 个字节从有效负载中被刮掉。有什么原因吗?

payload = '{ "dcgdsfjfghtimec": ' + str(datetime.now().strftime('%M:%S.%f')) + ', "sequence": ' + str(sequenceNum)+'}'
packet = IP(dst="127.0.0.1", src="10.0.0.1")/UDP(dport=5555)/Raw(load=json.dumps(payload))

在接收方:

def packet_callback(packet):
if packet[UDP].payload:
pkt = str(packet[UDP].payload)

while True:
sniff(filter="dst port 5555", prn=packet_callback, store=0)

我正在观察服务器端的有效负载:

(Pdb) p packet[UDP].payload
<DNS id=8827 qr=0 opcode=4 aa=0 tc=0 rd=0 ra=0 z=1 ad=0 cd=1 rcode=12 qdcount=8804 ancount=25447 nscount=25715 arcount=26218 qd='' an='' ns='' ar='' |<Raw load='fghtimec\\": 33:44.120154, \\"sequence\\": 0}"' |>>

发送数据包后在客户端:

(Pdb) p packet
<IP frag=0 proto=udp src=10.0.0.1 dst=127.0.0.1 |<UDP dport=rplay |<Raw load='"{ \\"dcgdsfjhtimec\\": 32:49.187705, \\"sequence\\": 0}"' |>>>

正好 8 个字节,从服务器端剥离..为什么?

任何想法都会非常有帮助。

谢谢,苏迪普

最佳答案

对于源和目标,Scapy 的默认 UDP 端口值为 53。这会导致目标将有效负载的开头解释为 DNS() 层。因此字节并没有丢失,它们只是被解释为(损坏的)DNS 层。

您可以通过查看 IP 在本地重现此内容(如果您使用的是 Scapy < 2.4.0,请将 raw() 替换为 str()) (raw(packet)):raw() 强制 Scapy 创建要在 newtork 上发送的字节,并且 IP() 告诉 Scapy 剖析字节作为 IP 层。

您可以通过使用不同的源端口来“修复”该问题(因为您已经更改了目标端口):packet = IP(dst="127.0.0.1", src="10.0.0.1")/UDP (sport=12345,dport=5555)/Raw(load=json.dumps(payload))

作为旁注,在我看来,您还有另一个(真正的,这个)问题:您可能不想 json.dumps() 字符串,而是一个 Python 对象(使用在当前代码中,您将数据编码为 JSON 两次,因为您使用的字符串已经是 JSON 编码的):

payload = {"dcgdsfjfghtimec": datetime.now().strftime('%M:%S.%f'),
"sequence": sequenceNum}
packet = IP(dst="127.0.0.1", src="10.0.0.1")/UDP(sport=12345, dport=5555)/Raw(load=json.dumps(payload))

关于python - 从 UDP 中刮掉 scapy 负载的 8 个字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50577428/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com