使用netcat发送UDP数据包而不进行绑定

Jim*_*win 7 udp netcat

我试图使用netcat来模拟NAT遍历协议.

我有一个实例正在端口6666上侦听UDP数据包,如下所示:

nc -ul 6666

在另一个终端窗口中,我试图定期从端口6666发送UDP数据包(打开路由器上的返回路径.这将是一个每20秒重复一次的脚本重新打开端口)

nc -u -p6666 mypinghost.com 4444

问题是netcat在此ping调用失败时显示以下消息:

nc:绑定失败:地址已在使用中

这意味着绑定到端口6666的侦听器阻止另一个进程从该端口发送,或者可能是netcat尝试绑定到6666以进行侦听.

这只是netcat的编写方式,还是我可以通过某种方式让它发送一个数据包而不绑定到端口来监听?

use*_*421 9

nc -ul 6666

收听UDP端口6666.

nc -u -p6666 mypinghost.com 4444

使用UDP端口6666作为源端口,发送到mypinghost:4444.

nc:绑定失败:地址已在使用中

这将是第二次netcat调用,其中6666已经被第一次使用.

这意味着绑定到端口6666的侦听器阻止另一个进程从该端口发送

正确.

或者可能是netcat试图绑定到6666来监听.

明确这一点.你告诉它这样做,所以它做到了.

您要在同一主机中的两个进程之间执行的操作是不可能的.只有一个进程可以一次使用特定的本地UDP端口,除非您使用SO_REUSEADDRESS,但netcat似乎没有实现.

正如另一张海报所说,解决方案在于使用单一流程.


mha*_*all 2

我不相信你可以以这种方式使用 netcat。我建议编写一个简单的 Python 脚本,在一个进程中执行发送和接收任务。这样您就可以独占该端口并仍然完成这两项任务。