python/scapy DNS嗅探器和解析器
问题描述:
我有用于DNS的python/scapy嗅探器。我能够嗅探DNS消息,并获得IP/UDP源和目标IP地址和端口,但我有问题解析DNS部分 我希望有一些帮助或解决方案来解决这个问题。python/scapy DNS嗅探器和解析器
#!/usr/bin/env python
from scapy.all import *
from datetime import datetime
import time
import datetime
import sys
############# MODIFY THIS PART IF NECESSARY ###############
interface = 'eth0'
filter_bpf = 'udp and port 53'
# ------ SELECT/FILTER MSGS
def select_DNS(pkt):
pkt_time = pkt.sprintf('%sent.time%')
# ------ SELECT/FILTER DNS MSGS
try:
if DNSQR in pkt and pkt.dport == 53:
# queries
print '[**] Detected DNS QR Message at: ' + pkt_time
#
elif DNSRR in pkt and pkt.sport == 53:
# responses
print '[**] Detected DNS RR Message at: ' + pkt_time
#
except:
pass
# ------ START SNIFFER
sniff(iface=interface, filter=filter_bpf, store=0, prn=select_DNS)
答
>>> ls(DNS)
id : ShortField = (0)
qr : BitField = (0)
opcode : BitEnumField = (0)
aa : BitField = (0)
tc : BitField = (0)
rd : BitField = (0)
ra : BitField = (0)
z : BitField = (0)
rcode : BitEnumField = (0)
qdcount : DNSRRCountField = (None)
ancount : DNSRRCountField = (None)
nscount : DNSRRCountField = (None)
arcount : DNSRRCountField = (None)
qd : DNSQRField = (None)
an : DNSRRField = (None)
ns : DNSRRField = (None)
ar : DNSRRField = (None)
>>> ls(DNSQR)
qname : DNSStrField = ('.')
qtype : ShortEnumField = (1)
qclass : ShortEnumField = (1)
>>> ls(DNSRR)
rrname : DNSStrField = ('.')
type : ShortEnumField = (1)
rclass : ShortEnumField = (1)
ttl : IntField = (0)
rdlen : RDLenField = (None)
rdata : RDataField = ('')
>>>
如果上面的层定义和领域是不够的,你可以define your own layer,并使用自定义层解码包,或者干脆直接从原始负载检索数据。至于时间戳,你可以做pkt.time。
答
我在这里登陆,而谷歌搜索scapy parse DNS queries
(在我的情况我处理捕获PCAP文件)
这是我的解决方案:
#!/usr/bin/env python
from scapy.all import *
from scapy.layers.dns import DNSRR, DNS, DNSQR
pcap = '/path/.../to/.../pcap/.../.pcap'
pkts = rdpcap(pcap)
for p in pkts:
if p.haslayer(DNS):
if p.qdcount > 0 and isinstance(p.qd, DNSQR):
name = p.qd.qname
elif p.ancount > 0 and isinstance(p.an, DNSRR):
name = p.an.rdata
else:
continue
print name
THX但我有其他问题答案和其他记录。我无法得到他们 – user1627588
@ user1627588呃,通过编辑您的原始问题,我的答案现在似乎几乎完全不相关。请不要在将来这样做。无法检索字段并且无法在某些特定问题下检索字段的问题是两个完全不同的问题。 – wookie919
对不起人。你是完全正确的。编辑完成后,您的答案看起来并不相关。我没有这样想。我根本没有想到。我应该改变它回来? – user1627588