#our @ip = qw(10.172.0.0/17); our @ip = qw(10.144.128.0/18 10.144.192.0/19 10.144.224.0/20 10.144.240.0/21 10.144.248.0/22 10.144.252.0/23 10.144.254.0/24 10.144.255.0/25 10.144.255.128/26 10.144.255.192/27 10.144.255.224/28 10.144.255.240/29 10.144.255.248/30 10.144.255.252/31 10.144.255.254/32); print "IPs:".join(",",@ip)."\n"; foreach(@ip) {my $ip=NetAddr::IP->new($_);push(@ip_netaddr,$ip)}; @ip_netaddr=Compact(@ip_netaddr); #alle Netze als NetAddr::IP Objekt anlegen print join(",",@ip_netaddr)."\n"; foreach (@ip_netaddr) {if (my $ip=Net::IP->new($_)) {push(our @ip_netip,$ip)}} #alle Netze auch noch als Net::IP Objekt anlegen print "IP_OBJS:".join(",",@ip_netip)."\n"; foreach (@ip_netip) {our $count=$count+($_->Net::IP::size())}; #"zählen" der IP Adressen aller Netze if ($count eq "32767") { #/17 - eine /32 print "ADDR:".($ip_netaddr[0]->NetAddr::IP::addr())."\n"; my @check_nets = @ip_netaddr; push(@check_nets,($ip_netaddr[0]->NetAddr::IP::addr())/17->NetAddr::IP::broadcast()); #hier würde ich gerne das /18 in ein /17 "verwandeln um mir dessen "Broadcast-Adresse" zu holen (das ist die fehlende /32) if (($ip_netaddr[0]->NetAddr::IP::addr())/17 eq (Compact(@check_nets))) { #wenn die /32 hinzugefügt wurde und der passende Fall vorliegt, müssten jetzt beide Ausdrücke 10.172.0.0/17 sein... print "Found /17 - last /32 Information. Last address will be added. This results in".($ip_netaddr[0]->NetAddr::IP::addr()/17)."\n"; } } else { print "OK\n"; }