def decompile_packet(self, pkt): if self.run_flag == False: raise StopCapture() try: if '.'.join(pkt.dns.qry_name.split('.')[-2:]) in self.res: return result = { 'src': pkt.ip.src, 'dst': pkt.ip.dst, 'len': pkt.ip.len, 'qr': pkt.dns.flags_response, 'count_queries': pkt.dns.count_queries, 'qry_name': pkt.dns.qry_name, 'qry_type': pkt.dns.qry_type, 'count_labels': pkt.dns.count_labels } if pkt.dns.flags_response == '1': attributes = pkt.dns.field_names r_types = [ 'a', 'aaaa', 'cname', 'txt', 'ns', 'mx', 'soa', 'dnskey' ] result.update({ 'resp_type': pkt.dns.resp_type, 'resp_ttl': pkt.dns.resp_ttl, 'resp_len': pkt.dns.resp_len, 'count_auth_rr': pkt.dns.count_auth_rr, 'count_add_rr': pkt.dns.count_add_rr, 'count_answers': pkt.dns.count_answers, 'count_rtypes': len([x for x in attributes if x in r_types]) }) elif pkt.dns.flags_response == '0': result.update({ 'resp_type': 0, 'resp_ttl': 0, 'resp_len': 0, 'count_auth_rr': 0, 'count_add_rr': 0, 'count_answers': 0, 'count_rtypes': 0 }) self.send_to_db(result) except: pass
def callback(pkt): parsed_packets.append(pkt) if len(parsed_packets) == len(binary_packets): raise StopCapture()