2010-10-01 21 views
10

Ich habe ein DNS-Skript, mit dem Benutzer DNS-Namen auflösen können, indem sie Website-Namen an einer Windows-Eingabeaufforderung eingeben.Wie DNS in Python zu lösen?

Ich habe mehrere Anleitungen auf der DNS-Auflösung durchgesehen, aber mein Skript kann nicht immer noch scheinen, um die Namen (www.google.com) oder (google.com) zu IP-Adresse aufzulösen.

Das Skript gibt einen Fehler von

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 

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

Bitte geben Ratschläge zu den Codes. Vielen Dank!

Antwort

19

Eingang() ist die falsche Funktion hier zu verwenden. Es evaluiert tatsächlich die Zeichenfolge, die der Benutzer eingegeben hat.

Auch gethostbyname_ex gibt mehr als nur eine Zeichenfolge zurück. Ihre Druckanweisung wäre also ebenfalls fehlgeschlagen.

In Ihrem Fall sollte dieser Code funktionieren:

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

Ehrfürchtig Antwort Kumpel! Vielen Dank! Aber ich verstehe den Teil "repr (data)" nicht. Verstand, mir zu erklären? Vielen Dank! – JavaNoob

+1

@JavaNoob: 'repr' gibt eine Zeichenfolge zurück, die eine druckbare Darstellung eines Objekts enthält. http://docs.python.org/library/functions.html#repr –

+1

Sollte repr sein (data [2]) - gethostbyname_ex() gibt ein Array zurück, dessen drittes Element die IP-Adresse ist. – ripper234

-1

Verwenden Sie raw_input anstelle von 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