blog.Ring.idv.tw

IP地理位置解析原理

IP地理位置解析原理


上圖是根據我部落格透過「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()」兩函式來轉換

2008-02-15 16:40:12

Leave a Comment

Copyright (C) Ching-Shen Chen. All rights reserved.

::: 搜尋 :::

::: 分類 :::

::: Ads :::

::: 最新文章 :::

::: 最新回應 :::

::: 訂閱 :::

Atom feed
Atom Comment