Обратный сценарий DNS с Regex в Python - PullRequest
1 голос
/ 21 января 2020

В настоящее время я работаю над обратным сценарием DNS, предназначенным для открытия файла журнала, поиска IP-адреса и разрешения IP-адреса в DNS. У меня настроено регулярное выражение для определения IP-адреса в файле, но когда я добавил socket.gethostbyaddr в свой сценарий, сценарий игнорирует мое регулярное выражение и по-прежнему перечисляет объекты в файле, которые не являются IP-адресами. Раньше я никогда не использовал Python, но вот что я имею сейчас:

import socket
import re

f = open('ipidk.txt' , 'r')

lines = f.readlines()

raw_data = str(f.readlines())

regex = r'(?:[\d]{1,3})\.(?:[\d]{1,3})\.(?:[\d]{1,3})\.(?:[\d]{1,3})'

foundip = re.findall( regex, raw_data )

for raw_data in lines:
    host = raw_data.strip()

    try:
        dns = socket.gethostbyaddr(host)
        print("%s - %s" % (host, dns))
    except socket.error as exc:
        pass

        f.close()

1 Ответ

0 голосов
/ 21 января 2020

Вы звоните f.readlines() дважды. Первый раз читает все в файле и помещает это в lines. Во второй раз нечего читать (он начинает чтение с текущей позиции файла, он не перематывается в начало), поэтому он возвращает пустой список, и raw_data будет просто "[]" без IP-адресов.

Просто позвоните f.read() один раз и назначьте его на raw_data.

Затем вам нужно l oop по IP-адресам, найденным с помощью регулярного выражения, а не lines.

import socket
import re

with open('ipidk.txt' , 'r') as f:
    raw_data = f.read()
regex = r'(?:\d{1,3}\.){3}\d{1,3}'

foundip = re.findall( regex, raw_data )
for host in foundip:
    try:
        dns = socket.gethostbyaddr(host)
        print("%s - %s" % (host, dns))
    except socket.error as exc:
        pass

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...