4
DNSトラフィックをデコードし、クエリ/応答データを出力しようとしていて、パケットをデコードするためにpython/scapyを使用しています。scapy:シンボリック/文字列形式のDNSQR/DNSRRフィールド値を取得します。
コードスニペット:
def dns_sniff_v2(pkt):
if IP in pkt:
if pkt.haslayer(DNS):
dns = pkt.getlayer(DNS)
pkt_time = pkt.sprintf('%sent.time%')
if pkt.haslayer(DNSQR):
qr = pkt.getlayer(DNSQR) # DNS query
values = [ pkt_time, str(ip_src), str(ip_dst), str(dns.id), str(qr.qname), str(qr.qtype), str(qr.qclass) ]
print "|".join(values)
sniff(iface="eth0", filter="port 53", prn=dns_sniff_v2, store=0)
問題がqr.qtype
またはqr.qclass
は私の代わりに記号文字列値( "A"、または "IN")のenumの内部整数表現(1)を取得しているということです。同じことが応答パケットのDNSRRセクションにも当てはまります。
DNSQRフィールドまたはDNSRRフィールドをシンボリックフォームで取得するにはどうすればよいですか。
解決策はありがたいです! –