发送带有源端口但没有绑定的UDP数据包

2024-09-26 22:10:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用Python发送一个UDP包并指定源端口,但不绑定。

与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试图绑定,但它不起作用。如果我不绑,我可以:

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

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

有人知道吗?

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

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

编辑2:解决方案位于下面的注释中Nos's answer

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


Tags: 端口用户服务器脚本应用程序编辑messagesocket
1条回答
网友
1楼 · 发布于 2024-09-26 22:10:47

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

因此,如果要控制源端口,就必须绑定()套接字。

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

相关问题 更多 >

    热门问题