pp2@nereida:~/src/perl/NET_DNS$ ./nameservers.pl gobcan.es seti.gobiernodecanarias.org acatife.gobiernodecanarias.org
La llamada al constructor new
en la línea 6
del programa que sigue
retorna un objeto resolutor. Si a new
no se le pasan argumentos
el objeto queda configurado a los valores por defecto del sistema.
Para ello - en un sistema Unix busca - en este orden - en los ficheros:
/etc/resolv.conf $HOME/.resolv.conf ./.resolv.conf
El método query
realiza un query DNS para el nombre dado como primer argumento.
Si el nombre no contiene puntos - si la opción defnames
de new
se activó - se completa con el nombre del dominio por defecto.
El método retorna un objeto Net::DNS::Packet .
Estos objetos disponen del método answer
el cual retorna una lista de objetos Net::DNS::RR
que representa la sección respuesta del paquete.
El método type
devuelve el tipo de
la respuesta (MX
para DNS Mail Exchanger,
NS
servidores de nombres, etc. cada uno de estos
es una subclase de Net::DNS::RR
).
Cuando el objeto Net::DNS::RR
es además de la clase Net::DNS::RR::NS
dispone del método nsdname
el cual
retorna el nombre del servidor.
pp2@nereida:~/src/perl/NET_DNS$ cat -n nameservers.pl 1 #!/usr/local/bin/perl -w 2 use strict; 3 use Net::DNS; 4 5 my $addr = shift || "ull.es"; 6 my $res = Net::DNS::Resolver->new; 7 my $query = $res->query($addr, "NS"); 8 9 if ($query) { 10 foreach my $rr (grep { $_->type eq 'NS' } $query->answer) { 11 print $rr->nsdname, "\n"; 12 } 13 } 14 else { 15 warn "query failed: ", $res->errorstring, "\n"; 16 }
El método nameservers
de un objeto Net::DNS::Resolver
nos retorna los servidores actuales:
DB<1> use Net::DNS DB<2> $res = Net::DNS::Resolver->new DB<3> x $res->nameservers 0 '193.145.XXX.XX' 1 '193.145.YYY.YY'
Los usos de DNS son múltiples y no están limitados a la traducción de direcciones IP. Los agentes de correo utilizan DNS para averiguar donde entregar el correo destinado a una dirección concreta.
En DNS un registro MX especifica como debe ser encaminado un correo cuando se usa Simple Mail Transfer Protocol (SMTP). Cada registro MX contiene una prioridad y un host, de manera que la colección de registros MX de un dominio dado referencia a los servidores que deberían recibir el correo para ese dominio asi como la prioridad relativa entre estos.
El siguiente programa muestra las máquinas MX
de un dominio dado
ordenadas por preferencia:
pp2@nereida:~/src/perl/NET_DNS$ mx.pl gmail.com 5 gmail-smtp-in.l.google.com 10 alt1.gmail-smtp-in.l.google.com 10 alt2.gmail-smtp-in.l.google.com 50 gsmtp163.google.com 50 gsmtp183.google.com
La función mx retorna una lista de objetos Net::DNS::RR::MX
que representan registros MX
para el nombre especificado.
La lista será ordenada según preferencia.
1 use strict; 2 use File::Basename; 3 use Net::DNS; 4 5 die "Usage: ", basename($0), " domain\n" unless (@ARGV == 1); 6 7 my $dname = $ARGV[0]; 8 my $res = Net::DNS::Resolver->new; 9 my @mx = mx($res, $dname); 10 11 if (@mx) { 12 foreach my $rr (@mx) { 13 print $rr->preference, "\t", $rr->exchange, "\n"; 14 } 15 } else { 16 print "Can't find MX hosts for $dname: ", $res->errorstring, "\n";