Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5361935
  • 博文数量: 1144
  • 博客积分: 11974
  • 博客等级: 上将
  • 技术积分: 12312
  • 用 户 组: 普通用户
  • 注册时间: 2005-04-13 20:06
文章存档

2017年(2)

2016年(14)

2015年(10)

2014年(28)

2013年(23)

2012年(29)

2011年(53)

2010年(86)

2009年(83)

2008年(43)

2007年(153)

2006年(575)

2005年(45)

分类:

2008-09-21 19:15:50

DNS Verification

This script uses the output from the script on this post and creates a list of what should be the DNS entries and the current entry (between parenthesis).

Both forward and reverse zones are listed. I use it for verify my configuration. On the reverse zone it shows the mask used.


#!/usr/bin/perl

use strict;
use Socket;
use Getopt::Std;

my $domain = 'infra.gvt.net.br';

my @devices;
my @list;

while (<>) {
chop;
if ( /^sysName:(.*)/ ) {
if ($#list > 0) {
my @tmp = @list;
push @devices, \@tmp;
}
@list = ( $1 );
} elsif ( /^isRouter:(.*)/ ) {
$list[1] = $1;
} elsif ( /^managedAddress:(.*)/ ) {
$list[2] = $1;
} elsif ( /^IP:([\d\.]+)\/([\d\.]+)/ ) {
push @{$list[3]}, [ $1, $2 ];
} elsif ( /^NH:([\d\.]+)/ ) {
push @{$list[4]}, $1;
}
}

push @devices, \@list if ($#list > 0);

sub calcNetwork {
my ($ipAddress, $netmask) = @_;
my @ipOct = split(/\./, $ipAddress);
my @maskOct = split(/\./, $netmask);
return join('.', map { int $ipOct[$_] & int $maskOct[$_] } (0..3));
}


my %ipAddresses;
my %sysNames;
my %networks;

for (@devices) {
my ($sysName, $ipForwarding, $managedAddress) = @{$_};
push @{$sysNames{$sysName}}, $managedAddress;
foreach my $ip (@{$_->[3]}) {
push @{$ipAddresses{$ip->[0]}{sysname}}, $sysName;
push @{$ipAddresses{$ip->[0]}{netmask}}, $ip->[1] unless (grep { $ip->[1] } @{$ipAddresses{$ip->[0]}{netmask}});
}
}

foreach my $sysName (keys %sysNames) {
my $addr = gethostbyname($sysName);
$addr = defined $addr ? inet_ntoa($addr) : '';
my ($name) = $sysName =~ /\./ ? $sysName =~ /^(.*?)\..*$/ : ($sysName);
print lc("$name.$domain"), "\t($addr)\t", $sysNames{$sysName}[0], "\n";
}

foreach my $ipAddress (sort keys %ipAddresses) {
my $addr = gethostbyaddr(inet_aton($ipAddress), AF_INET);
my $network = &calcNetwork($ipAddress, $ipAddresses{$ipAddress}{netmask}[0]);
print "$ipAddress\t($addr)\t$network/", $ipAddresses{$ipAddress}{netmask}[0], " ",
join(', ', map { lc "$_.$domain" } map { $_ =~ /\./ ? $_ =~ /^(.*?)\..*$/ : $_ } @{$ipAddresses{$ipAddress}{sysname}}), "\n";
}
阅读(2247) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~