/// <summary> /// validate domain by nslookup /// </summary> /// <param name="dns"></param> /// <param name="fileName"></param> /// <param name="invalidDomains"></param> public static void ValidateDomains(IPAddress dns, string fileName, string invalidDomains = "invalid_domains.txt") { if (dns == null) { dns = IPAddress.Parse("8.8.8.8"); } if (string.IsNullOrEmpty(invalidDomains)) { invalidDomains = "invalid_domains.txt"; } ChinaList cl = new ChinaList(fileName); List <string> domains = cl.GetDomains(); //List<string> urls = cl.ParseURLs(); StringBuilder results = new StringBuilder(); //StringBuilder fullResult = new StringBuilder(); List <string> whiteList = new List <string>(); whiteList.Add("ns1.dnsv2.com"); Parallel.ForEach(domains, domain => { Console.WriteLine("Querying DNS records for domain: {0}", domain); QueryResult queryResult = DNSQuery(dns, domain); Console.Write(queryResult.ToString()); //fullResult.Append(queryResult.ToString()); bool ret = false; if (queryResult.NSCount < 1) { results.Append(queryResult.ToString()); return; } foreach (var ns in queryResult.NSList) { var t = ns; if (ns.Contains("=")) { t = ParseNameServer(ns); } try { IPHostEntry ip = Dns.GetHostEntry(t); QueryResult temp = DNSQuery(ip.AddressList[0], domain); if (temp.NSCount > 0 || whiteList.Contains(t)) { ret = true; break; } else { queryResult.Error += string.Format("\n[V]: ns->{0}, Count->{1}", t, temp.NSCount); } } catch (Exception ex) { queryResult.Error += string.Format("\n[V]: ns->{0}, Error->{1}", t, ex.Message); Console.WriteLine("Validate domain: {0}, ns: {1} Error: {2}", domain, t, ex.Message); } } if (!ret) { queryResult.Error += "\n[V]: validate domian fail."; results.Append(queryResult.ToString()); } }); Save(invalidDomains, results.ToString()); }
/// <summary> /// validate domain by nslookup /// </summary> /// <param name="dns"></param> /// <param name="fileName"></param> /// <param name="invalidDomains"></param> public static void ValidateDomains(IPAddress dns, string fileName, string invalidDomains = "invalid_domains.txt") { if (dns == null) dns = IPAddress.Parse("8.8.8.8"); if (string.IsNullOrEmpty(invalidDomains)) invalidDomains = "invalid_domains.txt"; ChinaList cl = new ChinaList(fileName); List<string> domains = cl.GetDomains(); //List<string> urls = cl.ParseURLs(); StringBuilder results = new StringBuilder(); //StringBuilder fullResult = new StringBuilder(); List<string> whiteList = new List<string>(); whiteList.Add("ns1.dnsv2.com"); Parallel.ForEach(domains, domain => { Console.WriteLine("Querying DNS records for domain: {0}", domain); QueryResult queryResult = DNSQuery(dns, domain); Console.Write(queryResult.ToString()); //fullResult.Append(queryResult.ToString()); bool ret = false; if (queryResult.NSCount < 1) { results.Append(queryResult.ToString()); return; } foreach (var ns in queryResult.NSList) { var t = ns; if (ns.Contains("=")) t = ParseNameServer(ns); try { IPHostEntry ip = Dns.GetHostEntry(t); QueryResult temp = DNSQuery(ip.AddressList[0], domain); if (temp.NSCount > 0 || whiteList.Contains(t)) { ret = true; break; } else { queryResult.Error += string.Format("\n[V]: ns->{0}, Count->{1}", t, temp.NSCount); } } catch (Exception ex) { queryResult.Error += string.Format("\n[V]: ns->{0}, Error->{1}", t, ex.Message); Console.WriteLine("Validate domain: {0}, ns: {1} Error: {2}", domain, t, ex.Message); } } if (!ret) { queryResult.Error += "\n[V]: validate domian fail."; results.Append(queryResult.ToString()); } }); Save(invalidDomains, results.ToString()); }