Python - IP到主机名脚本

时间:2013-09-26 19:49:08

标签: python python-2.7

我创建了一个脚本来解析IP到主机名。该脚本无法解析主机名,它会出现以下错误:

无法解析主机名:10.10.10.10 [Errno 11004] getaddrinfo失败了 无法解析主机名:10.10.10.10 [Errno 11004] getaddrinfo失败

请建议。我是python的新手。该文本文件包含超过1000个IP。

#!/usr/bin/python
import socket
pfile = open ('C:\\Python27\\scripts\\test.txt')
while True:
    IP = pfile.readline()
    if not IP:
        break
    try:
        host = socket.gethostbyaddr("IP")
        print host, IP
    except socket.gaierror, err:
        print "cannot resolve hostname: ", IP, err
pfile.close()

4 个答案:

答案 0 :(得分:3)

这里有两个问题。

首先,正如FatalError指出的那样,你没有查找IP变量的值,而是查找字符串"IP"

其次,pfile.readline()将在IP字符串的末尾留下一个尾随换行符,因此它仍然会失败。

所以:

host = socket.gethostbyaddr(IP.rstrip())

此外,在某些平台上,如果您的DNS无法运行,即使给定IP地址,gethostbyaddr也会失败。因此,您可能希望在运行脚本的计算机上进行简单测试(如果它与您已用于SO的计算机不同) - 例如,打开浏览器并转到Google。

答案 1 :(得分:0)

据我所知,存在不同的问题。

该行:

host = socket.gethostbyaddr("IP")

因字符串而失败。要解决此问题,请使用host = socket.gethostbyaddr(IP)

此外,您在此处发布的错误是由10.10.10.10作为私有IP引起的。 10.0.0.0-10.255.255.255,172.16.0.0-172.31.255.255和192.168.255.255范围是专用网络块; socket.gethostbyaddr()无法解析这些地址。有关私有块的详细信息,请参阅https://tools.ietf.org/html/rfc1918

答案 2 :(得分:0)

经过一番谷歌搜索后,我按照以下方式在Python 3中使用它:

import socket
pfile = open ('C:\\TEMP\\IPs.txt')
while True:
  IP = pfile.readline()
  try:
    host = socket.gethostbyaddr(IP.rstrip())
    print(IP,host)
  except Exception as e:
    print(IP,"NULL")
pfile.close()

答案 3 :(得分:-1)

这有效:

import socket


IP = "www.google.ca"
host = socket.gethostbyaddr(IP)
print host, IP