コード例 #1
0
ファイル: Dns.py プロジェクト: gostkin/networks-dns-hw
def find_recursive(domain: str, dns_servers: tp.Dict[str, str],
                   trace: Trace) -> tp.Optional[IpRecord]:
    for server_domain, host in dns_servers.items():
        trace.add(f"{host} {server_domain}")
        response = create_and_send_request(domain, host)
        if not response.request_success or not response.parsed_success:
            continue

        if response.aa:
            return response.get_a_ip_record()

        domains, servers = response.get_domains_and_servers()

        if len(servers) == 0 and len(domains) != 0:
            new_domain = domains[0]
            result = find_recursive(new_domain, ROOT_SERVERS_DNS, trace)
            if result:
                dns_servers = {new_domain: ip for _, ip in result.ips}
                return find_recursive(domain, dns_servers, trace)
        else:
            return find_recursive(domain, servers, trace)
    return None