如何让 netcat 接受来自 LAN 外部的连接?

Posted

技术标签:

【中文标题】如何让 netcat 接受来自 LAN 外部的连接?【英文标题】:How do I get netcat to accept connections from outside the LAN? 【发布时间】:2011-02-02 21:33:12 【问题描述】:

我正在使用 netcat 作为后端来为我正在制作的程序来回挖掘数据。我在本地网络上测试了我的程序,一旦它工作,我认为只需从我的路由器转发一个端口,让我的程序在互联网上工作。唉!好像不是这样的。

如果我启动 netcat 监听 6666 端口:

nc -vv -l -p 6666,

然后在浏览器中转到127.0.0.1:6666,正如预期的那样,我看到一个 HTTP GET 请求来自 netcat(我的浏览器徒劳地等待着)。但是,如果我转到my.external.ip.address:6666,则根本没有任何反应,浏览器显示“无法连接到my.external.ip.address:6666”。

我知道该端口已正确转发,因为 www.canyouseeme.org 说端口 6666 是打开的(当 netcat 没有监听时,它是关闭的)。

如果我使用-g my.adslmodem's.local.address 运行 netcat 来设置网关地址,我会得到相同的行为。我是否正确使用了这个命令行选项?关于我做错了什么的任何见解?

【问题讨论】:

【参考方案1】:

您必须在公共接口上收听。您当前正在 localhost 上收听,您的计算机之外的任何人都无法连接。

您的里程可能会有所不同,但在我实现 netcat 时,我必须使用此命令行来侦听所有公共接口。

netcat -vv -l 0.0.0.0 6666

【讨论】:

感谢您的回答。我不认为是这样,因为 netcat 很乐意接收来自我网络上其他计算机的连接。此外,当它启动时,它会显示“正在侦听 [any] 6666 ...”。我尝试了您的建议(在端口之前使用“-p”,否则它会选择一个随机端口)并得到“0.0.0.0:反向主机查找失败:未知主机”:( 也适用于 Cygwin (nc) 太棒了 :) 对我有用【参考方案2】:

事实证明没有问题。之所以出现这种情况,是因为我的路由器不允许发夹连接。也就是说,即使我已经正确设置了它,当源和目标都在 NAT 之后时,路由器也不会建立连接。只要请求来自局域网外部,只需ncat -l -p 6666 就可以正常工作。为了测试这一点,我用我的 3G 手机浏览了my.external.ip.address:6666,果然,一个 HTTP 请求通过了:)

这个答案来自:a serverfault question,这是我应该首先问这个问题的地方。对此深表歉意。

【讨论】:

哈。不用担心。我在 SF 上问了一个类似的问题,他们认为这太新奇了。直到我读到这个答案,我才知道什么是“发夹”连接(人们一直在引用“发夹 NAT”并告诉我 RTFM)。谢谢。 它也对我有用。我没有使用 0.0.0.0。正如你所说,只有目标机器上的端口。谢谢!【参考方案3】:

指定监听地址:

nc -l -s <LISTENING_IP_ADDR> -p <LISTENING_PORT>

在 Debian Jessie 上使用 netcat-traditional-1.10-41 进行测试

【讨论】:

不能同时使用-l-s @benedikt:有些nc 版本可以,有些不能。 Debian 上的 nc.traditional 可以:nc -l -s 192.168.18.100 -p 6666 而 Ubuntu 上的 /bin/nc.openbsd 不能:nc -l -s 192.168.244.163 -p 6666 nc: cannot use -s and -l 感谢您的澄清

以上是关于如何让 netcat 接受来自 LAN 外部的连接?的主要内容,如果未能解决你的问题,请参考以下文章

来自lan和外部的wordpress访问

可以连接wan到lan吗?

如何制作可以接受来自外部站点的请求的 ASP.NET MVC 控制器?

收到服务器响应后如何关闭netcat连接?

如何让 java jTextPane 接受拖动外部文件?

如何使用 Windows 版 NetCat 将二进制文件发送到 TCP 连接?