在python scapy中解码MX记录的DNS应答数据

在python scapy中解码MX记录的DNS应答数据,python,python-3.x,scapy,Python,Python 3.x,Scapy,我正在使用的嗅探器获取DNS数据包,它就像一个符咒 问题是当我收到MX记录时,rrdata被编码(struct.pack或类似的东西) 我如何解密这些数据 例如,我嗅探了google MX请求的DNS: def pkt_回调(pkt): ip=pkt['ip'] dns=pkt['dns'] 对于范围内的i(dns.ancount): dnsrr=dns.an[i] 打印(dnsrr.rdata) 嗅探(iface='enp0s25',prn=pkt_回调,filter=“udp和(端口53)”

我正在使用的嗅探器获取DNS数据包,它就像一个符咒
问题是当我收到MX记录时,
rrdata
被编码(struct.pack或类似的东西)
我如何解密这些数据

例如,我嗅探了google MX请求的DNS:

def pkt_回调(pkt):
ip=pkt['ip']
dns=pkt['dns']
对于范围内的i(dns.ancount):
dnsrr=dns.an[i]
打印(dnsrr.rdata)
嗅探(iface='enp0s25',prn=pkt_回调,filter=“udp和(端口53)”,store=0)
我明白了:

b'\x00\n\x05aspmx\x01l\xc0\x0c'
b'\x002\x04alt4\xc0*'
b'\x00\x1e\x04alt2\xc0*'
b'\x00\x14\x04alt1\xc0*'
b'\x00(\x04alt3\xc0*'
这应该是:

10 aspmx.l.google.com。
50 alt4.aspmx.l.google.com。
30 alt2.aspmx.l.google.com。
20 alt1.aspmx.l.google.com。
40 alt3.aspmx.l.google.com。
我可以使用以下命令提取“性能””字段:

perf=struct.unpack('!h',rrdata[0:2])[0]
但其他数据并非如此;我最能负担得起的是:

def解码\u mx\u rdata(rdata):
perf=struct.unpack(“!h',rdata[0:2])[0]
rdata=rdata[2:]
部分=[]
而rdata:
如果len(rdata)%2==0:
l=rdata[0:2]
p=2
其他:
l=rdata[0:1]+b'\x00'
p=1
l=int(结构解包('h',l)[0])
parts.append(rdata[p:l+p])
rdata=rdata[l+p:]
返回性能,零件
如何正确解码这些数据