#!/usr/bin/perl # # filter script for "delegated-*nic-latest" # # written by hideishi at MAGI-SYSTEM (c) 2004. # # This script is provided by "AS-IS" licence. # use strict; use vars qw($COUNTRY $SERVICE); $COUNTRY = [ "BR", "CN", "KR", "TW" ]; $SERVICE = [ "ALL" ]; sub match_country { my($in) = shift; foreach my $key (@{$COUNTRY}) { if (lc($key) eq lc($in)) { return 1; } } return 0; } sub sort_ipaddr { my($a) = shift; my($b) = shift; my(@aip) = split(/\./, $a); my(@bip) = split(/\./, $b); if ($#aip != $#bip) { die("$#aip != $#bip\n"); } if ($aip[0] != $bip[0]) { return $aip[0] > $bip[0] ? 1 : -1; } else { if ($#aip > 0) { shift(@aip); shift(@bip); return &sort_ipaddr(join(".", @aip), join(".", @bip)); } else { return 0; } } } my($hash); while () { if (/^\w+\|(\w{2})\|ipv4\|([\d\.]+)\|(\d+)\|\d+\|(allocated|assigned)$/) { my($country) = $1; my($ip) = $2; my($range) = $3; if (&match_country($country)) { my($bit) = 256 * 256 * 256 * 256 - $range; my($mask); unshift(@{$mask}, $bit & 255); unshift(@{$mask}, $bit >> 8 & 255); unshift(@{$mask}, $bit >> 16 & 255); unshift(@{$mask}, $bit >> 24 & 255); push(@{$hash->{$country}}, { "ip" => $ip, "mask" => join(".", @{$mask}) }); } } } foreach my $serv (sort @{$SERVICE}) { foreach my $key (sort @{$COUNTRY}) { print "# $key\n"; foreach my $data (sort { &sort_ipaddr($main::a->{"ip"}, $main::b->{"ip"}) } @{$hash->{$key}}) { print $serv . " : " . $data->{"ip"} . "/" . $data->{"mask"} . " : deny\n"; } } }