El el post pasado para obtener la información usamos la herramienta nslookup. En este caso vamos a implemantar una herramienta que obtenga los datos más interesantes usando la librería DNSPython.
Los datos vamos a mostrar son: CNAME (Nombre canónico) , IPs y sus resoluciones inversas, MX (Registros de correo), NS (Registros de servidores DNS), SOA (marca el inicio de una zona de autoridad), TXT, LOC (localización), MINFO y HINFO (Información del correo y host respectivamente).
Cabe destacar que algunos de estos datos no se encuentran en todos los servidores de nombre.
Además para realizar las consultas vamos a usar en DNS de google situado en 8.8.8.8.
Bueno a continuación el código:
'''
@copyright: GPL v.3
@author: ehooo
@contact: <ehooo|at|rollanwar|dot|net>
'''
import dns.resolver
import dns.reversename
import getopt, sys
if __name__ == '__main__':
try:
opts, args = getopt.getopt(sys.argv[1:], "h:", ["host="])
except getopt.error, msg:
print msg
print sys.argv[0] + " [ -h | --host= ]"
exit(2)
host = None
for o, a in opts:
if o in ("-h", "--host"):
host = a
if host is None:
print sys.argv[0] + " [ -h | --host= ]"
exit(1)
myresolver = dns.resolver.Resolver()
myresolver.domain = dns.name.Name("google-public-dns-a.google.com")
myresolver.nameserver = ['8.8.8.8']
print "DATOS DEL HOST:", host
try:
answers = myresolver.query(host, 'CNAME')
for rdata in answers:
print "CNAME:", str(rdata.target)
except dns.resolver.NoAnswer:
print "CNAME: No se puede obtener"
try:
answers = myresolver.query(host, 'A')
ip = []
for rdata in answers:
n = dns.reversename.from_address(rdata.address)
try:
answers_inv = myresolver.query(n, 'PTR')
for rdata_inv in answers_inv:
ip += [(rdata.address, str(rdata_inv.target))]
except dns.resolver.NoAnswer:
ip += [(rdata.address, "PTR: Sin respuesta "+str(n))]
except dns.resolver.NXDOMAIN:
ip += [(rdata.address, "PTR: Dominio NX "+str(n))]
print "IPs:", ip
except dns.resolver.NoAnswer:
print "IPs: No se puede obtener"
try:
answers = myresolver.query(host, 'MX')
mx = []
for rdata in answers:
mx += [str(rdata.exchange)]
print "MXs:", mx
except dns.resolver.NoAnswer:
print "MXs: No se puede obtener"
try:
answers = myresolver.query(host, 'NS')
ns = []
for rdata in answers:
ns += [str(rdata.target)]
print "NSs:", ns
except dns.resolver.NoAnswer:
print "NSs: No se puede obtener"
try:
answers = myresolver.query(host, 'SOA')
for rdata in answers:
print "SOA:", str(rdata.mname), str(rdata.rname)
except dns.resolver.NoAnswer:
print "SOA: No se puede obtener"
try:
answers = myresolver.query(host, 'TXT')
for rdata in answers:
print "TXT:", rdata.strings
except dns.resolver.NoAnswer:
print "TXT: No se pueden obtener"
try:
answers = myresolver.query(host, 'LOC')
for rdata in answers:
print "LOC:", "Latitud",rdata.float_latitude,"Logitud", rdata.float_longitude
except dns.resolver.NoAnswer:
print "LOC: No se pueden obtener"
try:
answers = myresolver.query(host, 'MINFO')
for rdata in answers:
print "MINFO:", rdata.to_text()
except dns.resolver.NoAnswer:
print "MINFO: No se pueden obtener"
try:
answers = myresolver.query(host, 'HINFO')
for rdata in answers:
print "HINFO:", rdata.to_text()
except dns.resolver.NoAnswer:
print "HINFO: No se pueden obtener"
El resultado sería el siguiente:
DATOS DEL HOST: www.rollanwar.net
CNAME: rollanwar.net.
IPs: [('66.98.184.55', 'hispla.com.')]
MXs: ['rollanwar.net.']
NSs: ['ns1.hispla.com.', 'ns2.hispla.com.']
SOA: ns1.hispla.com. sistema.hispla.com.
TXT: No se pueden obtener
LOC: No se pueden obtener
MINFO: No se pueden obtener
HINFO: No se pueden obtener
Más info:
http://www.iana.org/assignments/dns-parameters
http://www.dnspython.org/
No hay comentarios:
Publicar un comentario