用GeoIP判定IP的來源位置

其實很久以前就注意到,某些計數器可以很準確的判定IP來源的位置,甚至連所在城市都可以顯示出來
後來才知道是因為有GeoIP這樣的東西
MaxMind - GeoIP | IP Address Location Technology
這是MaxMind開發的東西,有不同平台的API和定期更新的"IP-位置"資料庫
如果要在網站上應用的話,可以找Apache module,perl和php的API

在Apache上面的模組叫"mod_geoip"
さすが,租用的主機空間不可能給我隨便安裝模組,所以先在自己的電腦試...
不過仔細看才發現那檔案是linux上面用的,只有個c檔要自己make install
好吧...只好跳過...不想為了這東西去裝linuxsweat.gif

再來試試perl,它的module是"Geo::IP
這也是要安裝的,所以先在自己的電腦試..
不過不知道是不是activeperl的版本問題,根本就裝不起來...orz
在目前的主機上面雖然可以自己安裝perl module,但是卻限制CPAN上面的東西,還好搜尋了一下就發現這個模組
Apache2::Geo::IP
但是不知道為什麼,安裝到最後出現錯誤:
CODE:
  CPAN.pm: Going to build R/RK/RKOBES/Apache-GeoIP-1.99.tar.gz

Please install either mod_perl 1 or mod_perl 2 first at Makefile.PL line 118.
No 'Makefile' created  RKOBES/Apache-GeoIP-1.99.tar.gz
  /usr/bin/perl Makefile.PL PREFIX=/home/jwintaiw/perl/usr -- NOT OK
Running make install
  Make had some problems, won't install
呃阿...orz
還好仔細看,發現主機裡面有預裝另外一個類似功能的"Geo::IPfree"
它會從ip或主機名尋找之後回傳三個變數的陣列:二文字國碼,國家全名,IP
小試了一下可以動作,不過速度無敵慢!

最後嘗試PHP API
網頁上面有geoip和geoipcity兩種,前者是從ip/主機名尋找之後回傳二文字國碼和國家全名;後者是回傳更詳細的位置資訊,包含國家,程式和經緯度
不過兩者資料庫差很多,geoip需要的資料庫大約1MB附近,但是geocity的資料庫快30MB...|||
這邊照著該網頁上放的範例自己弄了一個測試的程式,有興趣可以試試...
http://snow-sugar.net/lookup.php (會放多久不確定,因為database太大)
同樣的東西也在自己電腦的自架網站動作確認,感覺大概像這樣
geoip-php.JPG

其實最重要的應用不在這裡,而是可以利用辨識來源IP的國家進而讓server作不同的動作,例如台港的IP就自動轉入中文頁面,歐美的IP就自動轉入英文頁面,韓國的IP就block等等...因為IP對應位置的資料庫有持續更新,也讓誤動做的可能減少
trackbackTrackback: http://blog.snow-sugar.net/trackback.php?tbID=892&extra=a777ce
taggedTags: perl php apache geoip htaccess
Comments: 2 |Trackback: 0 | Read: 5233 | Print | Download
add nookmarks Bookmarks
Share to:Google BookmarksYahoo! My WebWindows LiveDiggDel.icio.usfacebookfacebookredditslashdotfurltechnoratiMyShare樂多網路書籤UDN共享書籤HemiDemi貼到funPLivedoor ClipFC2 BookmarkHatena::Bookmark百度搜藏
referers Link from
  以下連結並未逐一檢查,點選前請自行留意右方評價!
32 http://ithelp.ithome.com.tw/question/10048402
17 Yahoo search: 來源ip
13 http://ithelp.ithome.com.tw/question/10048402?tag=...
13 Yahoo search: 尋找ip位置
13 Google search: geo ip 全名
comment 路人 [ 2010/05/07 13:36 | Reply | Edit Delete View ]
mod_perl 也是apache的模組,win32上頭能用但裝起來很麻煩。就便利程度 PHP 樂勝,但效能就... XD

如果只是要擋或redirect等簡單需求,不妨直接用 country ip blocks 清單塞進 htaccess 安定。 :P
>>reply小光 [ Replied on 2010/05/07 18:19 Home | Edit Delete ]
         avatars 就是因為IP清單麻煩才用geoip阿
以前查過光是台灣的IP就落落長...liubt.gif
  • 1 
pannya
Write New Comment
Name:(*) Password:
Website: Email:
Validation:(*) Validation Image [Reload] Option:
Content:(*)