TechMoon 科技月球
WordPress、SEO 與 AI 工具實測指南
TechMoon 科技月球
WordPress、SEO 與 AI 工具實測指南

SmartHostsTool 是一支用測速把 GitHub 等網站的最快 IP 寫進系統 hosts 檔的開源 Windows 工具,主要解中國大陸網路環境下的 DNS 汙染問題。台灣直連 GitHub 就通暢,這個工具的主要場景幾乎用不到;而 hosts 最佳化也有明確邊界,它不等於 VPN,不加密、不換對外 IP。
用 AI 摘要這篇文章:
先給結論:SmartHostsTool 解的是一個很特定的問題,就是 GitHub 這類網站在中國大陸的網路環境下被 DNS 汙染、但 IP 本身還連得通時,要怎麼挑一個最快的 IP 寫進 hosts 檔。對台灣大多數讀者來說,GitHub 直連就通暢,這個工具的主要場景根本用不到。它也不是 VPN 的替代品,這是本文想先拆掉的誤解。
我沒有實際執行這支程式,底下的判斷來自讀它的原始碼(config.py、services.py)、README、LICENSE,以及 GitHub 上的 issues、releases 與 commit 中繼資料。這是認識一個工具的層級,不是效果實測,所以我不會告訴你「它跑起來多快」這種我沒有測過的事,只會把原始碼實際怎麼做、跟 README 哪裡對不上講清楚。
很多人把「改 hosts」跟「翻牆」當成同一件事,其實兩個機制完全沒有關係。hosts 檔是作業系統本機的 DNS 覆寫表,你寫了「185.199.108.153 github.com」,作業系統就跳過對外的 DNS 查詢,直接用這個 IP 去連線。它做的事只有一件:把網域名稱對到一個你指定的 IP。
這代表:如果這個 IP 在你的網路環境連得通(沒有被 IP 層封鎖),你就連上了;如果連不通,改 hosts 一點用也沒有。它不會加密你的流量、不會換你的對外 IP、也繞不過深度封包檢查(DPI)。換句話說,hosts 最佳化只在「DNS 被汙染、但 IP 本身還可達」這個窄條件下有效,SmartHostsTool 做的,就是把這個窄條件的判斷自動化:幫你測多個候選 IP 的延遲,把最快的那個寫進 hosts。
這裡說的 DNS 汙染,是你查 github.com 這個網域名稱時,中間的 DNS 回應被竄改,回給你一個連不到、或被導去別處的 IP,但 GitHub 伺服器真正的 IP 其實是連得通的。改 hosts 等於繞過這個被竄改的查詢,直接指定要用哪個 IP 連線。所以這招有沒有用,完全取決於「IP 本身到底通不通」:通,換個 IP 就能連;不通,改 hosts 也救不回來,那就要換成 VPN 或代理這類會把流量整個繞道的工具。這條界線畫清楚,你才會知道什麼時候該用哪一種。
底下這張表把三種常被搞混的機制拆開,你會看出 hosts 工具的位置其實很邊緣:
| 機制 | 解什麼問題 | 不解什麼 | 加密流量 | 換對外 IP | 要管理員權限 |
|---|---|---|---|---|---|
| 改 hosts(本工具) | DNS 被汙染但 IP 仍可達 | IP 封鎖、DPI、隱藏來源 | 否 | 否 | 是(改系統檔) |
| VPN | 整體流量加密與繞道 | 不會改寫本機 hosts 檔 | 是 | 是 | 視實作而定 |
| 代理(HTTP/SOCKS) | 指定應用程式的流量繞道 | 不走的應用程式不受影響 | 是(取決於協定) | 是 | 通常不用 |
從 config.py 和 services.py 看,流程大致是三件事:取得候選 IP、並行測速、把結果寫進系統 hosts 檔的專屬區塊。候選 IP 有兩個來源,差很多。
第一個來源是社群維護的遠端 hosts 清單。config.py 列了 7 個網址,包括 tinsfox、GitHub520(521xueweihan)、ineo6 等社群專案,這些專案長期追蹤「GitHub 哪些 IP 在中國大陸網路環境還連得通」並整理成 hosts 格式。但 config.py 的註解寫得很明白:「遠端 Hosts 功能目前僅針對 GitHub」,意思是這條一鍵取清單的快速路,只對 github.com 這個預設網域生效,蓋不到你自己加的其他網站。
這裡有個容易被忽略的事實:這支工具的 GitHub 加速能力,其實是架在那些社群專案之上。tinsfox 與 GitHub520 這些上游清單才是會每天更新的活水源頭,工具本身只是個取清單、測速、寫入的客戶端。萬一哪天上游停止維護,工具的一鍵功能就會跟著失效,這是它的單點依賴。
第二個來源是你自己輸入別的網域名稱(例如 google.com),程式用本機的 socket DNS 解析出所有 A 紀錄當候選,再由 UI 層開一個執行緒池並行測速(執行緒數上限 60,實際數量視候選 IP 多寡而定)。測的是 TCP 連線延遲,TCP 不通就退回 ICMP ping,測完按延遲排序。你按一鍵,程式就把每個網域延遲最低的 IP 寫進 hosts。
寫入是用 # === SmartHostsTool Start === 到 # === SmartHostsTool End === 的標記區塊管理,只動這一段,不會影響你手動寫的其他 hosts 設定,寫入前還會自動備份原檔。這個設計本身是合理的:UI 不直接碰系統檔,交給 hosts_file.py 統一處理;services.py 不依賴任何 UI 框架,可以獨立測試。我讀到的程式結構是乾淨的。

