1

我创建了一个脚本来将 IP 解析为主机名。该脚本不解析主机名,它给出以下错误:

无法解析主机名:10.10.10.10 [Errno 11004] getaddrinfo failed 无法解析主机名:10.10.10.10 [Errno 11004] getaddrinfo failed

请建议。我是 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

4 回答 4

4

这里有两个问题。

首先,正如 FatalError 指出的那样,您不是在查找IP变量的值,而是在查找 string "IP"

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

所以:

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

此外,在某些平台上,如果您的 DNS 不工作,gethostbyaddr即使给定 IP 地址也会失败。因此,您可能想在运行脚本的机器上做一个简单的测试(如果它不是您已经用于 SO 的同一台机器)——例如,打开浏览器并访问 Google。

于 2013-09-26T19:58:18.003 回答
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://www.rfc-editor.org/rfc/rfc1918

于 2013-09-26T20:04:25.733 回答
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()
于 2017-09-25T18:53:57.590 回答
-1

这有效:

import socket


IP = "www.google.ca"
host = socket.gethostbyaddr(IP)
print host, IP
于 2013-09-26T19:57:39.190 回答