#!/usr/bin/perl use strict; $ENV{'PATH'} = '/bin:/usr/bin:/usr/local/bin:/sbin:/usr/sbin'; my $APNIC_URI = 'http://ftp.apnic.net/stats/apnic/delegated-apnic-latest'; my @HTACCESS_LIST = ('/home/hoge/public_html/.htaccess','/home/hogehoge/public_html/.htaccess'); my %MASK_BITS = ( '256'=>'24','512'=>'23','1024'=>'22','2048'=>'21','4096'=>'20','8192'=>'19','16384'=>'18','32768'=>'17', '65536'=>'16','131072'=>'15','262144'=>'14','524288'=>'13','1048576'=>'12','2097152'=>'11','4194304'=>'10', '8388608'=>'9','16777216'=>'8','33554432'=>'7','67108864'=>'6','134217728'=>'5','268435456'=>'4', '536870912'=>'3','1073741824'=>'2','2147483648'=>'1' ); if (!open(CMD,"wget $APNIC_URI -O - 2>/dev/null |")) { print "Wget process didn't function.\n"; exit(1); } my @ALLOW_CIDR; while (my $LINE1 = ) { my $CIDR; if ($LINE1 =~ /^apnic\|JP\|ipv4\|([0-9\.]+)\|([0-9]+)\|[0-9]+\|.+/i) { if ($2) { $CIDR = $1 . '/' . $MASK_BITS{$2}; } } if ($CIDR =~ /^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\/[0-9]+$/) { push(@ALLOW_CIDR,$CIDR); } } close(CMD); if ($#ALLOW_CIDR > -1) { foreach my $FILE (@HTACCESS_LIST) { my $FLAG = 0; my $NEW_LINE; if (!open(IN,"<$FILE")) { print "Can't read $FILE.\n"; next; } while (my $LINE2 = ) { $LINE2 =~ s/[\r\n]+//g; if ($FLAG == 0) { $NEW_LINE .= $LINE2 . "\n"; if ($LINE2 =~ /#ALLOW_CIDR_LIST_____#$/) { $FLAG = 1; } } elsif ($FLAG == 1) { foreach my $LINE3 (@ALLOW_CIDR) { $NEW_LINE .= "\t\tAllow from " . $LINE3 . "\n"; } $FLAG = 2; } if ($FLAG == 2) { if ($LINE2 =~ /#_____ALLOW_CIDR_LIST#$/) { $NEW_LINE .= $LINE2 . "\n"; $FLAG = 0; } } } close(IN); if (!open(OUT,">$FILE.tmp")) { print "Can't write $FILE.\n"; next; } seek(OUT,0,0); print OUT $NEW_LINE; eval'truncate(OUT,tell(OUT));'; close(OUT); system("cp $FILE $FILE.old && mv $FILE.tmp $FILE"); } } print "Successful in update of .htaccess file.\n"; exit(0);