def result2pkt(result): """Extract ldns packet from ub_result. @raises DnsError: on malformed packet """ status, pkt = ldns.ldns_wire2pkt(result.packet) if status != 0: raise DnsError("Failed to parse DNS packet: %s" % ldns.ldns_get_errorstr_by_id(status)) return pkt
def dnssecParse(domain, rrType=RR_TYPE_A): print("Resolving domain", domain) s, r = resolver.resolve(domain) print("status: %s, secure: %s, rcode: %s, havedata: %s, answer_len; %s" % (s, r.secure, r.rcode_str, r.havedata, r.answer_len)) s, pkt = ldns.ldns_wire2pkt(r.packet) if s != 0: raise RuntimeError("Error parsing DNS packet") rrsigs = pkt.rr_list_by_type(RR_TYPE_RRSIG, ldns.LDNS_SECTION_ANSWER) print("RRSIGs from answer:", sorted(rrsigs)) rrsigs = pkt.rr_list_by_type(RR_TYPE_RRSIG, ldns.LDNS_SECTION_AUTHORITY) print("RRSIGs from authority:", sorted(rrsigs)) nsecs = pkt.rr_list_by_type(RR_TYPE_NSEC, ldns.LDNS_SECTION_AUTHORITY) print("NSECs:", sorted(nsecs)) nsec3s = pkt.rr_list_by_type(RR_TYPE_NSEC3, ldns.LDNS_SECTION_AUTHORITY) print("NSEC3s:", sorted(nsec3s)) print("---")