台灣的 IP 網段資料庫

最近需要找台灣的網段資料,google 了好久,都找不到我要的格式(我要的是用 CIDR notation 表示的)。後來就從 http://rms.twnic.net.tw/twnic/User/Member/Search/main7.jsp?Order=inet_aton%28Startip%29 透過 grep 和 vim 轉換得到我要的格式。

剛開始我找到了 http://ipinfodb.com/ip_database.php ,他是 CSV 格式,很好轉換,我先用 grep 把含有 TW 的行濾出來,再用 OpenOffice 把其他兩欄的資料刪掉,就得到我要的表了。

可是後來發現,這張表不太準。於是我又踏上了搜尋之路。其實我很早就找到 TWNIC 的資料(http://rms.twnic.net.tw/twnic/User/Member/Search/main7.jsp?Order=inet_aton%28Startip%29)的資料,只是因為他的格式實在太難轉換(其實後來發現不難,只是我懶的轉),我一直找其他的資料。

繞了一大圈之後,還是決定用 TWNIC 的資料,因為它是管理台灣網段的官方機構,所以會比較準。

我把網頁的原始檔抓下來,存成 main7.jsp  。然後用 grep 把所有含有 IP Range 的行濾出來,並且導到檔案:

grep '[[:digit:]]\{1,3\}\.[[:digit:]]\{1,3\}\.[[:digit:]]\{1,3\}\.[[:digit:]]\{1,3\}' main7.jsp >tw-new.csv

這大概是我第一次真正感受到 regex (正規表示法)有多強大,我花了大約一個小時摸索要怎麼用 regex ,還有 grep 的用法。起先我一直沒把 regex 加上單引號,後來是看了鳥哥的網站才知道的(manpage 有時候不會寫這種東西)。其實這個 regex 應該還可以更簡潔的,只是… 我太懶了。[:digit:] 代表一個數字(用 [0-9] 有時會有編碼的問題),{1,3} 代表前一個字元重複至少一次,最多三次。\. 則代表小數點。如此一來就可以把 IP 濾出來了。

接下來其實就很簡單了,用 vim 尋找與取代字串,我先去除 </div></td>:

:%s/<\/div><\/td>//g

然後是 ‘ = ‘ (注意等號兩旁各有一個空白!):

:%s/ = /,/g

其實用 gedit 的尋找與取代功能應該會更快,因為不用背 vim 指令,但是我想多熟悉 vim 。完成之後文件應該會變成這種格式:

121.50.144.0,121.50.151.255 ….etc

接下來問題來了,要怎麼轉成 CIDR notation 呢?

我找到這個: http://ip2cidr.com/bulk-ip-to-cidr-converter.php

直接把剛剛的結果貼上去就行了。然後把轉換結果儲存起來,就大功告成囉!

我把結果提供給大家:http://www.cnmc.tw/~pellaeon/public/tw-new-cidr.csv

2 thoughts on “台灣的 IP 網段資料庫

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 變更 )

Twitter picture

You are commenting using your Twitter account. Log Out / 變更 )

Facebook照片

You are commenting using your Facebook account. Log Out / 變更 )

Google+ photo

You are commenting using your Google+ account. Log Out / 變更 )

連結到 %s