Скрипт для валидации доменов - PullRequest
5 голосов
/ 12 сентября 2011

Цель состоит в том, чтобы прочитать список доменов из файла и выполнить поиск, чтобы подтвердить достижимость и разрешение с моей стороны.

Вот что я написал:

#!/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 ]

3 голосов
/ 12 сентября 2011
for i in s:
    print i
    try:
        socket.gethostbyname(i.strip())
    except socket.gaierror:
        print "unable to get address for", i

Если адрес не может быть найден, то gethostbyname будет вызывать исключение (не выбрасывать). Это способ обработки ошибок в Python. Если вы знаете, как правильно устранить ошибку, вы должны поймать ее с помощью предложения except.

Обратите внимание, что вам потребуется еще немного кода, чтобы также проверить наличие соединения.

2 голосов
/ 12 сентября 2011

Это то, что я написал, чтобы сделать то же самое.Это может быть полезно для вас:

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

Обратите внимание, что мой входной файл имеет немного другой формат, чем ваш, поэтому вам нужно будет настроить раздел ввода.

1 голос
/ 12 сентября 2011

Строка gethostbyname должна быть

socket.gethostbyname(i.strip())

без кавычек вокруг переменной i.strip() предназначен для удаления завершающих символов lf \ cr, что приведет к ошибке.

Примечание. Это будет проверять только то, что домен существует в системе DNS, а не что он доступен / работает.Для этого вам фактически нужно будет открыть соединение с удаленным хостом, через порт, который он прослушивает,

1 голос
/ 12 сентября 2011

Вы передаете строку 'i' в gethostbyname (), а не в переменную i.

Это должно быть socket.gethostbyname(i)

Этот вопрос может быть полезен: Проверка работоспособности сайта через Python

...