El blog de Miguel Díaz
Siguiente

RoboCAUpy

Copia eficiente de archivos, toda la potencia de robocopy con una interfaz sencilla y fácil de usar. Herramienta perfecta para migraciones de equipos y copia masiva de ficheros.Saber mas

Screenshot RoboCAUpy

mRemoto

Administra remotamente equipos, controlalos gráficamente o través de la línea de comandos, envía y recibe archivos, habla con el usuario y mucho mas sin ningún tipo de configuración previa.Saber mas

Screenshot mRemoto
screenshot mRemoto

DNSPropagationChecker

Controla la propagación DNS de cualquier dominio. Con un solo clic conocerás al instante si se ha propagado en los diferentes servidores DNS existentes.Saber mas

Acortador de nombres

Detecta ficheros con nombres largos, acortalos de forma masiva y reduce el tamaño de la ruta a la cantidad de carácteres que quieras.
Saber mas

screenshot Acortador Nombres
Anterior
Lunes 26 de diciembre del 2011

Hoy os presento una actualización del comprobador de propagación DNS que he desarrollado. Esta nueva versión incluye varias mejoras principales entre las que podemos destacar:

  • Actualización en tiempo real de los DNS comprobados, antes nos mostraba el resultado una vez se había comprobado en todos los DNS, ahora irá mostrando el resultado conforme se vaya comprobando.
  • Capacidad de usar diferentes listados de servidores DNS: Podremos elegir entre distintos listados DNS personalizados, porejemplo uno con servidores nacionales o internos de una empresa, otro con servidores extranjeros, etc.

Además se ha mejorado el resultado del programa logrando hasta un 30% mayor de precisión.

A continuación, como viene siendo habitual os dejo el código fuente:

Form1.vb

Imports System
Imports System.IO
Imports System.Text.RegularExpressions
Public Class DNSPropagationChecker
    Dim hilo As Threading.Thread
    Public Sub cargaListas()
        cbSeleccionListado.Items.Clear()
        Dim Ini As CIniClass
        Ini = New CIniClass
        Ini.Archivo = Application.StartupPath & "/dnspropagationchecker.ini"
        Dim contador As Integer = 1

