跳去主要內容
🛠️ 得閒搞兩嘢
返上一頁

🌐 網絡唔通先別跑 Speedtest:用 204 URL + curl 快速定位問題

更新日期:

🌐 網絡唔通先別跑 Speedtest:用 204 URL + curl 快速定位問題

平時搞 VPS、Proxy、Router,見到「上唔到網」四個字,其實資訊量接近零 😵。

究竟係:

如果一開始就跑 Speedtest,最多只係知道「快定慢」;但排錯真正需要嘅係逐層拆 🧩。

所以我而家更常用一啲本身就為 Connectivity Check 而設嘅細 Endpoint,再配 curl 去睇 Status、IP Family 同 Timing。

🧰 我會先留呢四條

SystemEndpoint正常預期
Google / Chromiumhttp://connectivitycheck.gstatic.com/generate_204HTTP 204
Microsoft NCSIhttp://www.msftconnecttest.com/connecttest.txtHTTP 200 + 固定文字
Applehttp://captive.apple.comHTTP 200 / Captive Portal Check
Firefoxhttp://detectportal.firefox.com/success.txtHTTP 200 + success

呢啲 URL 唔係用嚟測 Bandwidth,而係用嚟回答一個簡單問題:Client 可唔可以經預期路徑正常去到 Internet。

💡 點解 204 特別好用?

HTTP 204 No Content 冇 Body,所以做 Probe 幾乾淨。

理想流程係:

DNS Resolve

TCP Connect

HTTP Request

204 No Content

如果本身應該收 204,結果返咗:

302 Redirect

或者一頁:

Login to Wi-Fi

咁 Captive Portal 嫌疑就好高 🚧。

🔎 Google / Chromium:新 Script 用 connectivitycheck.gstatic.com

以前好多清單都係:

http://www.gstatic.com/generate_204

Chromium 喺 2025 年已經將預設 Captive Portal Detection Origin 轉去:

http://connectivitycheck.gstatic.com/generate_204

新 Host 專門畀 Connectivity Check 用,所以我而家新寫 Script 會直接用呢條。

只睇 Status Code:

curl -sS -o /dev/null -w '%{http_code}\n' \
  http://connectivitycheck.gstatic.com/generate_204

正常:

204

想睇完整 Header:

curl -I http://connectivitycheck.gstatic.com/generate_204

🪟 Microsoft NCSI:唔係 204,而係固定內容

Windows NCSI 用:

http://www.msftconnecttest.com/connecttest.txt

可以直接:

curl -fsS http://www.msftconnecttest.com/connecttest.txt

正常會見到預期嘅 Microsoft Connect Test 文字。

Windows Network Icon 顯示有冇 Internet,唔係單靠呢一條 HTTP Probe;NCSI 仲會配合其他檢測。所以如果 Browser 明明上到網,但 Windows 仲顯示 No Internet,唔好只係不停 Refresh 呢個 URL 😂。

🍎 Apple:captive.apple.com 最適合做咩?

Apple 官方 Network Host 文件仍然列出:

captive.apple.com

用途係 Internet Connectivity Validation / Captive Portal。

簡單試:

curl -I http://captive.apple.com

如果酒店、機場 Wi-Fi 登入頁唔正常彈出,呢個 Domain 值得一齊查。

不過我唔會將 Apple 呢類系統 Probe 當成自己 Production Service 嘅長期 SLA Monitor。佢係第三方 Endpoint,唔係為你嘅監控系統提供保證 ⚠️。

🦊 Firefox:success.txt 幾適合手動測

Firefox 有一條非常直觀:

http://detectportal.firefox.com/success.txt

直接:

curl -fsS http://detectportal.firefox.com/success.txt

正常 Body:

success

做臨時 Script 時,呢種固定 Body 其實幾舒服 ✅。

🔐 排錯時,我會先分 HTTP 同 HTTPS

HTTP:

curl -v http://connectivitycheck.gstatic.com/generate_204

主要可以睇:

DNS
TCP 80
HTTP
Redirect / Captive Portal

HTTPS:

curl -v https://connectivitycheck.gstatic.com/generate_204

再多咗:

TCP 443
TLS Handshake
Certificate Validation
HTTPS Proxy / MITM

所以如果 HTTP 正常、HTTPS Timeout,排錯範圍已經可以由「成條網絡」縮到 443、TLS、Proxy 呢一層 🎯。

4️⃣ / 6️⃣ IPv4 / IPv6 一定要識得拆開

Dual-stack 最麻煩嘅情況之一,就係 IPv4 正常、IPv6 半死不活。

IPv4:

curl -4 -sS -o /dev/null -w '%{http_code}\n' \
  http://connectivitycheck.gstatic.com/generate_204

IPv6:

curl -6 -sS -o /dev/null -w '%{http_code}\n' \
  http://connectivitycheck.gstatic.com/generate_204

如果得到:

IPv4 = 204
IPv6 = timeout

已經比「個網站開得好慢」有用得多。

再睇 DNS Record:

dig A connectivitycheck.gstatic.com
dig AAAA connectivitycheck.gstatic.com

dig 都可以:

getent ahosts connectivitycheck.gstatic.com

🔀 Proxy 最好做 Direct 對照

例如本機 HTTP Proxy 喺 127.0.0.1:7890

curl -x http://127.0.0.1:7890 \
  -sS -o /dev/null -w '%{http_code}\n' \
  http://connectivitycheck.gstatic.com/generate_204

再試 Direct:

curl --noproxy '*' \
  -sS -o /dev/null -w '%{http_code}\n' \
  http://connectivitycheck.gstatic.com/generate_204

結果如果係:

Direct = 204
Proxy = timeout

咁我就唔會繼續亂改 DNS,而係直接查:

排錯最重要就係每次測試都可以排除一批可能性。唔好一出事就「重啟晒先算」🤣。

⏱️ 一條 curl 睇埋慢喺邊

如果唔係完全斷,而係「好似通,但好慢」,可以睇 Timing:

curl -sS -o /dev/null \
  -w 'code=%{http_code} dns=%{time_namelookup}s connect=%{time_connect}s tls=%{time_appconnect}s total=%{time_total}s\n' \
  https://connectivitycheck.gstatic.com/generate_204

一次就有:

例如 DNS 0.01s、Connect 2s,同 DNS 2s、Connect 0.05s,方向完全唔同。

🚨 唔好將第三方 Probe 當 Ping 轟

呢啲 Endpoint 好用,但唔代表應該:

長期 Monitoring 最好用自己控制嘅 Endpoint;真係要用第三方,至少降低 Frequency 同用多 Provider 交叉判斷。

🧭 最後我會點排

遇到「網絡唔通」,我而家大概會照呢個順序:

DNS

HTTP 204 / 固定 Body

HTTPS / TLS

IPv4 vs IPv6

Direct vs Proxy

Timing

做完呢幾步,通常已經可以將問題由一句模糊嘅「上唔到網」,縮到某一層再繼續查 ✅。

Speedtest 當然有用,但佢應該係你想知道 Bandwidth 時先跑,而唔係每次 Network 出事嘅第一把鎚 🔨。

📚 參考資料


Share 哩篇文:

上一篇文
💾 1GB VPS 唔想突然 OOM:Debian / Ubuntu Swap File 實用設定