我试图使用netcat来模拟NAT穿越协议。
我有一个监听UDP包在端口6666,像这样一个实例:
NC -ul 6666
在另一个终端窗口,我想定期从端口6666发送一个UDP数据包(打开我的路由器上的返回路径。这将是在重复每20秒重新打开端口的脚本)
NC -u -p6666 mypinghost.com 4444
问题是,在与此消息ping呼叫netcat的失败:
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
似乎没有实现。
至于其他的海报已建议,解决的办法是使用一个单一的过程。
我不相信你可以以这种方式使用的netcat。 我建议写一个简单的Python脚本,它在发送和接收任务的一个过程。 你完全可以认为端口仍然这样完成这两项任务。