8

我正在尝试使用 netcat 来模拟 NAT 遍历协议。

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

数控-ul 6666

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

nc -u -p6666 mypinghost.com 4444

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

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

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

这就是 netcat 的编写方式,还是我可以通过某种方式给它发痒,让我在不绑定到端口的情况下发送数据包来监听?

4

2 回答 2

10

数控-ul 6666

侦听 UDP 端口 6666。

nc -u -p6666 mypinghost.com 4444

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

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

那将是第二次netcat调用,其中 6666 已被第一次调用。

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

正确的。

或者可能 netcat 正在尝试绑定到 6666 来监听。

绝对是这样。你告诉它这样做,所以它做到了。

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

正如另一张海报所建议的那样,解决方案在于使用单一流程。

于 2012-07-10T00:00:45.693 回答
2

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

于 2012-07-09T23:11:34.447 回答