目前我正在尝试为要求_printer._tcp.local的查询模拟DNS-SD回复
我用scapy发送的内容如下:
send(IP(dst="224.0.0.251")/UDP(sport=5353,dport=5353)/DNS(aa=1, qr=1,rd=0,an=DNSRR(rrname='_printer._tcp.local', type="PTR", rclass=1, ttl=100, rdata="Devon's awesome printer._printer._tcp.local")))
但是,当我检查Wireshark时,我收到以下错误信息包
_printer._tcp.local: type PTR, class IN, <Unknown extended label>
我假设我的发送功能中有一些错误的参数。但是,我尝试了一些变化,我似乎无法使其正常工作(我与打印机的实际回复相比,而且看起来相同)。
任何人都可以帮我解决正确的参数吗?提前谢谢!
答案 0 :(得分:1)
这是一个突出的问题,可以在scapy's issue tracker上看到。
因此,您必须自己对rdata
字段进行编码,如下所示:
from scapy.all import *
import struct
label = "Devon's awesome printer._printer._tcp.local"
sublabels = label.split(".") + [""]
label_format = ""
for s in sublabels:
label_format = '%s%dp' % (label_format, len(s) + 1)
label_data = struct.pack(label_format, *sublabels)
send(IP(dst="224.0.0.251")/UDP(sport=5353,dport=5353)/DNS(aa=1,qr=1,rd=0,an=DNSRR(rrname='_printer._tcp.local',type="PTR",rclass=1,ttl=100,rdata=label_data)))