def record_reader(self, zone_file): with open(zone_file, 'r') as root_hints_file: for line in root_hints_file: if not line or line[0] == ';': continue tokens = re.split(r'\s*\s', line.rstrip()) if len(tokens) == 5: (name, ttl, rclass, rtype, rdata) = tokens rclass = DnsRClass[rclass] elif len(tokens) == 4: (name, ttl, rtype, rdata) = tokens rclass = DnsRClass.IN # lets just assume else: # Don't know what this is continue try: rtype = DnsRType[rtype] ttl = int(ttl) except ValueError: self.log.critical('Malformed glue records.') continue name = DomainName.from_string(name) if rtype == DnsRType.NS: record = DnsRecord(name, rtype, rclass, ttl, rdata=DomainName.from_string(rdata).encode()) elif rtype == DnsRType.A: record = DnsRecord(name, rtype, rclass, ttl, rdata=ipaddress.IPv4Address(rdata).packed) elif rtype == DnsRType.AAAA: record = DnsRecord(name, rtype, rclass, ttl, rdata=ipaddress.IPv6Address(rdata).packed) self.log.debug('Glue record: %s' % record) yield record