怎麼測試 App 韌性?
我們怎麼測試十一款 App:用 SRTT 看 DNS 與連線國家,必要時再用 Stream 看 API 欄位。
文/周詳
方法寫在開放文化基金會的簡報裡:《數位服務韌性檢測工具(SRTT)by OCF》(g0v Summit 2026.05.24,講者周詳)。工具網站是 srtt.ocf.tw。這次測十一款 App,就是照這份簡報,用 DNS 把連線位置與境外流量畫出來;需要看 API 欄位時,再在 iOS 上用 Stream 拆 HTTPS。
我們每天都在用手機,但不知道它正在連去哪。很多 App 並不只連到台灣——一支手機可能在十秒內跨越多個國家。問題不在「有沒有連網」,而在「連到誰、在哪裡」。
SRTT 是什麼
SRTT 是 Service Resilience Testing Tool 的縮寫,中文叫數位服務韌性檢測工具。簡報的定義是:一套開源的行動裝置網路觀測工具,透過 DNS 協助你看見手機 App 實際連線到哪些國家、服務商與服務。

四件事要先講清楚:
- 觀測方式是 DNS。 看查詢去向,不解密、不攔截內容。
- 部署很輕。 免 Root、免越獄、不安裝 VPN 設定檔。
- 畫面有地圖。 即時地圖、ASN 分析、traceroute 路徑追蹤。
- 開源、不存資料。 可自行架設,不儲存使用者資料。
它不保存 DNS 歷史、不建立使用者識別、不分析 HTTPS 內容。目的不是監控使用者,而是讓使用者理解「誰正在監控自己」。
同一套工具,用途可以很不一樣:一般人用來理解自己手機的流量、看數位主權與隱私;研究者拿來做 App 行為與 SDK 分析;教室裡可以教 DNS 和網路架構;資安團隊則用來做初步流量觀測、盤點第三方服務、看 App 依賴了哪些雲。這次十一款,走的是研究者那條路。
App 出門前會先問 DNS
App 不會直接記住 IP。它會先問 DNS:某個服務在哪?例如 google.com 換成 142.250.77.206,然後才連過去。流程就是:手機 App → DNS 查詢 → 取得 IP → 開始連線。
把手機 DNS 指到 SRTT,等於站在「問路」那一步。能看見問了哪個域名、得到哪個 IP、這個 IP 屬於哪家網路(ASN)、標在哪個國家。信件內容它不拆——那是刻意的:不碰加密通道,才不需要 Root、越獄或 VPN。
即時分析看到的不只是 domain,而是它屬於誰、在哪個國家、什麼服務:域名、ASN(例如 AS15169 Google LLC)、國家、IP,有時還能推測來源 App。境外流量比例會算出來;簡報舉的樣本是 73.7% 的 DNS 查詢流向境外。那不自動等於有問題——雲端、CDN 把節點放在海外很常見。簡報寫得很明白:SRTT 是觀測工具,不是判決工具。
ASN(Autonomous System Number)是每家網路服務商的編號。透過它,看到的不是一串 IP 數字,而是流量實際走進哪家營運商:Google(AS15169,搜尋、廣告、分析)、AWS(AS16509,含 CloudFront、S3)、Apple(AS714,iCloud、推播、更新)、Cloudflare(AS13335,CDN、DNS、DDoS 防護)。這次十一款裡,政府 GSN、中華電信 HiNet、LINE 日本原站、蝦皮新加坡,都是對 ASN 對出來的。
路徑也不只「去哪」,還能「怎麼去」。SRTT 用 HTTPS 的 TCP 443 做 traceroute:每一跳的 IP 與 ASN、國家在哪一跳出境、延遲多長。簡報裡的例子很典型——前幾跳還在台灣電信(AS3462,十幾毫秒),下一跳就到美國 Google(一百四十多毫秒)。島內常見個位數到十幾毫秒;一出台灣,數字會跳。國家跳轉發生在哪一跳,海纜議題才有依據。
測完可以一鍵分享觀測快照:當下的查詢、國家、境外比例、主要 ASN,壓進網址或匯出 JSON。伺服器不留底。用來交給隊友、當稽核留證,或隔天把同一份分析打開再看。
操作就四步
簡報寫的流程,這次就是這樣測的:

