gpt4 book ai didi

python - 发送带有源端口但不绑定(bind)的 UDP 数据包

转载 作者:行者123 更新时间:2023-11-28 18:49:32 29 4
gpt4 key购买 nike

我想在 Python 中发送一个 UDP 数据包并指定源端口但不绑定(bind)。

与 hping3 等效:

hping3 -s $sourceport -p $remoteport --udp --file message.bin -d 1024 -c 1 $remoteaddr

我试过这样做:

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

s.bind((SHOST, SPORT))

当然,Python 尝试绑定(bind),但它不起作用。现在,如果我不绑定(bind),我可以:

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, 0)
s.sendto("message", (RHOST, RPORT))

消息已发送,但现在未定义源端口。

有没有人有想法?

编辑:扩展描述:我的 python 脚本补充了另一个应用程序,它是一个绑定(bind)到定义端口(1024 以上)的 UDP 服务器。我的脚本只需要将 UDP 数据包发送到远程服务器,但使用与本地 UDP 服务器相同的源端口,以便远程 UDP 服务器认为本地 UDP 服务器是数据包的作者,并将继续传输。

我想我还必须说,这是一个完全合法的应用程序,与任何黑客攻击都没有关系(事实上,它已经适用于 hping3,但我想删除这种依赖关系)。

编辑 2:解决方案在下面的评论中 Nos's answer :

使用 pyip python 包并创建原始套接字。不要忘记成为 root,因为只有 root 可以发送原始数据包(这不是 Python 的限制而是操作系统的限制,这是为了防止安全问题,因此要以用户身份发送原始数据包,您需要调整操作系统配置).

最佳答案

在 python 中没有用于发送具有定义的源端口的 UDP 数据包的 API,在大多数(所有?)运行 python 的操作系统上也没有首先将套接字绑定(bind)到本地端口的 API。

因此,如果您想控制源端口,则必须 bind() 您的套接字。

如果 bind()“不起作用”,那么您要么绑定(bind)到另一个进程拥有的端口,要么绑定(bind)到只有 root 用户才能绑定(bind)到的小于 1024 的端口号,或者您给出了一些其他错误bind() 的参数 - 但我们需要更多信息来帮助您,例如您收到的错误消息、您传递给绑定(bind)的实际参数等。

关于python - 发送带有源端口但不绑定(bind)的 UDP 数据包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15055266/

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