域名验证脚本
目标是从一个文件中读取一系列域名,然后检查这些域名是否可以访问,并确认它们是否能正确解析。
这是我写的代码:
#!/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()
这一行时出现了一个错误。
5 个回答
1
你传给 gethostbyname() 的是字符串 'i'
,而不是变量 i
。
正确的写法应该是 socket.gethostbyname(i)
。
这个问题可能对你有帮助:用 Python 检查网站是否正常
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
请注意,我的输入文件格式跟你的稍微有点不同,所以你需要调整一下输入部分。
4
for i in s:
print i
try:
socket.gethostbyname(i.strip())
except socket.gaierror:
print "unable to get address for", i
如果找不到一个地址,那么 gethostbyname
会引发一个异常(不是抛出)。这是在Python中处理错误的方式。如果你知道怎么正确处理这个错误,那么你应该用 except
语句来捕获它。
请注意,你还需要一些额外的代码来检查连接是否正常。