Вы можете использовать модуль re
, чтобы проверить ответ и убедиться, что это действительное имя хоста DNS (с использованием шаблона регулярного выражения):
import re
# ... rest of your code
# before writing to targets file
if re.match('^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9])$', hits) is not None:
targets.write(hits)
Функция re.match()
возвращает объект соответствия, если данная строка соответствует регулярному выражению. В противном случае он вернет None
. Поэтому, если вы проверите, чтобы убедиться, что это не None
, тогда он должен соответствовать регулярному выражению (то есть он соответствует шаблону для имени хоста DNS). Вы можете изменить регулярное выражение или абстрагировать проверку на более общий isValidHit(hit)
и поместить любую функциональность, которую вы хотите, чтобы она проверяла не только имена хостов DNS.
Примечание
Вы хотите быть осторожным со своей линией targets = open("TARGETS","w")
. Это открывает файл для записи, но вам нужно вручную закрыть файл в другом месте и обработать все ошибки, связанные с вводом-выводом.
Вам следует пытаться использовать with open(filename) as blah:
при работе с файлом IO. Это намного безопаснее и проще в обслуживании.
Редактировать
Найдено простое регулярное выражение для адреса IPv4 здесь .
Добавить более подробное описание функции регулярного выражения match
.
Редактировать 2
Я просто перечитал ваш пост и увидел, что вы на самом деле ищете не адреса IPv4, а имена DNS-узлов ...
В этом случае вы можете просто переключить шаблон регулярного выражения на ^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9])$
. Источник для DNS-имени хоста regex .