static void Main(string[] args) { String[] listaRegistros = null; string[] listaDns = null; /// -- Console.WriteLine("DnsPing 2015.03.03.02.30.fararoni at gmail.com"); Console.WriteLine("Bitácora: " + @bicacora); Console.WriteLine("<CTRL><C> Para Salir "); if (args.Length < 2) { Console.WriteLine("Uso: dnsping <segundos> <registros a buscar separados por espacio> "); System.Console.ReadKey(); return; } // Parámetros por consola try { delay = Convert.ToInt32(args[0]); delay *= 1000; Console.WriteLine("Segundos de espera en cada repetición: " + (delay / 1000)); if (delay < 0) return; } catch { Console.WriteLine("Uso: <segundos>: Número de segundo de espera en cada ciclo."); System.Console.ReadKey(); return; } try { listaRegistros = new String[args.Length - 1]; for (int i = 0; i < (args.Length - 1); i++) { listaRegistros[i] = args[i + 1]; } } catch { Console.WriteLine("Uso: <registro a buscar>: registro a buscar ej. www.google.com www.gnu.org"); System.Console.ReadKey(); return; } /// Parametros por el archivo try { listaDns = System.IO.File.ReadAllLines(@"DnsPing.listadns.txt"); } catch { Console.WriteLine("Error al leer el archivo: 'DnsPing.listadns.txt' ; en este archivo se deben listar los nombres de los servidores de nombres a usar. Ej. ns1.example.com"); System.Console.ReadKey(); return; } //--- using (System.IO.StreamWriter file = new System.IO.StreamWriter(@bicacora, true)) { file.WriteLine("Lista de Registros: "); foreach (string registro in listaRegistros) file.WriteLine(registro); file.WriteLine("Lista de DNS's: "); foreach (string dns in listaDns) file.WriteLine(dns); file.WriteLine("Segundos de espera en cada repetición: " + delay); } //--- System.Console.WriteLine("\n" + DateTime.Now); using (System.IO.StreamWriter file = new System.IO.StreamWriter(@bicacora, true)) { Registro r = new Registro(); file.WriteLine(r.HeaderLog()); } Thread[,] threadArrayDns = new Thread[listaDns.Length, listaRegistros.Length]; for (int i = 0; i < listaDns.Length; i++) { for (int j = 0; j < listaRegistros.Length; j++) { ResolveRecord rs = new ResolveRecord(); System.Console.WriteLine(String.Format("DNS {0,2} {1,-31} {2}", i, listaDns[i], listaRegistros[j])); threadArrayDns[i, j] = new Thread(rs.resolve); rs.bicacora = bicacora; rs.dns = listaDns[i]; rs.registro = listaRegistros[j]; rs.delay = delay; threadArrayDns[i, j].Start(); } } for (int i = 0; i < listaDns.Length; i++) { for (int j = 0; i < listaRegistros.Length; j++) { threadArrayDns[i, j].Join(); } } Console.WriteLine("Terminado"); System.Console.ReadKey(); }
public Registro resolve(String dns, String registro) { Registro r = new Registro(); r.NameServer = dns; r.Record = registro; r.IpNameServer = "?.?.?.?"; //1.- Resolver la IP del Servidor de DNS try { IPAddress address = IPAddress.Parse(r.NameServer); r.IpNameServer = r.NameServer; r.NameServer = ""; } catch (Exception) { ////--- Nada que hacer } if ("?.?.?.?".Equals(r.IpNameServer)) { try { r.FechaHora = string.Format("{0}", DateTime.Now); var IPs = JHSoftware.DnsClient.LookupHost(dns, JHSoftware.DnsClient.IPVersion.IPv4, OptionsDns); foreach (var IP in IPs) { r.IpNameServer = IP.ToString(); break; } } catch (DnsClient.NoDefinitiveAnswerException ndef) { foreach (JHSoftware.DnsClient.NoDefinitiveAnswerException.ServerProblem sp in ndef.ServerProblems) r.MensajeError.Append(string.Format("NS+ {0}", sp.ProblemDescription)); return r; } catch (Exception e) { r.MensajeError.Append(string.Format("NS- {0}", e.Message)); return r; } } //2.- Resolver la IP del RegistroDnsBuscado DateTime start = DateTime.Now; r.FechaHora = string.Format("{0}", start); try { var Options = new JHSoftware.DnsClient.RequestOptions(); Options.DnsServers = new System.Net.IPAddress[] { System.Net.IPAddress.Parse(r.IpNameServer) }; var Response = JHSoftware.DnsClient.Lookup(r.Record, JHSoftware.DnsClient.RecordType.A, Options); TimeSpan timeDiff = DateTime.Now - start; r.IpNameServer = string.Format("{0}", Response.FromServer); r.TiempoResolucion = string.Format("{0,7:0.00}", timeDiff.TotalMilliseconds); r.Autoritativo = (Response.AuthoritativeAnswer ? "Autoritativa" : "No Autoritativa"); r.Recursivo = (Response.RecursionAvailable ? "Recursivo" : "No Recursivo"); foreach (var Record in Response.AnswerRecords) { r.RegistroA.Append(string.Format("{0} {1} {2,3} {3,15}", Record.Name, Record.Type.ToString(), Record.TTL, Record.Data)); } } catch (DnsClient.NoDefinitiveAnswerException ndef) { TimeSpan timeDiff = DateTime.Now - start; r.TiempoResolucion = string.Format("{0,7:0.00}", timeDiff.TotalMilliseconds); foreach (JHSoftware.DnsClient.NoDefinitiveAnswerException.ServerProblem sp in ndef.ServerProblems) r.MensajeError.Append(sp.ProblemDescription); } catch (DnsClient.NXDomainException ex) { TimeSpan timeDiff = DateTime.Now - start; r.TiempoResolucion = string.Format("{0,7:0.00}", timeDiff.TotalMilliseconds); r.MensajeError.Append(ex.Message); } catch (JHSoftware.DnsClient.NoDataException ex) { TimeSpan timeDiff = DateTime.Now - start; r.TiempoResolucion = string.Format("{0,7:0.00}", timeDiff.TotalMilliseconds); r.MensajeError.Append(ex.Message); } catch (Exception e) { TimeSpan timeDiff = DateTime.Now - start; r.TiempoResolucion = string.Format("{0,7:0.00}", timeDiff.TotalMilliseconds); r.MensajeError.Append(e.Message); } //System.Console.WriteLine(r); return r; }