Pregunta

¿Cómo realizo una búsqueda de DNS inversa, es decir, cómo resuelvo una dirección IP a su nombre de host DNS en Perl?

¿Fue útil?

Solución

gethostbyaddr y llamadas similares.Ver http://perldoc.perl.org/functions/gethostbyaddr.html

Otros consejos

Si necesita información DNS más detallada, utilice el Red::DNS módulo, aquí hay un ejemplo:

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";
}

Fuente original EliteHackers.info, más detalles allí también.

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)'

Devoluciones: No se puede encontrar el terminador de cadena "'" en ningún lugar antes de EOF en -e línea 1.

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

Devoluciones: box250.bluehost.com

Tengo que cambiar la línea para usar comillas dobles y luego eliminar las comillas alrededor de la dirección IP.

un trazador de líneas:

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

Puede que haya una forma más sencilla, pero para IPv4, si puede realizar búsquedas de DNS normales, siempre puede crear la consulta inversa usted mismo.Para la dirección IPv4 A.B.C.D, busque los registros PTR en D.C.B.A.in-addr.arpa.Para IPv6, toma los 128 mordiscos hexadecimales, les da la vuelta y agrega ipv6.arpa.y haz lo mismo.

Si gethostbyaddr no se ajusta a tus necesidades, Red::DNS es más flexible.

Esto podría ser útil...

$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];
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top