Работа с DNS

#!/usr/bin/perl
# Author: Sanjeev Jaiswal ( http://www.aliencoders.org/ )
# Description: It will take website name or IP address as an input
# It will display IP Address(es), name server(s), mail server(s) and SOA records if you pass website name
# It will display PTR record i.e. reverse lookup if you pass IP Address
# Currently we are not validating IP address though, but you modify to validate IP as well
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#http[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);
# For 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;
  }
}
#For Name servers
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";
  }
}
# For Mail servers
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";
  }
}
#For SOA Records
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";
  }
}
#Show reverse lookup value of an IP Address
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

Комментариев нет:

Отправить комментарий