域名验证脚本

5 投票
5 回答
9294 浏览
提问于 2025-04-17 02:06

目标是从一个文件中读取一系列域名,然后检查这些域名是否可以访问,并确认它们是否能正确解析。

这是我写的代码:

#!/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 语句来捕获它。

请注意,你还需要一些额外的代码来检查连接是否正常。

撰写回答