def _resolver(self): domains = [] domain_cname_record = [] for x in self.brute_out: if utils.check_domain_black(x["domain"]): continue domains.append(x["domain"]) self.brute_domain_map[x["domain"]] = x["record"] if x["type"] == 'CNAME': item = x["domain"].lower() if utils.check_domain_black(item): continue if utils.domain_parsed(item): self.domain_cnames.append(item) domain_cname_record.append(x["record"]) for domain in domain_cname_record: if not domain.endswith(self.base_domain_scope): continue if domain not in domains: domains.append(domain) start_time = time.time() logger.info("start reslover {}".format(self.base_domain, len(domains))) self.resolver_map = services.resolver_domain(domains) elapse = time.time() - start_time logger.info("end reslover {} result {}, elapse {}".format( self.base_domain, len(self.resolver_map), elapse))
def build_domain_info(self, domains): """ 构建domain_info_list 带去重功能 """ fake_list = [] domains_set = set() for item in domains: domain = item if isinstance(item, dict): domain = item["domain"] domain = domain.lower().strip() if domain in domains_set: continue domains_set.add(domain) if utils.check_domain_black(domain): continue fake = { "domain": domain, "type": "CNAME", "record": [], "ips": [] } fake_info = modules.DomainInfo(**fake) if fake_info not in self.domain_info_list: fake_list.append(fake_info) if self.task_tag == "monitor": return fake_list domain_info_list = services.build_domain_info(fake_list) return domain_info_list
def _fetch_domains(self): base_len = len(self.base_domain) for item in self.doamin_info_list: if not item.domain.endswith("." + self.base_domain): continue if utils.check_domain_black("a." + item.domain): continue self.domains.append(item.domain) subdomain = item.domain[:-(base_len + 1)] if "." in subdomain: self.subdomains.append(subdomain.split(".")[-1]) random.shuffle(self.subdomains) most_cnt = 50 if len(self.domains) < 1000: most_cnt = 30 self.dicts.extend(self._load_dict()) sub_dicts = list( dict(Counter(self.subdomains).most_common(most_cnt)).keys()) self.dicts.extend(sub_dicts) self.dicts = list(set(self.dicts))
def _resolver(self): domains = [] domain_cname_record = [] for x in self.brute_out: current_domain = x["domain"].lower() if not utils.domain_parsed(current_domain): continue # 删除掉过长的域名 if len(current_domain) >= Config.DOMAIN_MAX_LEN: continue if utils.check_domain_black(current_domain): continue if current_domain not in domains: domains.append(current_domain) self.brute_domain_map[current_domain] = x["record"] if x["type"] == 'CNAME': self.domain_cnames.append(current_domain) current_record_domain = x['record'] if not utils.domain_parsed(current_record_domain): continue if utils.check_domain_black(current_record_domain): continue if current_record_domain not in domain_cname_record: domain_cname_record.append(current_record_domain) for domain in domain_cname_record: if not domain.endswith(self.base_domain_scope): continue if domain not in domains: domains.append(domain) start_time = time.time() logger.info("start reslover {} {}".format(self.base_domain, len(domains))) self.resolver_map = services.resolver_domain(domains) elapse = time.time() - start_time logger.info("end reslover {} result {}, elapse {}".format( self.base_domain, len(self.resolver_map), elapse))
def check_domain_black(): a = utils.check_domain_black("tcdnff.qq.com") print(a) b = utils.check_domain_black("test.tcdn.qq.com") print(b)