#!/usr/local/bin/perl # Show a list of free IP addresses, within the configured ranges require './bind8-lib.pl'; # Go through all zones to find IPs in use, and networks $conf = &get_config(); @views = &find("view", $conf); foreach $v (@views) { @vz = &find("zone", $v->{'members'}); map { $view{$_} = $v } @vz; push(@zones, @vz); } push(@zones, &find("zone", $conf)); foreach $z (@zones) { $type = &find_value("type", $z->{'members'}); next if ($type ne "master"); $file = &find_value("file", $z->{'members'}); @recs = &read_zone_file($file, $z->{'value'}); foreach $r (@recs) { if ($r->{'type'} eq 'A') { $taken{$r->{'values'}->[0]}++; $net = $r->{'values'}->[0]; $net =~ s/\d+$/0/; if ($net ne "127.0.0.0") { $nets{$net}++; } } elsif ($r->{'type'} eq 'PTR') { $taken{&arpa_to_ip($r->{'values'}->[0])}++; } } } # Use configured networks, if any if ($config{'free_nets'}) { @nets = split(/\s+/, $config{'free_nets'}); } else { @nets = keys %nets; } @nets = sort { $a cmp $b } @nets; # display list of free IPs in the nets &header(); print "\n"; print "
| $ip |