static async Task FqdnScanAsync(ConsoleService c, string cmdName, string str) { ConsoleParam[] args = { new ConsoleParam("[subnets]", ConsoleService.Prompt, "Subnets: ", ConsoleService.EvalNotEmpty, null), new ConsoleParam("servers"), new ConsoleParam("threads"), new ConsoleParam("interval"), new ConsoleParam("try"), new ConsoleParam("shuffle"), new ConsoleParam("fqdnorder"), new ConsoleParam("dest"), new ConsoleParam("ports"), }; ConsoleParamValueList vl = c.ParseCommandList(cmdName, str, args); string subnets = vl.DefaultParam.StrValue; string servers = vl["servers"].StrValue; int threads = vl["threads"].IntValue; int interval = vl["interval"].IntValue; int numtry = vl["try"].IntValue; bool shuffle = vl["shuffle"].StrValue._ToBool(true); bool fqdnorder = vl["fqdnorder"].StrValue._ToBool(true); string csv = vl["dest"].StrValue; string portsStr = vl["ports"].StrValue; PortRange portRange = new PortRange(portsStr); var serversList = servers._Split(StringSplitOptions.RemoveEmptyEntries, " ", " ", ",", "|"); if (serversList._IsEmpty()) { serversList = new string[] { "8.8.8.8", "8.8.4.4", "1.1.1.1", "3.3.3.3" }; } List <IPEndPoint> endPointsList = new List <IPEndPoint>(); serversList._DoForEach(x => endPointsList.Add(new IPEndPoint(x._ToIPAddress() !, 53))); using DnsHostNameScanner scan = new DnsHostNameScanner( settings: new DnsHostNameScannerSettings { Interval = interval, NumThreads = threads, NumTry = numtry, PrintStat = true, RandomInterval = true, Shuffle = shuffle, PrintOrderByFqdn = fqdnorder, TcpPorts = portRange.ToArray(), }, dnsSettings: new DnsResolverSettings(dnsServersList: endPointsList, flags: DnsResolverFlags.UdpOnly | DnsResolverFlags.RoundRobinServers)); var list = await scan.PerformAsync(subnets); if (csv._IsFilled()) { using var csvWriter = Lfs.WriteCsv <FqdnScanResult>(csv, false, true, writeBom: false, flags: FileFlags.AutoCreateDirectory); foreach (var item in list) { if (item.HostnameList._IsFilled()) { FqdnScanResult r = new FqdnScanResult(); r.IpSortKey = IPAddr.FromAddress(item.Ip).GetZeroPaddingFullString(); r.Ip = item.Ip.ToString(); r.FqdnSortKey = Str.ReverseFqdnStr(item.HostnameList.First()).ToLowerInvariant(); r.FqdnList = item.HostnameList._Combine(" / "); r.TcpPortList = item.TcpPorts.Select(x => x.ToString())._Combine(" / "); csvWriter.WriteData(r); } } } }