上圖是根據我部落格透過「whos.amung.us」所記錄的一些參觀者的來源分佈~ 從圖中可以知道參觀者來自於各個不同的國家~
還有像是「用Zend_Http做一個IP地理位址查詢」這樣諸如此類的應用~ 技術上是如何達成的呢?
我們可以透過程式來取得Client's IP,但如何能知道此IP是隸屬於哪個國家呢?
這時就需要透過IP<->Country的對應表來實現~
找了一下~ 發現有兩個好的資源可以下載這類的對應表:
.ip2nation
.The IP-to-Country Handbook
這裡我拿「The IP-to-Country Handbook」來解析一下:
IP-to-Country解析
首先請先下載「latest IP-to-Country Database」這一份對應表~
它所呈現的格式如下所示:
"0033996344","0033996351","GB","GBR","UNITED KINGDOM"
"0050331648","0083886079","US","USA","UNITED STATES"
"0094585424","0094585439","SE","SWE","SWEDEN"
...
欄位與欄位之間用「,」來隔開~ 它們依序分別為:IP位址起始,IP位址結束,2字元國碼,3字元國碼,國家名稱
這裡它將用「.」區隔的IP位址改成用長整數來表示~
也就是說~ 我們必須將IP位址先轉換成長整數,然後比較IP位址起始,IP位址結束的範圍即可得出結果~
轉換公式:
IP Number = A x (256*256*256) + B x (256*256) + C x 256 + D
舉個例子:
IP位址:64.233.189.99
轉換:
X = 64 x (256*256*256) + 233 x (256*256) + 189 x 256 + 99
X = 64 x 16777216 + 233 x 65536 + 189 x 256 + 99
X = 1089060195
所以從對應表找出「1089060195」介於IP位址起始值及IP位址結束值即可得出解答!!
P.S. PHP程式可以善加利用「ip2long()」、「long2ip()」兩函式來轉換