use NetAddr::IP; my $ip = new NetAddr::IP '127.0.0.1'; #### use NetAddr::IP; my $loopback = new NetAddr::IP '127.0.0.1', '255.0.0.0'; my $rfc1918 = new NetAddr::IP '10.0.0.0/8'; my $another = new NetAddr::IP '1.2.0.0/255.255.0.0'; my $loopback2 = new NetAddr::IP 'loopback'; #### use NetAddr::IP; my $ip = new NetAddr::IP('10.0.0.0/30'); while ($ip < $ip->broadcast) { print "ip = $ip\n"; $ip ++; } #### ip = 10.0.0.0/30 ip = 10.0.0.1/30 ip = 10.0.0.2/30 #### use NetAddr::IP; my $ip = new NetAddr::IP('10.0.0.0/30'); print join(' ', @$ip), "\n"; #### 10.0.0.1/32 10.0.0.2/32 #### use NetAddr::IP; push @addresses, NetAddr::IP->new($_) for <DATA>; print join(", ", NetAddr::IP::compact(@addresses)), "\n"; __DATA__ 10.0.0.0/18 10.0.64.0/18 10.0.192.0/18 10.0.160.0/19 #### use NetAddr::IP; print "My address space contains the following /24s:\n", join("\n", NetAddr::IP->new('10.0.0.0/22')->split(24)), "\n"; #### use NetAddr::IP; print join(' ', NetAddr::IP->new('10.0.0.0/25')->wildcard()); #### use NetAddr::IP; my $space = new NetAddr::IP->new('10.128.0.0/17'); for my $ip (map { new NetAddr::IP->new($_) } <DATA>) { print $ip, "\n" if $space->contains($ip); } __DATA__ 172.16.1.1 172.16.1.5 172.16.1.11 172.16.1.10 172.16.1.9 172.16.1.3 172.16.1.2 172.16.1.7 172.16.1.4 172.16.1.1 10.128.0.1 10.128.0.12 10.128.0.13 10.128.0.41 10.128.0.17 10.128.0.19 #### use NetAddr::IP; push @space, new NetAddr::IP->new($_) for <DATA>; for my $netblock (NetAddr::IP::compact @space) { for (my $ip = $netblock->first; $ip <= $netblock->last; $ip++) { # Do something with $ip } } __DATA__ 10.0.0.0/16 172.16.0.0/24 #### use NetAddr::IP; push @space, new NetAddr::IP->new($_) for <DATA>; for my $ip (map { $_->hostenum } NetAddr::IP::compact @space) { # Do something with $ip } __DATA__ 10.0.0.0/16 172.16.0.0/24 #### use NetAddr::IP; my $hosts = 0; push @space, new NetAddr::IP->new($_) for <DATA>; $hosts += $_->num for @space; print "You have $hosts\n"; __DATA__ 10.0.0.0/16 172.16.0.0/24