Continuación de Form1.vb

        Dim servidor As String = "-1"
        While servidor <> ""
            servidor = Ini.LeeIni("LISTADOS", "LISTADO" & contador)
            If servidor <> "" Then
                cbSeleccionListado.Items.Add(servidor)
            End If
            contador += 1
        End While
        cbSeleccionListado.Items.Add("Nuevo listado")
    End Sub
    Public Sub cargaListadoDNS(ByVal listado As String)
        lbServidoresDNS.Items.Clear()
        lbServidoresDNS.Items.Add("Todos")
        Dim Ini As CIniClass
        Ini = New CIniClass
        Ini.Archivo = Application.StartupPath & "/dnspropagationchecker.ini"
        Dim contador As Integer = 1
        Dim servidor As String = "-1"
        While servidor <> ""
            servidor = Ini.LeeIni(listado, "SERVIDOR" & contador)
            If servidor <> "" Then
                lbServidoresDNS.Items.Add(servidor)
            End If
            contador += 1
        End While
        lbServidoresDNS.SelectedIndex = 0
    End Sub
    Private Sub btAñadir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btAñadir.Click
        Form2.cantidadElementos = lbServidoresDNS.Items.Count()
        Form2.Show()
    End Sub
    'Esta funcion devueve true si la IP introducida es valida y false si no es valida
    Function compruebaIP(ByVal strFindin As String)
        Dim myRegex As New Regex("^(([01]?\d\d?|2[0-4]\d|25[0-5])\.){3}([01]?\d\d?|25[0-5]|2[0-4]\d)$")
        If myRegex.IsMatch(strFindin) Then
            compruebaIP = True
        Else
            compruebaIP = False
        End If
    End Function
    Private Sub DNSPropagationChecker_Leave(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Leave
        Try
            hilo.Abort()
        Catch ex As Exception
        End Try
    End Sub
    Private Sub DNSPropagationChecker_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        CheckForIllegalCrossThreadCalls = False
        cbSeleccionListado.SelectedIndex = 0
        'Comprueba que el INI exista, si no existe lo crea con los servidores de Google de ejemplo.
        If System.IO.File.Exists(Application.StartupPath & "/dnspropagationchecker.ini") = False Then
            Dim Ini As CIniClass
            Ini = New CIniClass
            Ini.Archivo = Application.StartupPath & "/dnspropagationchecker.ini"
            Ini.GrabaIni("LISTADOS", "LISTADO1", "Listado variado")
            Ini.GrabaIni("Listado variado", "SERVIDOR2", "8.8.4.4")
            Ini.GrabaIni("Listado variado", "SERVIDOR1", "8.8.8.8")
        End If
        Try
            cargaListas()
            cbSeleccionListado.SelectedIndex = 0
        Catch ex As Exception
            MsgBox("No se ha podido cargar dnspropagationchecker.ini")
            End
        End Try
    End Sub
    Private Sub btComprobar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btComprobar.Click
        'Desactiva los controles
        tbDominio.Enabled = False
        tbIP.Enabled = False
        btAñadir.Enabled = False
        lbIP.Enabled = False
        lbServidoresDNS.Enabled = False
        btComprobar.Text = "Comprobando..."
        btComprobar.Enabled = False
        lbDNSPropagados.Visible = True
        hilo = New Threading.Thread(AddressOf comprobar_propagacion)
        hilo.Start()
    End Sub
    Sub comprobar_propagacion()
        Dim cantidadDNS As Integer = 1
        Dim contador As Integer = 0
        'Comprueba que haya puesto un dominio
        tbDominio.Text = tbDominio.Text.Replace(" ", "")
        tbIP.Text = tbIP.Text.Replace(" ", "")
        lbIP.Items.Clear()
        If tbDominio.Text = "" Then
            MsgBox("Debe introducir un nombre de dominio", MsgBoxStyle.Information)
            rehabilitar_elementos()
            Exit Sub
        End If
        'Comprueba que haya puesto una IP valida
        If compruebaIP(tbIP.Text) = False Then
            MsgBox("Debe introducir una IP válida", MsgBoxStyle.Information)
            rehabilitar_elementos()
            Exit Sub
        End If
        'Si se ha elegido el servidor Todos, guarda en el array todos los DNS. Si solo elige uno
        'Crea un array valor 0 y mete el servidor DNS concreto
        If lbServidoresDNS.SelectedIndex = 0 Then
            cantidadDNS = lbServidoresDNS.Items.Count() - 1
        End If
        Dim arrayDNS(cantidadDNS - 1) As String
        If lbServidoresDNS.SelectedIndex = 0 Then
            While contador < lbServidoresDNS.Items.Count - 1
                arrayDNS(contador) = lbServidoresDNS.Items(contador + 1).ToString
                contador += 1
            End While
        Else
            arrayDNS(0) = lbServidoresDNS.Items(lbServidoresDNS.SelectedIndex).ToString
        End If
        lbDNSPropagados.Visible = True
        lbIP.Visible = True
        'Prepara el proceso nslookup para que no se muestre la ventana de DOS
        Dim proceso As New Process
        proceso.StartInfo.RedirectStandardOutput = True
        proceso.StartInfo.FileName = "nslookup.exe"
        proceso.StartInfo.UseShellExecute = False
        proceso.StartInfo.WindowStyle = ProcessWindowStyle.Hidden
        proceso.StartInfo.CreateNoWindow = True
        'Lo lanza contra cada servidor DNS recorriendo el array
        contador = 0
        While contador < arrayDNS.Length
            proceso.StartInfo.Arguments = "-retry=1 -timeout=1 " & tbDominio.Text & " " & arrayDNS(contador)
            proceso.Start()
            Dim sr As IO.StreamReader = proceso.StandardOutput
            Dim sb As New System.Text.StringBuilder("")
            Dim sinput As String = ""
            Do Until sinput = "-1"
                Dim resultado As String = sr.ReadLine
                'En caso de que devuelva algo con la IP buena, lo declara propagado
                If InStr(resultado, tbIP.Text) Then
                    anadir_elementos_listbox(arrayDNS(contador))
                ElseIf InStr(resultado, "timeout") Then
                    sinput = "-1"
                    proceso.Close()
                Else
                    sinput = sr.Read()
                End If
            Loop
            contador += 1
        End While
        If lbIP.Items.Count = 0 Then
            lbIP.Items.Add("Aún no se ha propagado en ningun servidor DNS seleccionado")
        End If
        'Reactiva los controles
        rehabilitar_elementos()
    End Sub
    Delegate Sub anadir_elementos_listboxCallback(ByVal elemento As String)
    Private Sub anadir_elementos_listbox(ByVal elemento As String)
        Try
            If lbIP.InvokeRequired Then
                Dim d As New anadir_elementos_listboxCallback(AddressOf anadir_elementos_listbox)
                Me.Invoke(d, elemento)
            Else
                lbIP.Items.Add(elemento)
            End If
        Catch ex As Exception
        End Try
    End Sub
    Delegate Sub rehabilitar_elementosCallback()
    Private Sub rehabilitar_elementos()
        If lbIP.InvokeRequired Then
            Dim d As New rehabilitar_elementosCallback(AddressOf rehabilitar_elementos)
            Me.Invoke(d)
        Else
            tbDominio.Enabled = True
            lbIP.Enabled = True
            lbServidoresDNS.Enabled = True
            btComprobar.Text = "Comprobar propagacion"
            btComprobar.Enabled = True
            tbIP.Enabled = True
            btAñadir.Enabled = True
        End If
    End Sub
    Private Sub LinkLabel1_LinkClicked(ByVal sender As System.Object, ByVal e As System.Windows.Forms.LinkLabelLinkClickedEventArgs) Handles LinkLabel1.LinkClicked
        System.Diagnostics.Process.Start("http://www.blogdemigueldiaz.com/?proyecto=DNSPropagationChecker")
    End Sub
    Private Sub cbSeleccionListado_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbSeleccionListado.SelectedIndexChanged
        If cbSeleccionListado.SelectedItem.ToString <> "" And cbSeleccionListado.SelectedIndex < cbSeleccionListado.Items.Count - 1 Then
            cargaListadoDNS(cbSeleccionListado.SelectedItem.ToString)
        Else
            formNuevoListado.Show()
        End If
    End Sub
End Class

Form2.vb

Public Class Form2
    Dim listadoActual As String = DNSPropagationChecker.cbSeleccionListado.SelectedItem.ToString
    Public cantidadElementos As Integer = 0
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        'Guarda el DNS en el .ini
        If DNSPropagationChecker.compruebaIP(tbIPServidor.Text) = True Then
            Dim Ini As CIniClass
            Ini = New CIniClass
            Ini.Archivo = Application.StartupPath & "/dnspropagationchecker.ini"
            Ini.GrabaIni(listadoActual, "SERVIDOR" & cantidadElementos, tbIPServidor.Text)
            DNSPropagationChecker.cargaListadoDNS(DNSPropagationChecker.cbSeleccionListado.SelectedItem.ToString)
            Me.Close()
        Else
            MsgBox("Esa no es una IP Valida", MsgBoxStyle.Information)
        End If
    End Sub
End Class

formNuevoListado.vb

Public Class formNuevoListado
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim cantidadElementos As Integer = DNSPropagationChecker.cbSeleccionListado.Items.Count
        If tbNombreListado.Text.Replace(" ", "") <> "" Then 'Si ha introducido algo en el cuadro de texto
            'Comprueba que no exista ya en el listado
            For contador As Integer = 0 To DNSPropagationChecker.cbSeleccionListado.Items.Count - 1 Step 1
                If DNSPropagationChecker.cbSeleccionListado.Items.Item(contador).ToString = tbNombreListado.Text Then
                    MsgBox("Ya existe un listado con ese nombre", MsgBoxStyle.Information)
                    Exit Sub
                End If
            Next
            Dim ini As New CIniClass
            ini.Archivo = Application.StartupPath & "/dnspropagationchecker.ini"
            ini.GrabaIni("LISTADOS", "LISTADO" & cantidadElementos, tbNombreListado.Text)
            DNSPropagationChecker.cargaListas()
            DNSPropagationChecker.cbSeleccionListado.SelectedIndex = DNSPropagationChecker.cbSeleccionListado.Items.Count - 2
        Else 'Si esta vacio
            MsgBox("Debes introducir un nombre para el listado", MsgBoxStyle.Information)
        End If
    End Sub
End Class
  • Tweet

Acerca de Miguel Díaz

Informático, enamorado de la programación, diseño Web y el deporte.
Categorías: DNSPropagationChecker, Servidores, Utilidades. Etiquetas: , , , , , .

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

*

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="" highlight="">

Blog de Miguel Díaz
Diseño Web por Miguel Díaz.