Pregunta

Tengo un script DNS, que permiten a los usuarios nombres DNS determinación de nombres de sitios web a escribir en un símbolo del sistema de Windows.

He mirado a través de varias guías sobre la resolución DNS, pero mi guión no puedo todavía parecen resolver los nombres (www.google.com) o (google.com) a la dirección IP.

El script genera 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!

¿Fue útil?

Solución

input () es la función de error utilizar aquí. En realidad, se evalúa la cadena que el usuario ha introducido.

gethostbyname_ex vuelve algo más que una cadena. Por lo que su sentencia print también habría fracasado.

En el caso de este 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')  

Otros consejos

#!/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

Uso raw_input en lugar de input.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top