def _dnsresp_to_dict(self, obj):
"""
Converts DNS reponse into a normalised dictionary
"""
rdtype = obj.rdtype
if rdtype in (dns.rdatatype.A, dns.rdatatype.AAAA):
return dict(host=obj.address)
elif rdtype == dns.rdatatype.SOA:
return dict(retry=obj.retry, serial=obj.serial, expires=obj.expire,
refresh=obj.refresh, minttl=obj.minimum,
hostmaster=str(obj.rname), nsname=str(obj.mname))
elif rdtype == dns.rdatatype.NS:
return dict(host=str(obj.target))
elif rdtype == dns.rdatatype.MX:
return dict(priority=obj.preference, host=str(obj.exchange))
elif rdtype == dns.rdatatype.CNAME:
return dict(cname=str(obj.target))
elif rdtype in (dns.rdatatype.TXT, dns.rdatatype.SPF):
return dict(text=" ".join(obj.strings))
elif rdtype == dns.rdatatype.SRV:
return dict(priority=obj.priority, host=str(obj.target), port=obj.port,
weight=obj.weight)
elif rdtype == dns.rdatatype.DS:
return dict(keytag=obj.key_tag, hashtype=obj.digest_type,
hash=hexlify(obj.digest))
elif rdtype == dns.rdatatype.DLV:
return dict(keytag=obj.key_tag, hashtype=obj.digest_type)
elif rdtype == dns.rdatatype.DNSKEY:
return dict(keytag=dns.dnssec.key_id(obj), protocol=obj.protocol,
flags=obj.flags, algorithm=obj.algorithm,
length=keylength(obj.algorithm, obj.key),
key=hexlify(obj.key))
raise RuntimeError("Unknown DNS response type %r" % (obj,))
# 'RRSIG', 'DS', 'DLV', 'DNSKEY', 'NSEC', 'NSEC3', 'NSEC3PARAM']
# TODO: add DS, DLV, RRSIG, NSEC, NSEC3, PTR, DNSKEY, SSHFP, NAPTR
评论列表
文章目录