Пример #1
0
        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();
        }
Пример #2
0
        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;
        }