dnspython读取dnszone所有记录

需求

有时需要从zone文件里解析DNS的数据,做一些分析。可以利用dnspython库做zone的解析处理。
简单写一个如下

#!/usr/bin/env python  
import dns.zone  
import dns.ipv4  
import os.path  
import sys  
import os  
import string  
import re  
zonefile=sys.argv[1]  
name=sys.argv[2]  
class LOAD_ZONES:  
def  __init__(self,zonefile,name):  
self.types=("A","CNAME","TXT","SOA","MX","NS","PTR")  
self.record=dict()  
self.zonefile=zonefile  
self.name=name  
for type in self.types:  
self.record[type]=dict()  
try:  
zoneload= dns.zone.from_file(f=self.zonefile,origin=self.name,check_origin=False,relativize=False)  
for type in self.types:  
for (name, ttl, rdata) in zoneload.iterate_rdatas(type):  
dname=str(name)  
l = self.record[type].get(dname)  
if l is None:  
self.record[type][dname] = set()  
if type == "A":  
self.record[type][dname].add( ("%s-%s") % (ttl,rdata.address ) )  
else:  
self.record[type][dname].add( ("%s-%s") % (ttl,rdata.to_text().lower()) )  
except dns.zone.NoSOA:  
print "%s no soa" % self.zonefile  
except dns.zone.NoNS:  
print "%s no ns" % self.zonefile  
def dump_record(self):  
for type in self.types:  
for k in self.record[type].keys():  
print k,type,self.record[type][k]  
def __del__(self):  
pass  
  
dns=LOAD_ZONES(zonefile,name)  
dns.dump_record()

输入

./load_zone.py test.org.zone test.org