最近因公務所需調閱了一些網站的登入資訊,將有問題的 IP 記錄回覆給公司法務單位。
在查詢的過程中發現可以透過 DNS 反查 IP 所在網域,如下例(某廣告信來源 IP):
ada@gentoo ~ $ dig -x 125.250.18.250; <<>> DiG 9.3.2 <<>> -x 125.250.18.250
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 4229
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0;; QUESTION SECTION:
;250.18.250.125.in-addr.arpa. IN PTR;; AUTHORITY SECTION:
250.125.in-addr.arpa. 1199 IN SOA a.dns.kr. inverse.nic.or.kr. 2005110202 21600 900 604800 43200;; Query time: 45 msec
;; SERVER: 168.95.192.1#53(168.95.192.1)
;; WHEN: Mon Mar 20 15:25:16 2006
;; MSG SIZE rcvd: 124
就前述這個例子而言可以知道該 IP 是配給韓國的,但更多時候會發現查到的是國際位址管理單位(如 APNIC):
ada@gentoo ~ $ dig -x 220.174.217.29; <<>> DiG 9.3.2 <<>> -x 220.174.217.29
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 11019
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0;; QUESTION SECTION:
;29.217.174.220.in-addr.arpa. IN PTR;; AUTHORITY SECTION:
220.in-addr.arpa. 172800 IN SOA ns1.apnic.net. read-TXT-record-of-zone-first-dns-admin.apnic.net. 2006031595 7200 1800 604800 172800;; Query time: 247 msec
;; SERVER: 168.95.192.1#53(168.95.192.1)
;; WHEN: Mon Mar 20 15:31:20 2006
;; MSG SIZE rcvd: 134
還好,我們還有
IP to Country 查詢服務 ,前述 IP 檢查的結果是:
IP Address 220.174.217.29 belongs to China.這是怎麼做到的?說起來只是一個查表動作而以,比較討厭的只有這個對應表的維護。但是感謝天,原來網路上早就有這麼一份完整的對照表:
The IP-to-Country Handbook,更令人激賞的是這份對照表可以免費使用(不過有些
授權規定)。
取得這份資料後,開始考慮看能不能放到
SnipSnap 中當成一個 Macro。
考慮點:
- 資料筆數有 63726 筆,而且看起來只會繼續增加。
- 筆數多,佔用空間就大。以一筆記錄最多佔 32 bytes,最少佔 20 bytes 來計算的話約要佔掉 1.2MB 到 2.0MB 之間。
- 佔用空間大,保存方式就變成一個重大問題:
- 全部塞到 SnipSnap 同一個資料庫去:由於 SnipSnap 提供了多種資料儲存方式,因此在更新資料庫時會變的複雜。
- 以文字檔保存,可以提供資料庫更新時的最大彈性:
- 全部載入記憶體:對一個預設的 JRE 環境而言,很可能造成 OutOfMemory 的執行時期錯誤。
- 僅載入特定欄位:降低/免除 OutOfMemory 執行時期錯誤的發生率,但也同時限制了使用方式(例如只顯示國旗或僅英文代碼)。
- 載入 IP 起始位址及檔案中的記錄點:最省記憶體空間的方式,缺點是要對資料庫檔案長時間保持開啟狀態(另套 Java 版的 Blog 系統 blojsom 採用此法)
決定:
- 我想以載入 IP 起始位置、二碼簡稱、三碼簡稱為主。其中二碼簡稱可以作為國旗圖檔檔名,三碼簡稱可以作為文字輸出之用。
- 使用二維陣列儲存。
- 提供輸出國旗圖檔或文字輸出選項。
- 有空再來寫!
沒有留言:
張貼留言