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

IP9 是免註冊就能呼叫的 IP 歸屬地查詢 API,一支 curl 就回傳國家、城市與電信商。本文實測它的回應欄位與錯誤行為,並拆解三個接入前該知道的資料邊界:海外 IP 只有國家級解析、經緯度回傳國土中心,以及台灣 IP 的 country 欄歸類。
用 AI 摘要這篇文章:
在終端機貼上 curl ip9.com.cn 按下 Enter,一秒內會收到一段 JSON:這個 IP 位在台北、電信商是中嘉數位、經緯度 121.57 與 25.04 都一併回來,全程不用註冊帳號、不用申請 API 金鑰。這是 IP9 給人的第一印象,也是它最實在的部分:對臨時要查 IP 位置的人來說,入手成本趨近於零。
不過同一批查詢裡,有幾個結果會讓人愣一下。拿 Google 公共 DNS 的 8.8.8.8 去查,城市欄位是空的,回傳的經緯度落在美國本土的地理中心;Cloudflare 的 1.1.1.1 被標成澳洲;台灣 IP 的 country 欄回「中國」、國家代碼回 cn。這些不是服務故障,是 IP 地理資料庫本身的邊界,也正好是把它接進專案之前最該看清的部分。
我在 2026 年 9 月 14 日用 curl 實際跑了八組查詢,從本機與台灣的 IP 一路查到海外的知名節點,也讀完官網的定價與條款頁。
IP9 的正式端點只有一個:https://ip9.com.cn/get。不帶參數就查發出請求的這台機器,加上 ?ip=8.8.8.8 就查指定位置,懶一點直接 curl ip9.com.cn 也通。下面是查本機 IP 的實際回應,欄位值原文為簡體中文,這裡轉成繁體對照:
{
"ret": 200,
"data": {
"ip": "182.234.195.157",
"country": "中國",
"country_code": "cn",
"prov": "台灣",
"city": "台北",
"city_code": "taipei",
"city_short_code": "tb",
"area": "",
"post_code": "",
"area_code": "02",
"isp": "中嘉數位",
"lng": "121.57",
"lat": "25.04",
"long_ip": 3068838813,
"big_area": "港澳台"
},
"qt": 0.001
}
免費版拿得到的欄位大致分兩類。基礎欄位有國家與國家代碼、省份、城市、城市代碼、郵遞區號、電話區碼、電信商、經緯度、大區分類;回應裡另外有三個欄位在免費版永遠是空的,官方文件標明屬於 VIP:區縣(area)、IP 類型(家用、企業專線或機房)、AS 號。
| 欄位 | 免費版 | 說明 |
|---|---|---|
| prov、city、isp | 有 | 省份、城市、電信商,中國大陸 IP 最完整 |
| post_code、area_code | 部分 | 郵遞區號與電話區碼,看地區填不填 |
| lng、lat | 有 | 海外 IP 回的是國土中心,不是實際位置 |
| area、ip_type、ip_asn | 空 | VIP 欄位,區縣與 IP 型態 |
qt 是站方自己記錄的查詢耗時,八組實測都回 0.001 秒,這是伺服器端的處理時間,不含你到它機房之間的往返延遲。
整合時有兩個細節會踩到。輸入不合法的 IP(例如 999.999.999.999)會收到 {"data":[],"ret":400},實測 HTTP 狀態碼同樣回 400,兩層一致,程式裡認 ret 欄位最省事;另外這個端點只接受 GET,用 HEAD 探測會得到 404,寫健康檢查時別用錯動詞。IPv6 位址查得到結果,但 long_ip 欄會回 0,這個欄位是 32 位元整數,裝不下 IPv6,當主鍵用會撞值。
還有一件對台灣開發者很實際的事:回應值是簡體中文。資料庫回「中國」「美國」「中華電信」這類值時用的都是簡體字,直接顯示在介面上前得先轉繁,OpenCC 一行就能處理,但漏掉這步的產品不少。
官方在首頁放了 Java、Python、Go、PHP、Swift、Rust 等九種語言的對接範例,外部 API 文件則放在 Apifox 平台上,串接本身沒什麼門檻。

