Parsing scapy dns嗅探和其他记录

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 *

我有用于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 *
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)