#!/usr/bin/perl
use
strict;
use
warnings;
use
Net::DNS;
use
Net::IP;
die
"Usage: perl $0 [site_name|IP Address]\n"
unless
(
scalar
$ARGV
[0]);
my
$site
;
my
$ip_address
;
if
(
$ARGV
[0] =~/^(\d+\.){3}\d+$/){
$ip_address
= new Net::IP(
$ARGV
[0],4);
}
else
{
$site
=
$ARGV
[0];
$site
=~ s
$site
=~ s/www\.//;
print
"Not a valid site name format, Try again\n"
and
exit
unless
(
$site
=~ /^((?!-)[A-Za-z0-9-]{1,63}(?<!-)\.)+[A-Za-z]{2,6}$/);
}
my
$res
= Net::DNS::Resolver->new;
if
(
$site
){
show_ip();
show_ns();
show_mx();
show_soa();
}
show_ip_lookup()
if
(
$ip_address
);
sub
show_ip {
my
$query
=
$res
->search(
$site
);
if
(
$query
) {
print
"\nIP Address(es):\n"
;
foreach
my
$rr
(
$query
->answer) {
next
unless
$rr
->type eq
"A"
;
print
$rr
->address,
"\n"
;
}
}
else
{
warn
"Query failed: "
,
$res
->errorstring;
}
}
sub
show_ns {
my
$reply
=
$res
->query(
"$site"
,
"NS"
);
if
(
$reply
) {
print
"\nName Server(s)\n"
;
foreach
my
$rr
(
grep
{
$_
->type eq
"NS"
}
$reply
->answer) {
print
$rr
->nsdname,
"\n"
;
}
}
else
{
warn
"query failed: "
,
$res
->errorstring,
"\n"
;
}
}
sub
show_mx {
my
@mx
= mx(
$res
,
$site
);
if
(
@mx
) {
print
"\nMail Server(s)\n"
;
foreach
my
$rr
(
@mx
) {
print
$rr
->preference,
" "
,
$rr
->exchange,
"\n"
;
}
}
else
{
warn
"Can\'t find MX records for $site: "
,
$res
->errorstring,
"\n"
;
}
}
sub
show_soa {
my
$reply
=
$res
->query(
"$site"
,
"SOA"
);
if
(
$reply
) {
print
"\nSOA Record(s)\n"
;
(
$reply
->answer)[0]->
print
;
}
else
{
print
"query failed: "
,
$res
->errorstring,
"\n"
;
}
}
sub
show_ip_lookup {
my
$answer
=
$res
->query(
$ip_address
->reverse_ip(),\'PTR\');
my
$namer
=
$answer
->{\'answer\'}[0];
print
"Reverse lookup: $namer->{\'ptrdname\'}\n"
if
(
defined
$namer
->{\'ptrdname\'});
}
- See more at: http://www.aliencoders.org/forum/Thread-how-to-get-dns-information-using-perl-script#sthash.c4KmsWCr.dpuf
Комментариев нет:
Отправить комментарий