同一支 API,換成海外 IP 之後解析度立刻不一樣。這是查 8.8.8.8 的實際回應(欄位值同樣轉為繁體):
{
"ret": 200,
"data": {
"ip": "8.8.8.8",
"country": "美國",
"country_code": "us",
"prov": "",
"city": "",
"city_code": "",
"city_short_code": "",
"area": "",
"post_code": "",
"area_code": "",
"isp": "Google Cloud",
"lng": "-97.82",
"lat": "37.75",
"long_ip": 134744072,
"big_area": ""
},
"qt": 0.001
}
省份和城市都是空的,經緯度 -97.82、37.75 這個位置在美國堪薩斯一帶,是美國本土的地理中心點,並不是 8.8.8.8 真正的部署位置。這是 IP 地理資料庫的通病:一段 IP 查得到城市,靠的是對當地網路的實測探測;探測涵蓋不到的地方,就只剩 IP 註冊資料能看,而各區域的網路註冊機構(例如亞太的 APNIC、美洲的 ARIN)公開的資料最細只到國家與持有機構。所以同一個資料庫裡,中國大陸的 IP 有城市層級,海外 IP 只有國家層級,不是品質忽好忽壞,而是兩種資料來源本來就不同粗細。
IP9 官方說它的資料靠自有網路監測點輔助測量、持續迭代更新,這句話對照實測是成立的:探測範圍以中國大陸為主,海外就回到註冊資料那一層。
1.1.1.1 的結果把這件事演示得更完整。它被歸為澳洲,因為這段 IP 向 APNIC 註冊,註冊地在澳洲,資料庫就照著登記地回。想多認識這組很常被拿來當公共 DNS 服務的 1.1.1.1,可以參考先前的介紹;這裡的重點是,anycast 這類全球散布的 IP,任何地理位置服務都只能給你一個帳面上的登記地址。
這個邊界對兩種人影響最大。想把查詢結果畫上地圖的,海外 IP 會全部疊在國土中心一個點,視覺化直接出錯;需要海外城市級解析的,這個 API 免費版給不了,官方對國際區域的說法是覆蓋 200 多個國家地區,講的是國家級覆蓋。查 Cloudflare 的邊緣節點 IP 時還會看到 ISP 欄標成 Cloudflare/CDN,官方說明是 CDN 廠商常混用家用 IP 當邊緣節點,這類 IP 才被歸為 ISP 類,做流量分析時把它當正常現象就好。
台灣 IP 在這個資料庫裡同時掛著三個不同層次的標記。實測本機 IP 與中華電信的 168.95.1.1,結果一致:prov 回「台灣」、city 回「台北」、isp 回電信商名稱,城市層級解析得到;但 country 回「中國」、country_code 回 cn,另外有一個 big_area 欄回「港澳台」。官方常見問題頁附的國碼對照表明列台灣、香港、澳門都對應 cn,這是站方資料庫的歸類方式,寫在文件裡、有跡可查。
欄位完整度可以跟中國大陸 IP 對照著看。查官方範例的 58.30.0.0(北京),郵遞區號 100000、電話區碼 010、大區「華北」全部有值;換成台北的 IP,電話區碼 02 有值,郵遞區號是空的。同一張表裡台灣資料的欄位填得比較少,這與前面說的探測範圍落差是同一件事。
對開發者的實際影響只有一條:依 country_code 做地區分流的邏輯,會把台灣使用者歸進 cn。如果產品慣例是看 country 欄決定語系或內容,這裡就會分錯組。做法是改用 prov 或 big_area 判斷,台灣流量在這兩個欄位的值是穩定的。這是從兩組實測推出來的規律,正式上線前建議拿自己的真實流量抽樣驗一次,特別是台灣與海外佔比高的服務。
文件範例裡 58.30.0.0 的電信商寫中國移動,實測回的是國研科技/歌華有線,這類資料本來就會隨時間漂移,把單次查詢結果當恆真寫死在程式裡,遲早會出狀況。
免費版的頻率上限是每個 IP 每分鐘 60 次查詢,這是官方規範。一般網站後端更該做的是加上快取:登入頁想顯示來源地、留言表單想過濾垃圾流量,同一個 IP 短時間內重複查詢的結果快取起來,60 次的額度對絕大多數網站都用不完。
查詢失敗時的行為也要先想好。免費版沒有 SLA,服務中斷或額度被擋時,來源地顯示這種裝飾性功能應該靜默帶過,擋垃圾流量這種安全功能則要設計成查不到就保守處理,兩種用途的失敗策略不同,接線時分開寫。
準確率的數字值得看仔細。官方在常見問題頁自揭:中國區域城市級準確率 99.2%、電信商 99.4%,區縣級只有 41.4%。這些是站方自己宣稱的數字,但區縣那個 41.4% 是官方自己寫出來的,而且區縣欄位本來就排在 VIP 欄位裡,免費版拿到的區縣永遠是空的。想定位到區縣級的人,免費版直接排除。
行動網路是另一個官方承認的誤差源。手機基地台分配的 IP 在城市甚至省內動態輪換,站方建議對行動用戶改用 IPv6 再查一次,準確率會提高。做以行動流量為主的產品,查詢端要保留 IPv6 的路徑,這件事在設計階段就要排進去。
超過免費額度或有穩定性需求時,官方的升級路徑分三層。VIP 版按次計費,最低 0.05 元人民幣一千次查詢,頻率上限放寬到每分鐘 180,000 次,SLA 99.95%,機房線路從社區贊助升級到阿里雲 BGP,並解鎖區縣、IP 類型、AS 號三個欄位;再往上是次數不限的方案;最頂層是私有化部署,把整套服務搬進客戶自己的機房,線路標示為客戶私有。後兩種在頁面上未公開標價,付費方案掛的都是每週七天、每天八小時的工作時間支援,急著上線的專案要先把對接節奏問清楚。站方對免費版的定位也寫得很直白:個人網站、開發測試、不保證 SLA,這條線是它自己畫的。

