是什么导致“连接被拒绝”消息?

use*_*517 135 networking connection-refused

这是一个关于拒绝连接规范问题

我们看到了很多关于大意的问题

当我尝试连接到系统时,我收到一条消息

拒绝连接

为什么是这样 ?

use*_*517 150

注意:此消息是您尝试解决的问题的症状。了解消息的原因将最终引导您解决您的问题。

消息“拒绝连接”有两个主要原因:

  1. 您尝试连接的 IP:Port 上没有任何内容在侦听。
  2. 该端口被防火墙阻止。

没有进程在监听。

到目前为止,这是消息的最常见原因。首先确保您尝试连接到正确的系统。如果您要确定这是否是问题所在,请在远程系统上运行netstatss 1例如,如果您希望进程侦听端口 22222

sudo netstat -tnlp | grep :22222
Run Code Online (Sandbox Code Playgroud)

或者

ss -tnlp | grep :22222
Run Code Online (Sandbox Code Playgroud)

对于 OSX,一个合适的命令是

sudo netstat -tnlp tcp | grep '\.80 '
Run Code Online (Sandbox Code Playgroud)

如果没有任何东西在听,那么上面的内容将不会产生任何输出。如果您看到一些输出,请确认这是您所期望的,然后查看下面的防火墙部分。

如果您无权访问远程系统并希望在将问题报告给相关管理员之前确认问题,您可以使用 tcpdump(wireshark 或类似)。

当尝试连接到没有任何内容侦听的 IP:port 时,远程系统对初始 SYN 数据包的响应是一个设置了标志 RST,ACK 的数据包。这将关闭连接并导致连接被拒绝消息,例如

$ sudo tcpdump -n host 192.0.2.1 and port 22222
tcpdump:详细输出被抑制,使用 -v 或 -vv 进行完整协议解码
监听 enp14s0,链接类型 EN10MB(以太网),捕获大小 262144 字节

12:31:27.013977 192.0.2.2.34390 > 192.0.2.1.22222: Flags [S] , seq 1207858804, win 29200, options [mss 1460,sackOK,TS val 15306344, IPR 0,1027p

: 1027p 0,107p] 192.0.2.1.22222 > 192.0.2.2.34390: 标志[R.] , seq 0, ack 1207858805, win 0, length 0

请注意,tcpdump 使用. 表示 ACK标志。

端口被防火墙阻止

如果端口被防火墙阻止,并且防火墙已配置为对此进行响应,icmp-port-unreachable也会导致连接被拒绝的消息。同样,您可以使用 tcpdump(或类似的)看到这一点

$ sudo tcpdump -n icmp
tcpdump:禁止详细输出,使用 -v 或 -vv 进行完整协议解码

侦听 enp14s0,链接类型 EN10MB(以太网),捕获大小 262144 字节 13:03:24.149897 IP 192.0.2.1 > 192144 2.2:ICMP 192.0.2.1 tcp端口22222不可达,长度68

请注意,这也告诉我们阻止防火墙的位置。


所以现在您知道是什么导致了连接被拒绝的消息,您应该采取适当的措施,例如联系防火墙管理员或调查进程不侦听的原因。

1可能还有其他工具可用。

  • ELI5 版本:表示连接请求到达了另一台计算机,而另一台计算机不知道您在说什么。 (3认同)

小智 7

对于我在 Debian 6 上的挤压,它就像检查 SSH 服务一样简单:

sudo service ssh status
Run Code Online (Sandbox Code Playgroud)

并发现什么都不存在(带有消息ssh: unrecognized service)只是安装服务

sudo apt-get install openssh-server
Run Code Online (Sandbox Code Playgroud)

如果您没有获得 SFTP 连接,这也有效,因为 SFTP 是 SSH 的一个子集(而 FTPS 是 FTP 的一个子集)。