用于验证域的脚本

时间:2011-09-12 12:19:26

标签: python sockets file-io dns

目标是从文件中读取域列表并执行查找以确认我的可访问性和解决方案。

这就是我写的:

#!/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()行抛出异常。

4 个答案:

答案 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)

这个问题可能有用:Checking if a website is up via Python

答案 3 :(得分:1)

gethostbyname行应为

socket.gethostbyname(i.strip())

i变量周围没有引号。 strip()将删除尾随的lf \ cr字符,这将导致错误。

注意:这只会验证DNS系统中是否存在域,而不是可以访问/运行。为此,您必须在它正在侦听的端口上实际打开与远程主机的连接,