为什么Test-NetConnection显示可以连接,但是我无法访问网站?

为什么Test-NetConnection显示可以连接,但是我无法访问网站?

鉴于网络存在防火墙限制,我需要确定特定站点是否可通过特定端口访问。

如果我无法通过某个端口访问该网站,则意味着我需要先修改防火墙才能继续。否则,如果我可以访问该网站,那么我就可以继续执行我打算执行的操作。

我想知道是否可以Github使用存储库的 https URL 获取存储库。示例 https URL:。https://github.com/git-for-windows/git.git这可以与clone其他工具一起使用。

为了查看是否可以到达Github并克隆 repo,我运行了以下命令:Test-NetConnection -ComputerName github.com -Port 443 |findstr "TcpTestSucceeded"

在系统上,该命令返回以下内容,表明我能够github.com通过端口 443(https)进行访问。

TcpTestSucceeded : True

但是,随后我打开了 Web 浏览器并访问了https://github.com,Web 浏览器指示无法建立连接。https 通过端口 443,域名与github.com我在测试中输入的域名一样。

我的问题是:

  • 为什么这两项测试会有这样的差异?
  • 我如何才能准确地测试我CMD是否PowerShell可以通过特定端口访问特定域?

显然,该Test-NetConnection命令没有产生准确的结果,因为网络浏览器无法访问github.com

答案1

显然,Test-NetConnection 命令没有产生准确的结果,因为网络浏览器无法访问 github.com。

这不是一个准确的说法。

Test-NetConnection 确实与目标服务器的 443 端口建立了 TCP 连接,验证了远程服务器上的 TCP 443 端口是否处于监听状态。Test-NetConnection 不会测试 443 端口上运行/监听的应用程序/服务。

本质上,Test-NetConnection 无法告诉您第 7 层正在运行/监听什么,它只能告诉您端口 443 处于监听状态。

答案2

“可以建立连接”和“我可以继续执行我打算做的事情”这两个陈述远远不等同,并且像这样的简单 TCP 连接测试Test-NetConnection根本不能与实际的测试相同git clone

能够打开与端口的 TCP 连接并不意味着可以访问侦听该端口的服务。初始连接后的许多阶段都可能失败,例如 TLS 协商、身份验证、授权或应用程序级协议交换。

此外,防火墙限制并不是 TCP 连接失败的唯一可能原因,而 TCP 连接失败也不是防火墙限制的唯一可能影响。因此您的陈述:

如果我无法通过特定端口访问该站点,则意味着我需要先修改防火墙才能继续。

否则,如果我能到达该站点,那么我就能继续我打算做的事情。

都是错误的。这意味着,您不应该想知道为什么您的Test-NetConnection测试没有检测到后来导致 GitHub 访问失败的问题,而应该分析该问题实际上是什么,然后评估提前检测该特定问题是否会带来任何好处。如果答案是肯定的,那么您可以设计一个测试来做到这一点。

实际上,最有效的操作方式通常是不进行任何预先测试就尝试预期操作,并在出现错误时进行处理。提前检查问题大多只有在问题可以自动修复或尝试实际操作失败会带来巨大成本或风险时才有意义。

具体来说,GitHub 操作失败得相当优雅,并且对失败原因有相当清晰的指示,因此我认为先测试连接而不是直接尝试预期操作没有直接的好处。

相关内容