[英]Python - IP to hostname script
我创建了一个脚本来将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()
这里有两个问题。
首先,正如FatalError指出的那样,您不是在查找IP
变量的值,而是字符串"IP"
。
其次, pfile.readline()
将在IP
字符串的末尾留下换行符,因此仍然会失败。
所以:
host = socket.gethostbyaddr(IP.rstrip())
另外,在某些平台上,如果您的DNS无法正常运行,即使指定了IP地址, gethostbyaddr
也会失败。 因此,您可能希望在运行脚本的计算机上进行简单测试(如果它与用于SO的计算机不同),例如,打开浏览器并转到Google。
据我所知,存在不同的问题。
该行:
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 。
稍作搜索后,我将其按如下方式在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()
这有效:
import socket
IP = "www.google.ca"
host = socket.gethostbyaddr(IP)
print host, IP
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.