Domanda

Come posso eseguire una ricerca DNS inversa, ovvero come posso risolvere un indirizzo IP nel suo nome host DNS in Perl?

È stato utile?

Soluzione

gethostbyaddr e chiamate simili.Vedere http://perldoc.perl.org/functions/gethostbyaddr.html

Altri suggerimenti

Se hai bisogno di informazioni DNS più dettagliate usa il file Rete::DNS modulo, ecco un esempio:

use Net::DNS;
my $res = Net::DNS::Resolver->new;

# create the reverse lookup DNS name (note that the octets in the IP address need to be reversed).
my $IP = "209.85.173.103";
my $target_IP = join('.', reverse split(/\./, $IP)).".in-addr.arpa";

my $query = $res->query("$target_IP", "PTR");

if ($query) {
  foreach my $rr ($query->answer) {
    next unless $rr->type eq "PTR";
    print $rr->rdatastr, "\n";
  }
} else {
  warn "query failed: ", $res->errorstring, "\n";
}

Fonte originale EliteHackers.info, maggiori dettagli anche lì.

use Socket;
$iaddr = inet_aton("127.0.0.1"); # or whatever address
$name  = gethostbyaddr($iaddr, AF_INET);
perl -MSocket -E 'say scalar gethostbyaddr(inet_aton("69.89.27.250"), AF_INET)'

Ritorna: Impossibile trovare il terminatore di stringa "'" da nessuna parte prima di EOF nella riga -e 1.

perl -MSocket -E "say scalar gethostbyaddr(inet_aton(\"69.89.27.250\"), AF_INET)"

Ritorna: box250.bluehost.com

Devo cambiare la riga per utilizzare le virgolette doppie e quindi eliminare le virgolette attorno all'indirizzo IP

una riga:

perl -MSocket -E 'say scalar gethostbyaddr(inet_aton("79.81.152.79"), AF_INET)'

Potrebbe esserci un modo più semplice, ma per IPv4, se puoi eseguire normali ricerche DNS, puoi sempre costruire tu stesso la query inversa.Per l'indirizzo IPv4 A.B.C.D, cercare eventuali record PTR su D.C.B.A.in-addr.arpa.Per IPv6, prendi i 128 bocconcini esadecimali, girali e aggiungi ipv6.arpa.e fare la stessa cosa.

Se gethostbyaddr non soddisfa le tue esigenze, Rete::DNS è più flessibile.

Questo potrebbe essere utile...

$ip = "XXX.XXX.XXX.XXX" # IPV4 address.
my @numbers = split (/\./, $ip);
if (scalar(@numbers) != 4)
{
    print "$ip is not a valid IP address.\n";
    next;
}
my $ip_addr = pack("C4", @numbers);
# First element of the array returned by gethostbyaddr is host name.
my ($name) = (gethostbyaddr($ip_addr, 2))[0];
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top