gpt4 book ai didi

python - 使用 python 解析 DNS RDATA

转载 作者:行者123 更新时间:2023-11-28 16:56:37 24 4
gpt4 key购买 nike

我正在尝试使用 Python 来解析十六进制格式的 DNS RDATA 值(应该符合 RFC1035 标准),这些值是在创建或删除记录时从 Windows DNS 服务器的审核日志中生成的。我已经尝试了几个 Python dns-modules 并且认为我正在接近 dnslib ,但是我找到的所有文档都是用于解析从网络捕获的完整 DNS 数据包,包括问题和答案 header ++。

审计日志只提供类类型和它存储在 AD(Active Directory 集成区域)中的 RDATA,所以我想我可以使用 parse(buffer,length) 方法个人记录类型类来解析它,但到目前为止我所有的尝试都失败了。

示例数据:

Type = MX

RDATA = 0A0011737276312E636F6E746F736F2E636F6D2E

应该解析为:

preference = 10

mx = srv1.contoso.com.

最近的尝试:

import dnslib
import binascii

mxrdata = binascii.unhexlify(b'0A0011737276312E636F6E746F736F2E636F6D2E')
b = dnslib.DNSBuffer(mxrdata)
mx = dnslib.MX.parse(b,len(b))

这失败了:

Traceback (most recent call last):
File "C:\Python37-32\lib\site-packages\dnslib\dns.py", line 1250, in parse
mx = buffer.decode_name()
File "C:\Python37-32\lib\site-packages\dnslib\label.py", line 235, in decode_name
(length,) = self.unpack("!B")
File "C:\Python37-32\lib\site-packages\dnslib\buffer.py", line 103, in unpack
data = self.get(struct.calcsize(fmt))
File "C:\Python37-32\lib\site-packages\dnslib\buffer.py", line 64, in get
(self.offset,self.remaining(),length))
dnslib.buffer.BufferError: Not enough bytes [offset=20,remaining=0,requested=1]

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python37-32\lib\site-packages\dnslib\dns.py", line 1254, in parse
(buffer.offset,e))
dnslib.dns.DNSError: Error unpacking MX [offset=20]: Not enough bytes [offset=20,remaining=0,requested=1]

谁能帮帮我?甚至可以使用这个模块吗?

最佳答案

您对 RDATA 的编码有点错误:

首先,您指定首选项:

0A00

然而,这不是 10(因为整数编码时 MSB 优先,而不是 LSB 优先),而是 2560。所以这应该是

000A

然后,您尝试在此处对主机名进行编码:

11737276312E636F6E746F736F2E636F6D2E

0x11应该是长度字节,其余是域名srv1.contoso.com.。但这不是主机名编码的工作方式。您必须使用长度字节分别对每个标签 进行编码,并使用长度为 0 的标签终止主机名。所以这应该是:

04 73727631 07 636F6E746F736F 03 636F6D 00
s r v 1 . c o n t o s o . c o m .

这加起来是:

mxrdata = binascii.unhexlify(b'000A047372763107636F6E746F736F03636F6D00')

解析器应该成功。因此,如果您真的以这种无效格式获得 RDATA,则必须先将其转换为符合 rfc1035 标准。

关于python - 使用 python 解析 DNS RDATA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57748273/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com