Skip to content

Instantly share code, notes, and snippets.

@masasuzu
Last active March 30, 2017 01:42
Show Gist options
  • Save masasuzu/9e7b121aa61dd2a3ddff853d46a245a1 to your computer and use it in GitHub Desktop.
Save masasuzu/9e7b121aa61dd2a3ddff853d46a245a1 to your computer and use it in GitHub Desktop.
なんか、一気にDNS変えるときにチェックするのがめんどうくさかった
use strict;
use warnings;
use Net::DNS;
use Term::ANSIColor;
#
# perl check_dns.pl ${IP_ADDRESS} < FQDN_LIST
#
# FQDN_LISTに書いてあるfqdnを正引きして${IP_ADDRESS}がチェックするのです
#
my $ip_addr = $ARGV[0] or die "required ip address";
my $resolver = Net::DNS::Resolver->new();
while (my $fqdn = <STDIN>) {
chomp $fqdn;
my $resolved_ip = resolve($fqdn);
my $result = $ip_addr eq $resolved_ip ? colored('ok', 'green') : colored('ng', 'red');
print("$result($resolved_ip): $fqdn\n");
}
sub resolve {
my ($fqdn) = @_;
my $query = $resolver->search($fqdn);
if (! $query) {
warn("!!!!! cannot resolve '$fqdn'");
next;
}
my $rr = ($query->answer)[0];
my $resolved_ip = do {
if ($rr->type eq 'A') {
$rr->address;
}
elsif ($rr->type eq 'CNAME') {
my $cname = $rr->cname;
resolve($cname);
}
};
return $resolved_ip;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment