gpt4 book ai didi

python - 无法使用 python 将 UDP 数据包发送到本地端口,根据 WireShark 校验和失败

转载 作者:行者123 更新时间:2023-12-01 05:21:48 25 4
gpt4 key购买 nike

我一直在为这个问题揪心。我正在尝试用 Python 编写 SOCKS5 服务器来隧道 UDP 流量。我绑定(bind)到端口,并且接收数据正常。然后,我解析 SOCKS5 UDP header (不是典型的 UDP header ),并将数据报转发到请求的端点。

一切都很好。然后,我监听来自端点的响应(如果超时则重新发送),并获得响应。太棒了!

这就是我失去理智的地方-

我从端点取回数据报。我按照SOCKS5 RFC重新封装返回的数据报,与以前相同的 UDP header ,只是我现在将目标地址和端口更改为原始调用者。我使用:

sock_client = socket.socket(socket.AF_INET, # Internet
socket.SOCK_DGRAM) # UDP
sock_client.sendto(packed_datagram, (self.client_ip, self.client_port))

将数据报发送回客户端。客户始终没有收到回复!曾经!

查看 WireShark,它是这样写的: header 校验和:0x0000 [不正确,应该是 0xcd1f(可能是由“IP 校验和卸载”引起的?)]

设置了 socket.DGRAM 的 python 套接字实现不应该自动将我的数据正确打包在 UDP header 中并计算适当的校验和吗?为什么它被设置为0x0000?我检查了十六进制的有效负载,校验和确实设置错误。这到底是怎么回事?

最佳答案

校验和计算由操作系统中的驱动程序完成。在某些情况下,计算是由网卡本身完成的。 IIRC,Wireshark 在将本地数据包传递到网络堆栈之前抓取它们。所有本地生成的数据包的校验和错误都很常见。

关于python - 无法使用 python 将 UDP 数据包发送到本地端口,根据 WireShark 校验和失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22163593/

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