上一篇"高效率的iptables GEOIP模組"的留言有人問到,如何去合併CIDR?用人工計算是一件非常痛苦的事情,資料一多當然就變的天方夜譚,這麼苦命的事情當然是交給電腦去做囉。
要合併CIDR,Perl提供了非常簡單的方法,程式碼如下:
#!/usr/bin/perl
use Net::CIDR::Lite;
my $cidr = Net::CIDR::Lite->new;
$cidr->add("202.38.175.0/24");
$cidr->add("202.38.174.0/24");
$cidr->add("202.38.173.0/24");
$cidr->add("202.38.172.0/24");
$cidr->add("202.38.171.0/24");
$cidr->add("202.38.170.0/24");
$cidr->add("202.38.169.0/24");
$cidr->add("202.38.168.0/24");
print "$_\n" for $cidr->list;
執行後,會輸出合併後的結果:
202.38.168.0/21
輕鬆寫意阿~

請教朋友:我可以從下載回來的geoip csv檔案提取某個國家的ip,並且刪除其它國家的ip嗎?這樣執行起來效率不是更好嗎?
不好意思,現在才回覆,效率上是沒有差別的,不管是原始或是修改過的geoip模組,在處理國家的部分都是分開處理的,即使你原始的csv檔案包含一堆國家,也不會影響到處理的效率,真正的瓶頸是卡在我文章內所提到的ip網段比對這一塊。