2010-10-01 35 views
10

Kullanıcıların, Windows komut isteminde web sitesi adlarını yazarak DNS adlarını çözmelerine olanak sağlayan bir DNS komut dosyası var.Python'da DNS nasıl çözülür?

DNS çözümüyle ilgili birkaç kılavuza göz attım, ancak komut dosyanızın adlarını (www.google.com) veya (google.com) IP adresi olarak hala göremiyorum.

komut

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 

kodunun bir hata verir:

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

kodlarıyla ilgili tavsiyelerde edin. Teşekkürler!

cevap

19

giriş() burada yanlış kullanım işlevidir. Aslında kullanıcının girdiği dizgiyi değerlendirir.

Ayrıca gethostbyname_ex yalnızca bir dizgiden daha fazlasını döndürür. Yani baskı ifadeniz de başarısız olmuş olurdu. Senin durumunda

bu kod çalışması gerekir:

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

Mükemmel cevap eşini! Teşekkürler! Ama "repr (data)" bölümünü anlamıyorum. Aklıma bana açıklayan? Teşekkürler! – JavaNoob

+1

@JavaNoob: 'repr', bir nesnenin yazdırılabilir bir temsilini içeren bir dize döndürür. http://docs.python.org/library/functions.html#repr –

+1

Repr (data [2]) olmalıdır - gethostbyname_ex() üçüncü öğesi IP adresi olan bir dizi döndürür. – ripper234

-1

input yerine raw_input kullanın.

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