- 將手機 DNS 設定到 SRTT DNS。
- 在網站輸入手機 IP,並開始分析。
- 分析過程中,建議先關閉所有 App,再操作要分析的那一款。
- 結束操作後,匯出報告成快照。
快照把資料壓在網址裡做靜態分享,伺服器不會保留。網站上的實際畫面是這樣:

測的時候走完主要功能:啟動、登入、各分頁點一次、觸發核心動作(報案、查病歷、訂票),再閒置一下看背景心跳。這次用的是 iPhone。關掉其他 App,是為了讓列表上的域名盡量只來自眼前這一款。
開始之後,地圖和列表會即時更新:總查詢數、境外比例、不重複網域,以及 Top 網域、國家、服務、ASN。

用 ping 修正國家:小於 15 毫秒視為台灣
SRTT 畫面裡的「國家」,多半來自 IP 註冊地。Anycast、CDN 常常會標成美國:Google、Cloudflare、Akamai 的 IP 註冊國經常是 US,但你在台北連過去,封包其實進了台灣節點。地圖上那條線畫去美國,延遲卻只有五到八毫秒——這就是簡報裡 traceroute 要補的那一層。
這次在簡報方法之上,多做一件校正:ping 小於 15 毫秒,視為台灣。 島內機房、台灣邊緣節點通常落在這個範圍;連到日本常見三十多毫秒,美國則要一百多毫秒。數字對不上註冊國時,以延遲為準。所以報告會寫「連線節點在台灣,營運商仍是海外雲」——門在哪,和廚房在哪,要分開。海纜斷了還能不能用,問的是廚房;SRTT 加上 ping,先把門口標對。
想看 API 內容:iOS 上的 Stream
SRTT 刻意不拆信件。要知道 App 送出什麼欄位——例如健保是不是把就醫紀錄 POST 到台灣主機——必須另外拆開 HTTPS。這次在 iOS 上用 Stream:在手機裝一張側錄憑證,讓加密連線經過分析工具,才能看到方法、路徑、JSON 欄位類型。這是中間人憑證(MITM)。對研究有用,對金融與通訊 App 來說,也正是它們要防的事。
各 App 反應不一樣。行動郵局偵測到 Stream 憑證,跳出 SSL 異常(ES-0103),封鎖登入與儲匯——這是好的資安設計,金融內容就看不到,只能從連線 IP 判斷還在台灣。台鐵、蝦皮、Google 地圖、ChatGPT、台灣Pay 多數做憑證綁定,連線只剩 CONNECT,報告就只記域名和 IP。
LINE 會阻止中間人憑證。 通訊核心解不開,只能回到 SRTT:看它問了哪些域名、IP 落在日本還是台灣 Akamai。能確定的是路往哪,不是訊息內容。
智生活、健保快易通、警政服務相對能解密,才有「健康存摺 POST 到 GSN」「Clarity 連打 27 次 POST」這種欄位層的結論。看得到內容,才寫內容;看不到,就不寫。主軸仍是 SRTT 的 DNS 觀測,Stream 只補「內容」這一層。
SRTT 不是什麼
簡報把邊界寫死,數字才不會被用過頭:
- 不會破解 HTTPS——完全不碰加密通道的內容
- 不是封包攔截器——只觀測 DNS 查詢,不抓取完整封包
- 不等於完整流量分析——App 還有許多其他通訊管道
- 無法看到加密內容——TLS 裡的訊息不在觀測範圍
- 不代表惡意流量判定——出境不等於惡意,由你來解讀
這也是為什麼十一款報告能寫「連到哪」,卻不一定能寫「送出哪幾個欄位」。DNS 已經夠判斷政府 GSN、中華電信、LINE 日本、蝦皮新加坡;Stream 能補上的,僅限沒擋住中間人憑證的 App。
簡報最後一句也是這次想做的:不是監控網路,而是讓網路變得可被理解。
工具在 srtt.ocf.tw。簡報:Google 簡報。十一款測完之後怎麼讀,見海纜斷了,你手機裡的 App 還能用嗎?。