如果您不是请求的发送者,您能找出为什么连接被拒绝的原因吗?

如果您不是请求的发送者,您能找出为什么连接被拒绝的原因吗?

我读过一些关于为什么连接被拒绝的帖子和文章。这些帖子和文章通常都是泛泛地谈论这个问题,比如这篇什么原因导致出现‘连接被拒绝’消息?

但我的问题是,你如何或何时才能确定对方出了问题(比如说有人向你发送请求)。

在这种情况下,如果您向设置的公共 IP 和端口发出请求,并且连接成功,一切正常(来自不同的设备、IP 和网络),但如果其他人发送该请求,则会被拒绝。我们如何知道问题是什么?

答案1

当客户端尝试连接服务/服务器时,大致会出现以下情况:

  1. 连接成功
  2. 连接尝试失败,因为客户端没有收到任何响应。它既没有收到肯定的响应,也没有收到否定的响应,最终连接尝试失败,原因是暂停
  3. 连接尝试失败,但客户端收到错误消息

当你尝试从客户端调试

  • 设想 #1简单 ;)

  • 设想#3通常表现为“连接被拒绝”错误。
    当您运行数据包捕获您要寻找的客户端:

    • TCP 重置/RST 数据包
    • 或者 ICMP 数据包,例如“无法访问 - 管理员禁止”

    两者都包含一个源 IP 地址,该地址要么与您要连接的服务器的 IP 地址匹配,要么不匹配。

    • 当错误来自服务器时,要么没有任何东西在监听,要么服务器上可能有基于主机的防火墙处于活动状态。
    • 当 IP 地址不是来自服务器时,它来自客户端和服务器之间路径上阻止连接尝试的(第一个)设备。
  • 设想#2有时表现为“连接超时”有时会有点错误地“连接被拒绝”
    这通常是防火墙配置的结果,它会默默地丢弃所有不允许的连接尝试。从客户端来看,无法确定这种情况发生在哪里。数据包捕获没有显示任何内容,您无法从客户端进行调试。您不知道这种情况发生在哪里,是在服务器上还是在客户端和服务器之间的路径上的某个地方。

当你尝试从服务器调试

  • 设想 #1简单 ;)

  • 调试两种情况#2#3您可以在服务器上运行数据包捕获:

    服务器上的数据包捕获将看到所有传入数据包。当没有服务在端口上侦听时,仍会收到传入数据包。无论基于主机的防火墙是否处于活动状态,数据包捕获都会显示数据包它们会被主机防火墙处理,并可能被拒绝/悄悄丢弃。Linux
    参考这里或 Windows这里

    1. 当收到来自客户端的数据包时:
      在服务器上进一步调试(检查:基于主机的防火墙的配置,服务是否启用、是否健康、是否具有活动 ACL 等)

    2. 当未收到来自客户端的数据包时:
      连接尝试在客户端和服务器之间的路径上的某处被阻止。从服务器你无法知道在哪里。

相关内容