需求

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