我试图使用netcat来模拟NAT遍历协议.
我有一个实例正在端口6666上侦听UDP数据包,如下所示:
nc -ul 6666
在另一个终端窗口中,我试图定期从端口6666发送UDP数据包(打开路由器上的返回路径.这将是一个每20秒重复一次的脚本重新打开端口)
nc -u -p6666 mypinghost.com 4444
问题是netcat在此ping调用失败时显示以下消息:
nc:绑定失败:地址已在使用中
这意味着绑定到端口6666的侦听器阻止另一个进程从该端口发送,或者可能是netcat尝试绑定到6666以进行侦听.
这只是netcat的编写方式,还是我可以通过某种方式让它发送一个数据包而不绑定到端口来监听?
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似乎没有实现.
正如另一张海报所说,解决方案在于使用单一流程.