如何让 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 外部的连接?的主要内容,如果未能解决你的问题,请参考以下文章