40

我正在使用 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 没有监听时,它已关闭)。

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

4

3 回答 3

39

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

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

netcat -vv -l 0.0.0.0 6666

于 2010-03-31T11:48:22.387 回答
22

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

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

于 2010-03-31T12:29:09.447 回答
13

指定监听地址:

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

在 Debian Jessie 上测试netcat-traditional-1.10-41

于 2016-07-05T06:49:53.327 回答