Exemplo n.º 1
0
    def start(self, domain, domain_type, level):
        super(dnszonetransfer, self).start(domain, domain_type, level)
        try:
            resolver = DnsHelper(domain)
            mx_list = resolver.get_mx()
            soa_list = resolver.get_soa()
            
            # issue#28: 放弃dns插件中txt记录的数据,这部分数据不能保证一定是关联IP
            # txt_list = resolver.get_txt()

            # spf_list = resolver.get_spf()
            transfer_list = resolver.zone_transfer()
        except:
            pass
        else:
            record_lists = [mx_list, soa_list, txt_list]

            domains = []
            ips = []
            for record_list in record_lists:
                if record_list:
                    for record in record_list:
                        domains.append(record[1])
                        if len(record) >= 3:
                            ips.append(record[2])

            if transfer_list:
                for record in transfer_list:
                    if 'zone_server' in record:
                        ips.append(record['zone_server'])
                        if 'name' in record:
                            dns_domain = record['name']
                        elif 'mname' in record:
                            dns_domain = record['mname']
                        elif 'target' in record:
                            dns_domain = record['target']
                        else:
                            dns_domain = ''
                        if dns_domain:
                            domains.append(dns_domain)
                        if 'adderss' in record:
                            ips.append(record['address'])
                    else:
                        ips.append(record['ns_server'])

            ips = list(set(ips))
            domains = list(set(domains))
            if domains or ips:
                self.result = {
                    'root_domain': [],
                    'ip': ips,
                    'domain': domains,
                }
        super(dnszonetransfer, self).end()
        return self.result