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
此条目发表在dns分类目录。将固定链接加入收藏夹。

发表评论