在 Python 中使用正则表达式反向 DNS 脚本

Reverse DNS script with Regex in Python

我目前正在开发一个反向 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()

您正在呼叫 f.readlines() 两次。第一次读取文件中的所有内容,并将其放入 lines。第二次没有什么可读的(它从当前文件位置开始读取,它不会倒回开头),所以它 returns 是一个空列表,而 raw_data 只是 "[]",没有 IP。

只需调用 f.read() 一次,然后将其分配给 raw_data

然后您需要循环使用正则表达式找到的 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