我正试图使用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}$有人能帮我吗?有没有可能使用这个模块?在
您对RDATA的编码有点错误:
首先,指定首选项:
但是,这不是10(因为整数首先编码MSB,而不是LSB),而是2560。所以这应该是
^{pr2}$然后,尝试在此处对主机名进行编码:
^{4}$0x11
应为长度字节,其余为域名srv1.contoso.com.
。但这不是主机名的编码方式。您必须用长度字节分别对每个标签进行编码,并用0长度的标签终止主机名。所以这应该是:这加起来是:
解析器应该会成功。因此,如果您真的获得了这种无效格式的RDATA,那么您必须首先将其转换为rfc1035兼容的格式。在
相关问题 更多 >
编程相关推荐