Parsing scapy dns嗅探和其他记录
我有用于DNS的python/scapy嗅探器。 我能够嗅探DNS消息并获取IP/UDP源和目标IP地址和端口以及DNS,但我在解析和获取其他答案以及其他记录(如果有多个答案和记录)时遇到问题。 从scapy中,我可以看到DNS数据,但不知道如何使用ls(DNS)、ls(DNSQR)和ls(DNSRR)获取其他记录 我希望能得到一些帮助或解决办法来解决这个问题。 下面是我的python/scapy脚本Parsing scapy dns嗅探和其他记录,parsing,dns,records,scapy,Parsing,Dns,Records,Scapy,我有用于DNS的python/scapy嗅探器。 我能够嗅探DNS消息并获取IP/UDP源和目标IP地址和端口以及DNS,但我在解析和获取其他答案以及其他记录(如果有多个答案和记录)时遇到问题。 从scapy中,我可以看到DNS数据,但不知道如何使用ls(DNS)、ls(DNSQR)和ls(DNSRR)获取其他记录 我希望能得到一些帮助或解决办法来解决这个问题。 下面是我的python/scapy脚本 #!/usr/bin/env python from scapy.all import *
#!/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 Message at: ' + pkt_time
p_id = pkt[DNS].id
cli_ip = pkt[IP].src
cli_port = pkt.sport
srv_ip = pkt[IP].dst
srv_port = pkt.dport
query = pkt[DNSQR].qname
q_class = pkt[DNSQR].qclass
qr_class = pkt[DNSQR].sprintf('%qclass%')
type = pkt[DNSQR].sprintf('%qtype%')
#
elif DNSRR in pkt and pkt.sport == 53:
# responses
pkt_time = pkt.sprintf('%sent.time%')
p_id = pkt[DNS].id
srv_ip = pkt[IP].src
srv_port = pkt.sport
cli_ip = pkt[IP].dst
cli_port = pkt.dport
response = pkt[DNSRR].rdata
r_class = pkt[DNSRR].rclass
rr_class = pkt[DNSRR].sprintf("%rclass%")
type = pkt[DNSRR].sprintf("%type%")
ttl = pkt[DNSRR].ttl
len = pkt[DNSRR].rdlen
#
print response
except:
pass
# ------ START SNIFFER
sniff(iface=interface, filter=filter_bpf, store=0, prn=select_DNS)