IP 判斷方式

一般我們知道的 IP 都是長得像:

192.168.0.1

不過對電腦來說,IP 是用 2 進位來表示,一個 IP 由四組數字組成,每組大小為 8 bit (每個 bit 可以代表二進位的 0 或是 1 ),所以上面的 IP 其實是長這樣:

11010000.10101000.00000000.00000001

然後 2 進位就可以和我們的子網路遮罩做運算了,分別可以算出 Network 和 Boadcast 分別是多少 (好,梗鋪完了)。

在網路上大家都是用 IP 表示自己的位置,由於我們會想知道對方是哪來的,所以就有某些人把 IP 分配給哪些國家這檔事情記錄下來再拿這個資訊賣錢,像是 MaxMind 這間公司。這個公司提供的 IP 資料庫格式會像是下面這樣:

"222.250.0.0","222.251.255.255","3740925952","3741057023","TW","Taiwan"

通常這些資料都會被匯入資料庫中,在查詢的時候,我們會轉換成十進位再用 SQL 的 BETWEEN 敘述來查詢(上面資料的第三、四欄位),二進位轉換成十進位的方法如下:

第一組數字 * 2 的 24 次方 + 第二組數字 * 2 的 16 次方 + 第三組數字 * 2 的 8 次方 + 第四組數字 * 2 的 0 次方。

為了方便程式計算,可以速記如下:

sum = 16777216 * ip[0] + 65536 * ip[1] + 256 * ip[2] + ip[3]

寫成程式大概可以像這樣:

用這個方法這樣就可以解出來國家名稱了!

MaxMind – GeoLite Country | Open Source IP Address to Country Database 有提供免費 IP 資料庫下載(但是免費版本的涵蓋率比較低)。

UPDATE 2010/06/17

結果後來發現 IP 轉整數可以用 ip2long() ,所以不需要自己寫這個方法來轉換。

例如

Posted in Programming
One comment on “IP 判斷方式
  1. sc says:

    哈哈
    因為看到的大概都是來自HINET
    所以我比較想知道的是來自台灣哪個城市
    外國的話去這個地方就看得了 http://whatismyipaddress.com/

Leave a Reply

Your email address will not be published.