关于python:验证域的脚本

Script to validate domains

目的是从一个文件中读取域列表,并执行查找以确认可到达性和我的最终解决方案。

这就是我写的:

1
2
3
4
5
6
7
8
9
10
11
12
13
#!/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()行抛出异常。


1
2
3
4
5
6
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
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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

请注意,我的输入文件的格式与您的稍有不同,因此您需要调整输入部分。


gethostbyname线应为

1
socket.gethostbyname(i.strip())

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

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


您正在将字符串'i'传递给gethostbyname(),而不是变量i

应该是socket.gethostbyname(i)

这个问题可能有用:检查一个网站是否通过python启动。