Jeff Pang wrote:

> Hello,

Hello,

> I have a text file which contains lots of IPs,like:
> 
> 58.253.0.0/16;
> 58.254.0.0/16;
> 58.255.0.0/16;
> 60.0.0.0/16;
> 60.1.0.0/16;
> 60.10.0.0/16;
> 60.16.0.0/16;
> 60.17.0.0/16;
> 60.18.0.0/16;
> 60.19.0.0/16;
> 60.2.0.0/16;
> 60.20.0.0/16;
> 60.21.0.0/16;
> 60.22.0.0/16;
> 60.23.0.0/16;
> 60.3.0.0/16;
> 
> My question is,given an IP,ie 59.32.232.33,how can I know it exists in
> this file or not?
> Is there a module already?thanks.

This may help:

$ perl -le'
use warnings;
use strict;
use Socket;

my $file = <<FILE;
58.253.0.0/16;
58.254.0.0/16;
58.255.0.0/16;
60.0.0.0/16;
60.1.0.0/16;
60.10.0.0/16;
60.16.0.0/16;
60.17.0.0/16;
60.18.0.0/16;
60.19.0.0/16;
60.2.0.0/16;
60.20.0.0/16;
60.21.0.0/16;
60.22.0.0/16;
60.23.0.0/16;
60.3.0.0/16;
FILE

open my $fh, "<", \$file or die "Cannot open $file: $!";

my @ips;
while ( <$fh> ) {
    next unless /^(\d+\.\d+\.\d+\.\d+)\/(\d+)/;
    my $mask = "\0\0\0\0";
    vec( $mask, $_, 1 ) = 1 for 0 .. ( 31 - $2 );
    push @ips, { ip => inet_aton( $1 ), mask => $mask };
    }

for my $ip ( qw/ 59.32.232.33 60.19.232.33 / ) {
    for my $cmp ( @ips ) {
        if ( ( inet_aton( $ip ) & $cmp->{ mask } ) eq $cmp->{ ip } ) {
            print "$ip exists in file."
            }
        }
    }
'
60.19.232.33 exists in file.




John

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/


Reply via email to