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