使用python解析dnsrdata

2024-09-30 14:34:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图使用Python来解析在创建或删除记录时,在Windows DNS服务器的审计日志中生成的十六进制格式的dnsrdata值(应该是RFC1035兼容的)。我已经尝试了几个Python dns模块,并且认为我已经接近了dnslib,但是我找到的所有文档都是用于解析从网络捕获的完整dns包,包括问答头++。在

审计日志只提供类类型和它存储在AD(ActiveDirectory集成区域)中的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))

此操作失败的原因是:

^{pr2}$

有人能帮我吗?有没有可能使用这个模块?在


Tags: 模块import类型parsednswindows记录mx
1条回答
网友
1楼 · 发布于 2024-09-30 14:34:31

您对RDATA的编码有点错误:

首先,指定首选项:

0A00

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

^{pr2}$

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

11737276312E636F6E746F736F2E636F6D2E

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

^{4}$

这加起来是:

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

解析器应该会成功。因此,如果您真的获得了这种无效格式的RDATA,那么您必须首先将其转换为rfc1035兼容的格式。在

相关问题 更多 >