简单的客户端/服务器与 nc 不工作

简单的客户端/服务器与 nc 不工作

为什么下面的操作不起作用?

我有一个新安装的 Debian 9 系统。iptables是敞开的:

[···]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

我登录了两个不同的控制台(好吧,两个不同的 ssh 登录)。在其中一个控制台中,我运行:

[···]# nc -l 11115

然后,我转到另一个控制台并运行:

[···]# nc localhost 11115

我得到了连接被拒绝错误:

[···]# nc localhost 11115
localhost [127.0.0.1] 11115 (?) : Connection refused

我也尝试过nc 127.0.0.1 11115,尝试过telnet---总是连接被拒绝

在“听力”方面,我也尝试了nc -l localhost 11115---没有区别。

我遗漏了什么或者做错了什么?

[编辑]:在 CentOS 6.9 机器上,上述命令按预期工作。我家里的 Ubuntu 14.04 上也是一样。我以为可能是以 root 身份运行会nc禁用某些功能。但事实并非如此,我刚刚在 Debian 9 机器上以普通用户身份尝试,结果还是失败了。有什么想法吗?

答案1

实际上有四个(或更多?)不同的程序称为nc(netcat),它们是从很久以前出现的同一个基本程序的分支或重写而来的。

Debian 中的默认设置似乎是它所称的netcat-traditional,即古老的原始版本。我能够使用 netcat-traditional 重现此问题;监听似乎非常不正常。它实际上并没有绑定到端口;我无法在ss输出中看到它在监听,也没有看到它在 strace 下运行时尝试绑定。

另一个可用的 Debian 软件包称为netcat-openbsd,它是 OpenBSD 开发人员目前维护的原始 netcat 的一个分支。如果您安装此软件包(然后可以删除netcat-traditional),您会发现它可以正常工作。

还有另一个 netcat 软件包,它由基于 Red Hat 的系统使用,由 nmap 和 insecure.org 的 Fyodor 以及其他开发人员开发和维护。它是从头开始完全重写的,不使用传统的 netcat 或 BSD netcat 代码。它也能正常工作。它的软件包名称(在 Red Hat 系统上)是nmap-ncat

我最近了解到第四个 netcat,GNU 网络猫,这也是一次彻底的重写,但在 2007 年被放弃。奇怪的是,有一两个 Linux 发行版(例如 Arch)仍然在提供它。

答案2

在 Debian 2 上,有 2 个软件包 netcat 和一个过渡方案,这将引用 netcat-传统

root@debian9:~# apt-cache search ^netcat
netcat - TCP/IP swiss army knife -- transitional package
netcat-traditional - TCP/IP swiss army knife
netcat-openbsd - TCP/IP swiss army knife
[../..]

当你多次运行时数控-L 11115,nc 正在监听,但是在随机端口上(似乎是随机的)。

root@debian9:~# lsof -p $(pidof nc ) | grep LISTEN
nc      12734 root    3u  IPv4 11892054      0t0   TCP *:44907 (LISTEN)

事实上你可以运行数控代替数控-L 11115,你就会有同样的行为。

是的netcat-传统是一个老软件,一些简单的错误没有修复(在你的例子中,缺少参数-p 端口聆听 .

您可以选择netcat-openbsd,它将按您预期的方式工作。

root@debian9:/# lsof -p $( pidof nc ) | grep LISTEN
nc      2140 root    3u  IPv4  29855      0t0     TCP *:11115 (LISTEN)

相关内容