為什麼Test-NetConnection顯示可以連接,但無法訪問該網站?

為什麼Test-NetConnection顯示可以連接,但無法訪問該網站?

鑑於網路上存在防火牆限制,我需要確定是否可以透過特定連接埠存取特定站點。

如果我無法在特定連接埠上存取該站點,則表示我需要在繼續之前修改防火牆。否則,如果我可以到達該站點,那麼我就能夠繼續我打算做的事情。

我想知道是否可以Github使用儲存庫的 https URL 來取得儲存庫。 https URL 範例:https://github.com/git-for-windows/git.git.這可以與clone其他工具一起使用。

為了查看是否可以存取Github並克隆該存儲庫,我運行了以下命令:Test-NetConnection -ComputerName github.com -Port 443 |findstr "TcpTestSucceeded"

在系統上,此命令會傳回以下內容,表示我能夠github.com透過連接埠 443 (https) 進行存取。

TcpTestSucceeded : True

然而,我隨後打開網絡瀏覽器並訪問https://github.com,網絡瀏覽器顯示無法建立連接。 https 透過連接埠 443,網域與github.com我在測試中輸入的網域一樣。

我的問題是:

  • 為什麼兩次測試之間會出現這種差異?
  • 如何準確測試是否可以CMD透過PowerShell特定連接埠存取特定網域?

顯然,該Test-NetConnection命令沒有產生準確的結果,因為 Web 瀏覽器無法存取github.com.

答案1

顯然,Test-NetConnection 指令沒有產生準確的結果,因為 Web 瀏覽器無法存取 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 操作失敗得相當優雅,並且對失敗原因有相當清晰的指示,因此我認為首先測試連接而不是直接嘗試預期的操作沒有直接的好處。

相關內容