2010-10-01 8 views
10

J'ai un script DNS qui permet aux utilisateurs de résoudre les noms DNS en tapant les noms de sites Web sur une invite de commande Windows.Comment résoudre DNS en Python?

J'ai parcouru plusieurs guides sur la résolution DNS, mais mon script ne semble toujours pas résoudre les noms (www.google.com) ou (google.com) en adresses IP.

Le script affiche une erreur 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 

Le code:

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

S'il vous plaît donner des conseils sur les codes. Merci!

Répondre

19

entrée() est la mauvaise fonction à utiliser ici. Il évalue réellement la chaîne que l'utilisateur a entrée.

De même gethostbyname_ex renvoie plus qu'une simple chaîne. Donc, votre déclaration d'impression aurait également échoué.

Dans votre cas, ce code devrait fonctionner:

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

mate réponse Impressionnant! Merci! Mais je ne comprends pas la partie "repr (data)". L'esprit m'expliquant? Merci! – JavaNoob

+1

@JavaNoob: 'repr' renvoie une chaîne contenant une représentation imprimable d'un objet. http://docs.python.org/library/functions.html#repr –

+1

Doit être repr (données [2]) - gethostbyname_ex() retourne un tableau dont le troisième élément est l'adresse IP. – ripper234

-1

Utilisez raw_input au lieu 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 
Questions connexes