2010-10-01 32 views
10

Tengo un script DNS que permite a los usuarios resolver nombres DNS escribiendo nombres de sitios web en un símbolo del sistema de Windows.Cómo resolver DNS en Python?

He revisado varias guías sobre la resolución de DNS, pero mi script todavía no parece poder resolver los nombres (www.google.com) o (google.com) de la dirección IP.

El guión da salida a un error de

Traceback (most recent call last): 
    File "C:\python\main_menu.py", line 37, in ? 
    execfile('C:\python\showdns.py') 
    File "C:\python\showdns.py", line 3, in ? 
    x = input ("\nPlease enter a domain name that you wish to translate: ") 
    File "<string>", line 0, in ? 
NameError: name 'google' is not defined 

El código:

import socket 

x = input ("\nPlease enter a domain name that you wish to translate: ") 

print ("\n\nThe IP Address of the Domain Name is: "+socket.gethostbyname_ex(x)) 

x = raw_input("\nSelect enter to proceed back to Main Menu\n") 
if x == '1': 
execfile('C:\python\main_menu.py') 

Por favor, dar consejos sobre los códigos. ¡Gracias!

Respuesta

19

entrada() es la función incorrecta para usar aquí. En realidad, evalúa la cadena que ingresó el usuario.

También gethostbyname_ex devuelve algo más que una cadena. Entonces su declaración impresa también habría fallado.

En su caso el código debería funcionar:

import socket 

x = raw_input ("\nPlease enter a domain name that you wish to translate: ") 

data = socket.gethostbyname_ex(x) 
print ("\n\nThe IP Address of the Domain Name is: "+repr(data)) 

x = raw_input("\nSelect enter to proceed back to Main Menu\n") 
if x == '1': 
    execfile('C:\python\main_menu.py') 
+1

compañero de respuesta impresionante! ¡Gracias! Pero no entiendo la parte "repr (datos)". ¿Me lo explicas? ¡Gracias! – JavaNoob

+1

@JavaNoob: 'repr' devuelve una cadena que contiene una representación imprimible de un objeto. http://docs.python.org/library/functions.html#repr –

+1

Debería ser repr (data [2]) - gethostbyname_ex() devuelve una matriz, cuyo tercer elemento es la dirección IP. – ripper234

-1

Utilice raw_input en lugar de input.

9
#!/user/bin/env python 
""" 
Resolve the DNS/IP address of a given domain 
data returned is in the format: 
(name, aliaslist, addresslist) 
@filename resolveDNS.py 
@version 1.01 (python ver 2.7.3) 
@author LoanWolffe 
""" 
import socket 

def getIP(d): 
    """ 
    This method returns the first IP address string 
    that responds as the given domain name 
    """ 
    try: 
     data = socket.gethostbyname(d) 
     ip = repr(data) 
     return ip 
    except Exception: 
     # fail gracefully! 
     return False 
# 
def getIPx(d): 
    """ 
    This method returns an array containing 
    one or more IP address strings that respond 
    as the given domain name 
    """ 
    try: 
     data = socket.gethostbyname_ex(d) 
     ipx = repr(data[2]) 
     return ipx 
    except Exception: 
     # fail gracefully! 
     return False 
# 
def getHost(ip): 
    """ 
    This method returns the 'True Host' name for a 
    given IP address 
    """ 
    try: 
     data = socket.gethostbyaddr(ip) 
     host = repr(data[0]) 
     return host 
    except Exception: 
     # fail gracefully 
     return False 
# 
def getAlias(d): 
    """ 
    This method returns an array containing 
    a list of aliases for the given domain 
    """ 
    try: 
     data = socket.gethostbyname_ex(d) 
     alias = repr(data[1]) 
     #print repr(data) 
     return alias 
    except Exception: 
     # fail gracefully 
     return False 
# 

# test it 

x = raw_input("Domain name or IP address? > ") 


a = getIP(x) 
b = getIPx(x) 
c = getHost(x) 
d = getAlias(x) 

print " IP ", a 
print " IPx ", b 
print " Host ", c 
print " Alias ", d 
Cuestiones relacionadas