config.py 還開了兩個進階指標:measure_jitter 與 calculate_stability,也就是除了延遲,還會量同一個 IP 多次測速的抖動(jitter)與穩定度(stability),結果列表會把這幾欄一起顯示出來。這兩個數字其實比單次延遲更值得看,因為一個偶爾很快、偶爾很慢的 IP,平均延遲可能漂亮,實際用起來卻會卡。不過它們一樣只是連線層的訊號,量的是這個 IP 到不到了不了、穩不穩,量不出你從 GitHub 拉一個 repo 下來的實際吞吐。

讀原始碼的時候,我發現 README 有幾個地方跟程式實際的行為不一致。這幾個落差會直接影響你想驗證或重現它的測試,值得逐項指出:
strict=False、verify_hostname=False,意思是 TCP 通了就保留這個 IP,TLS 握手失敗也不會把它淘汰。README 把「TLS/SNI 驗證」當亮點,但預設行為不嚴格,想要嚴格驗證得自己去設定裡打開 strict。把這幾點挑出來的重點是:README 是行銷與文件混合體,當它跟原始碼對不上時,以原始碼為準。這也是讀原始碼比讀 README 更能認識一支工具的原因。
services.py 裡找不到任何 analytics、telemetry、Sentry、PostHog、UMeng 之類的回報端點。程式對外發出的請求只有三類:抓 config.py 列的那 7 個遠端 hosts 源、用 socket 做 DNS 解析、對目標 IP 做 TCP 與 TLS 與 ICMP 探測。requirements.txt 的依賴也乾淨,只有 ttkbootstrap、requests、Pillow、pystray、platformdirs,沒有夾帶任何遙測 SDK。
對在意隱私的讀者,這是正向訊號:工具確實只做它說的事,沒有背景偷偷回報。它改的是本機的 hosts 檔,資料不落任何外部伺服器。在一堆同類工具會夾帶統計回呼的時代,這點值得記下。
先講台灣讀者最需要的答案:如果你人在台灣、用中華電信之類的主流 ISP、純粹想加速 GitHub,這工具大概用不到。台灣直連 GitHub 一般就通暢,不存在它主要對付的那種 DNS 汙染。我沒有實測數字佐證,這是編輯對台灣網路環境的一般觀察,標為推論,你可以在自己的網路上輕易驗證。
它真正能幫到的人,是身處中國大陸網路環境、或會跨境切換網路的開發者。例如在對岸工作、出差、返鄉,遇到 GitHub 偶爾連不穩,又不想為了一個網站就常駐 VPN,這種情境下測速選 IP 寫 hosts 是合理的小工具。這和 isChinaUser 這類地區偵測工具是同一個網路語境下的不同需求:一個偵測你身在什麼網路環境,一個在你確實身處那個環境時幫你把 DNS 指到可用的 IP。
如果你要的是把對外連線整個加密、換 IP 出去,那要找的是 穿隧工具或代理服務,不是 hosts 工具。如果你想合併多條網路的下載頻寬,那也是完全不同的問題,可以看 HypoMux 那類頻寬聚合工具。把這幾種需求分清楚,才不會裝錯工具。
大多數不需要這工具的人,是栽在自己根本沒有 DNS 汙染、卻以為有。你可以先開終端機,用 nslookup github.com(Windows、macOS 都內建)查一下,看看解析出來的 IP 是不是 GitHub 官方的 CDN 網段(185.199.108.x 到 111.x 這段);再 ping github.com 看延遲多少、封包到不到。如果解析出來的是正常的 CDN IP、延遲也低(台灣通常在個位數到幾十毫秒),你根本不需要改 hosts,裝了也不會有感覺。
反過來說,如果你看到解析出來的是 10.x 或 127.x 這類私有網段、或是某個跟 GitHub 毫無關係的電信業者在用的大陸網段,那大概率就是 DNS 被改寫了;如果直接 ping 不通、或連得上卻被導到一個奇怪的頁面,那才是這類工具派得上用場的情境。先做這一步確認,比直接裝工具更能幫你判斷問題出在哪。
判斷標準很簡單:看見正常的 GitHub IP、連線也通,就跳過這個工具;看見解析被導到奇怪的 IP、或根本連不到,再來考慮。把這個判斷邏輯學起來,比決定裝不裝 SmartHostsTool 更值得,因為同一套邏輯也適用於任何 hosts 工具,換一支工具你還是會需要先確認這件事。
SmartHostsTool 採 MIT 授權、機制清楚、沒有遙測,是一支做對了一件事(把 DNS 汙染下的 IP 測速選優自動化)的小工具,只是這件事主要解的是另一個網路環境的問題。看清那條機制邊界,你會知道自己到底需不需要它,也能在未來看到任何一款 hosts 工具時,立刻判斷它能解你的問題、還是只是看起來像能解。