這是伺服器端的 API,每次查詢,目標 IP 加上發出請求的 IP 都會送到站方的基礎設施,這是所有線上 IP 查詢服務的通則,不是 IP9 特有的問題。差別在於送到誰那裡。IP9 網域掛的是河南省的 ICP 備案(豫ICP備2022012803號),服務條款寫明適用中華人民共和國法律,隱私政策是 2024 年 12 月生效的個資蒐集條款,開通需要帳號的付費服務時要透過境內手機號碼註冊並實名認證。免費查詢本身不用註冊,但隱私政策載明適用於網站所有服務,日誌條款也寫明會自動收集 IP 位址、查詢內容、電信商與存取時間等使用日誌;保存期限只給了達成目的所需期間的原則,查詢日誌實際留多久沒有具體數字。
規模可以從一個數字看出來:官網首頁有個即時計數器,實測當天上午顯示當日請求已超過 1,288 萬次,兩次載入頁面之間還在穩定增加。它不是殭屍服務,背後有真實的用量在跑。對 side project 與個人網站,這些背景資訊大概無感;對資料流向有合規考慮的正式產品,這條信任邊界要在接入前想清楚,想讓資料留在自己掌控範圍,自建一層代理或考慮能把資料留在自己帳號裡的 API 服務都是替代路線。
什麼樣的專案適合直接接?個人網站、side project、開發期的原型,以及以中國大陸訪客為主、需要城市與電信商層級查詢的服務。這些情境吃得到它最強的部分:免註冊、回應快、中國大陸 IP 解析到城市級,接線十分鐘內完成。台灣的網站要記得兩件事:分流邏輯改用 prov 或 big_area,顯示前把簡體值轉繁。isp 欄對台灣流量也有值,實測連中嘉數位這類有線電視寬頻上網的電信商都認得出來,想做電信商層級的流量統計,這個欄位比城市欄更實用。
暫時不適合的有三種。需要海外城市級解析的,它免費版只有國家級;需要 SLA 保證的正式服務,免費版明確不保證,要嘛升級 VIP 要嘛另找方案;查詢內容敏感、不願意送到境外基礎設施的,一開始就別考慮線上查詢服務。想順便比價網域資訊查詢工具的人,可以參考先前的 Next WHOIS 介紹,IP 位置查詢與網域註冊查詢是兩回事,混用會問錯問題。
接入前的最後一個動作:拿自己服務的真實流量抽 20 筆查一遍,看台灣與海外的解析結果長什麼樣。五分鐘的成本,比上線後才發現 country 欄的歸類與預期不同便宜得多。