![简单的客户端/服务器与 nc 不工作](https://linux22.com/image/735801/%E7%AE%80%E5%8D%95%E7%9A%84%E5%AE%A2%E6%88%B7%E7%AB%AF%2F%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8E%20nc%20%E4%B8%8D%E5%B7%A5%E4%BD%9C.png)
为什么下面的操作不起作用?
我有一个新安装的 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)