我一直在尝试调试我们服务器上的一个问题,但 netcat 的这个响应让我感到困惑。有人能解释一下为什么我在检查端口是否正常工作时收到这 2 条相互矛盾的消息吗?是不是通过 TCP 连接失败,然后通过其他方法成功了 (*)?
ubuntu@1-2-3-4:/var/log$ nc -vz localhost 7777
nc: connect to localhost port 7777 (tcp) failed: Connection refused
Connection to localhost 7777 port [tcp/*] succeeded!
IP4/6 结果
nc -vz4 localhost 7777
Connection to localhost 7777 port [tcp/*] succeeded!
nc -vz6 localhost 7777
nc: connect to localhost port 7777 (tcp) failed: Connection refused
答案1
发生这种情况是因为您的守护进程仅在 IPv4 上监听。
IPv6 是默认协议,因此如果给定的主机名同时具有 IPv4 和 IPv6 地址,则始终首先尝试 IPv6 地址。
在您的例子中,localhost
有 IPv4 地址127.0.0.1
和 IPv6 地址::1
。但您的守护进程只监听127.0.0.1
。
因此,当nc
尝试连接到时,localhost
它首先连接到::1
,发现没有任何人在监听,然后返回Connection refused
。然后它尝试连接127.0.0.1
并找到您的守护进程。