目标是从文件中读取域列表并执行查找以确认我的可访问性和解决方案。
这就是我写的:
#!/usr/bin/python
import os
import socket
f = open('file1.lst', 'r')
s = f.readlines()
for i in s:
print i
socket.gethostbyname(i.strip())
f.close()
socket.gethostbyname()
行抛出异常。
答案 0 :(得分:3)
for i in s:
print i
try:
socket.gethostbyname(i.strip())
except socket.gaierror:
print "unable to get address for", i
如果找不到地址,则gethostbyname
将引发异常(而不是抛出)。这是在Python中完成错误处理的方式。如果您知道如何正确处理错误,则应使用except
子句来捕获它。
请注意,您还需要更多代码来检查连接性。
答案 1 :(得分:2)
这是我写的做同样的事情。它可能对您有用:
import argparse
from socket import getaddrinfo
if __name__ == "__main__":
parser = argparse.ArgumentParser(description='Check for validity of domains in list exported from exchange', version='%(prog)s 1.0')
parser.add_argument('infile', nargs='+', type=str, help='list of input files')
args = parser.parse_args()
# Read domains from file
domains = []
for f in args.infile:
with open(f, 'rt') as data:
for line in data.readlines():
split = line.replace('\x00',"").split(':')
if split[0].strip() == 'Domain':
domains.append(split[1].strip())
# Check each domain
for domain in domains:
try:
getaddrinfo(domain, None)
except Exception, e:
print "Unable to resolve:", domain
请注意,我的输入文件格式与您的格式略有不同,因此您需要调整输入部分。
答案 2 :(得分:1)
您正在将字符串'i'
传递给gethostbyname()而不是变量i
。
应为socket.gethostbyname(i)
答案 3 :(得分:1)
gethostbyname
行应为
socket.gethostbyname(i.strip())
i
变量周围没有引号。 strip()
将删除尾随的lf \ cr字符,这将导致错误。
注意:这只会验证DNS系统中是否存在域,而不是可以访问/运行。为此,您必须在它正在侦听的端口上实际打开与远程主机的连接,