#!/usr/bin/env perl $arg_index = 0; $file_index = 0; foreach (@ARGV) { if ($arg_index == 0) { $chkip = $_; } else { $files[$file_index] = $_; $file_index++; } $arg_index++; } foreach $file (@files){ open(IN, $file); @in_file = ; close(IN); foreach $line (@in_file){ chomp($line); if( ($line =~ /^#.+¥.[0-3][0-9]$/) || ($line =~ /^#.+[A-Z]{2}$/) ){ $last_comment = $line; } $chk_result = &match_ipcidr($line, $chkip); if($chk_result){ print "${last_comment} ¥n"; print "$chkip at ¥e[0;35m$line¥e[0m in file ¥"$file¥"¥n"; }else{ } } } sub match_ipcidr{ # call like &match_ipcidr("192.168.1.0/24", "192.168.1.177"); ($compare_ip_cidr, $check_ip) = @_; if($compare_ip_cidr =~ /¥//){ ($compare_ip, $compare_cidr) = split(/¥//, $compare_ip_cidr); if($compare_cidr > 32){$compare_cidr = 32;} if($compare_cidr < 1){$compare_cidr = 32;} }else{ #print STDERR "CIDR is not compare¥n"; $compare_ip = $compare_ip_cidr; $compare_cidr = 32; } @compare_ip_octets = split(/¥./, $compare_ip); $compare_ipbits = $compare_ip_octets[0] << 24; $compare_ipbits = ($compare_ip_octets[1] << 16) | $compare_ipbits; $compare_ipbits = ($compare_ip_octets[2] << 8) | $compare_ipbits; $compare_ipbits = $compare_ip_octets[3] | $compare_ipbits; @check_ip_octets = split(/¥./, $check_ip); $check_ipbits = $check_ip_octets[0] << 24; $check_ipbits = ($check_ip_octets[1] << 16) | $check_ipbits; $check_ipbits = ($check_ip_octets[2] << 8) | $check_ipbits; $check_ipbits = $check_ip_octets[3] | $check_ipbits; $bit_mask_32 = 2 ** 32 - 1 ; $bit_mask_cidr = $bit_mask_32 << (32 - $compare_cidr) & $bit_mask_32; $compare_ipbits_w_cidr = $compare_ipbits & $bit_mask_cidr; $check_ipbits_w_cidr = $check_ipbits & $bit_mask_cidr; if(0){ print "Compare IP Address¥n"; print "$compare_ip"."/".$compare_cidr."¥n"; print sprintf("%b¥n", $compare_ipbits); #print "32bit mask¥n"; #print sprintf("%b¥n", $bit_mask_32); print "cidr subnet mask¥n"; print sprintf("%b¥n", $bit_mask_cidr); print "IP with Subnet mask¥n"; print sprintf("%b¥n", $compare_ipbits_w_cidr); print "¥n"; print "Check IP Address¥n"; print "$check_ip¥n"; print sprintf("%b¥n", $check_ipbits); #print "32bit mask¥n"; #print sprintf("%b¥n", $bit_mask_32); print "cidr subnet mask¥n"; print sprintf("%b¥n", $bit_mask_cidr); print "IP with Subnet mask¥n"; print sprintf("%b¥n", $check_ipbits_w_cidr); print "¥n"; } if($compare_ip_cidr eq $check_ip){ return 1; }elsif ($compare_ipbits_w_cidr eq $check_ipbits_w_cidr) { return 1; } else { return undef; } }