Last active
March 30, 2017 01:42
-
-
Save masasuzu/9e7b121aa61dd2a3ddff853d46a245a1 to your computer and use it in GitHub Desktop.
なんか、一気にDNS変えるときにチェックするのがめんどうくさかった
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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