需求
有时需要从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