Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 发送带有源端口但不带绑定的UDP数据包_Python_Sockets_Udp_Port - Fatal编程技术网

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

Python 发送带有源端口但不带绑定的UDP数据包,python,sockets,udp,port,Python,Sockets,Udp,Port,我想用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

我想用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、 绑定((SHOST,SPORT))
但当然,Python尝试绑定,但它不起作用。现在,如果我不绑定,我可以:

s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM,0)
s、 发送到(“消息”(RHOST,RPORT))
消息已发送,但现在未定义源端口

有人有主意吗

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

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

编辑2:解决方案在下面的注释中:


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

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

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


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

问题在于,已经有另一个应用程序在同一接口和端口上运行(这是整个目标:为我自己的应用程序提供附加功能,仅发送数据包,以补充绑定到端口的其他应用程序,该应用程序将应答传入的数据包).我根据要求添加了一个扩展描述,但我认为这不会有多大帮助。因此,在Python中真的没有办法做到这一点吗?@user1121352不直接,您可能可以使用原始套接字,并创建自己的UDP数据包,只需注意该套接字也将接收其他程序重新生成的数据包。啊,好主意!是的,这不是问题,因为我的python脚本根本不会监听数据包,所以它根本不会处理它们。有没有参考资料可以从Python中的原始套接字开始?我发现了这篇文章:谈论pyip包,但运气不好,在我的Windows机器和Unix机器上都不允许操作,所以我认为这还需要一些复杂的配置。我认为我将暂时保留我的hping3实现,直到Python在处理原始数据包或UDP数据包方面变得更好。谢谢你的帮助!