iT邦幫忙

0

如何查詢地區性的所有IP網段 ?

michelle 6 年前21071 瀏覽

比如整個上海或整個香港 IP 段. 要怎查 ?
像一些遊戲公司他們是怎擋海外 IP 或擋大陸 IP 段的 ?
要怎找 ? 感謝

1 個回答

14
逮丸逮丸
iT邦大師 1 級 ‧ 6 年前
最佳解答

簡言之:
利用 GeoIP 來判斷IP從何國家而來。

一般的作法:
通常是利用API來查詢 GeoIP 的資料庫檔案
根據查詢結果來決定要做什麼樣的回應。
以下是用 Ruby 的範例,查詢所會獲得的回應:

<pre class="c" name="code">
$ irb -rubygems -rgeoip
irb(main):001:0> g = GeoIP.new('GeoIP.dat')
=> #<GeoIP:0x9c5a770 @mutex=#<Mutex:0x9c5a754>, @flags=0, @databaseType=1, @record_length=3, @file=#<File:GeoIP.dat>, @databaseSegments=[16776960]>
irb(main):002:0> g.country 'www.sohu.com'
=> ["www.sohu.com", "61.135.133.89", 48, "CN", "CHN", "China", "AS"]
irb(main):003:0> g.country '61.135.133.1'
=> ["61.135.133.1", "61.135.133.1", 48, "CN", "CHN", "China", "AS"]

若要查詢細到什麼城市,則要下載 GeoLite City Binary Format 檔案,
查到的樣子是:

<pre class="c" name="code">
irb(main):001:0> g = GeoIP.new('GeoLiteCity.dat')
=> #<GeoIP:0x9c4d148 @mutex=#<Mutex:0x9c4d0d8>, @flags=0, @databaseType=2, @record_length=3, @file=#<File:GeoLiteCity.dat>, @databaseSegments=[4140876]>
irb(main):002:0> g.country '61.135.133.1'
=> ["61.135.133.1", "61.135.133.1", "CN", "CHN", "China", "AS", "22", "Beijing", "", 39.9289, 116.3883]

就可以依陣列的最後幾個元素來判斷給不給服務。

其他程式環境使用 GeoIP 的 API 可參考:
Linux/Unix 方面:
http://www.maxmind.com/app/linux
Windows 方面:
http://www.maxmind.com/app/windows

IIS 的目錄設定:
要在 Web Server 上設定,
就算是 Apache,也需要 mod_geoip 才跑得起來,
至於 IIS,可能至少要用 asp 或 .Net 才可有此機制,
可參考此範例修改:
http://www.codeproject.com/KB/asp/geoip.aspx
或用 google 找 asp geoip 找相關的經驗分享。

不大建議的做法:
要表列一個地區的IP,不是理想的做法。
光是台灣的IP應可參考:
http://rms.twnic.net.tw/twnic/User/Member/Search/main7.jsp?Order=ORG.ID
大陸的IP列表,應可能在:
http://www.cnnic.cn/index/0D/ 的某頁裡。

希望這些資訊夠您參考。

看更多先前的回應...收起先前的回應...
michelle iT邦新手 4 級 ‧ 6 年前 檢舉

我們那個網站的 server 作業系統是用 Win2003.
twtw 大哥您的意思是我就算設在 IIS 目錄裡. 有可能會爆掉是嗎 ?
=>.<=

逮丸逮丸 iT邦大師 1 級 ‧ 6 年前 檢舉

如果設在IIS目錄裡,假設只允許「台灣的IP」可存取的話,您就要把:
http://rms.twnic.net.tw/twnic/User/Member/Search/main7.jsp?Order=ORG.ID
裡面的「核發IP範圍」加到IIS設定中的允許清單中;
IIS不會爆掉,用人工去手動一筆筆判斷、整理再加進去的過程中會 瘋掉。
且該台灣IP列表是會變動的,要怎麼判斷以前IIS上的設定跟新的列表上的差別?

如果是只允許「公司範圍」的IP,用IIS上的現有設定是沒問題的;
但若以世界上的某地區做可不可存取的判斷,
手動去設定列表,在更新及管理上,相當不便;
若用 GeoIP 做的話,最多只要下載更新那資料庫檔就解決了。

michelle iT邦新手 4 級 ‧ 6 年前 檢舉

謝謝 twtw 大哥. 大概有點概念了.
那假設我要擋上海南京跟無錫的所有 IP 網段好了.
不讓這一些地方的會員或客戶或惡意訪客(駭客或來亂的)上門.
要怎查 ? 還是幫我查寄給我 ~"~ michelle@tacol.com
感恩喔.

逮丸逮丸 iT邦大師 1 級 ‧ 6 年前 檢舉
&lt;pre class="c" name="code">擋上海南京跟無錫的所有 IP 網段

其實這樣擋的意義不大,被擋的人隨便找個proxy就還是能連進來。
若要這三地區的IP網段,就要從
http://geolite.maxmind.com/download/geoip/database/GeoLiteCity\_CSV/GeoLiteCity\_20100101.zip
內容中抓取。
我分別以 Shanghai,Nanjing,Wuxi 來抓取,
所整理出的結果放在:
http://alpha.tagbible.net/upfile/dl?filetoken=1267421ba15e4b7fd759108416fbe91bbc97b957
解開檔案後裡有:

&lt;pre class="c" name="code">  1593 ip.nanjing.txt
  4770 ip.shanghai.txt
   966 ip.wuxi.txt
  7329 total

每一行是:開始IP-結束IP 的樣式,
共有 七千 多行,就是包括這三地區的網段。
怎麼抓出的細節?
主要是該csv檔是32bit的數字,來轉成習慣的IP樣式,
是參考這一文做出來的:
http://en.kioskea.net/faq/945-converting-a-32-bit-integer-into-ip

逮丸逮丸 iT邦大師 1 級 ‧ 6 年前 檢舉

將如何從 GeoIP 抓出所要的地區IP,
詳細的步驟寫在
利用 GeoIP 列出某地區的所有IP網段
一文裡。

我要發表回答

立即登入回答