Obtener IP, Puerta de enlace y DNS con Visual Basic 6

Acceder a los parámetros de Red desde Visual Basic, no es algo sencillo. Cuando menos requerirá acceder a información del registro o hacer uso de las API de Windows.

Pero no es necesario bucear tan profundo para lograrlo. El siguiente código permite obtener los parámetros comunes de la red desde el viejo lenguaje VB6.

El método que he usado es algo tosco, pero efectivo, si es que se tiene el sistema operativo configurado en español y no se tiene una configuración complicada en la Red. Se basa en ejecutar el comando «ipconfig» de Windows y luego leer la salida del comando. Así de simple.

Pueden pegar este código en un formulario vacío:

Option Explicit

Private Declare Sub Sleep Lib «kernel32» (ByVal dwMilliseconds As Long)

Private Function LeeConfiguraciónRed() As String
‘Lee la IP local, la puerta de enlace y los DNS. Devuelve una cadena con los
‘tres parámetros en 3 líneas.
Dim arcSal As String
Dim tic As Integer
Dim nar As String
Dim lin As String, tmp As String
    arcSal = «d:ip.txt»
    BorraArc arcSal
    Shell «cmd /c ipconfig /all > » & arcSal
    tic = 0 ‘para esperar hasta 10 segundos
    While Not Dispon(arcSal) And tic < 10
        Sleep 50    ‘espera
        DoEvents    ‘para no retrasar los eventos
        tic = tic + 1
    Wend
    If Dispon(arcSal) Then
        nar = FreeFile
        ‘captura IP
        Open arcSal For Input As #nar
        While Not EOF(nar)
            Line Input #nar, lin
            If lin Like «*IPv4. *» Then tmp = tmp & lin & vbCrLf
        Wend
        Close #nar
        ‘captura Puerta de enlace
        Open arcSal For Input As #nar
        While Not EOF(nar)
            Line Input #nar, lin
            If lin Like «*Puerta de enlace *» Then
                tmp = tmp & lin & vbCrLf
            End If
        Wend
        Close #nar
        ‘captura Puerta de enlace
        Open arcSal For Input As #nar
        While Not EOF(nar)
            Line Input #nar, lin
            If lin Like «*Servidores DNS. *» Then
                tmp = tmp & lin & vbCrLf
                Line Input #nar, lin    ‘siguiente DNS
                tmp = tmp & lin
            End If
        Wend
        Close #nar
        LeeConfiguraciónRed = tmp
    Else
        LeeConfiguraciónRed = «Error leyendo configuración»
    End If
End Function

Private Sub Form_Load()
    MsgBox LeeConfiguraciónRed()
End Sub

Function BorraArc(arc As String) As Boolean
‘Borra un archivo. Devuelve TRUE si lo logra.
    If Dir(arc) = «» Then
        BorraArc = True     ‘No existía
        Exit Function
    End If
    On Error Resume Next
    Kill arc
    If Err.Number = 0 Then
        BorraArc = True
    Else            ‘falló
        BorraArc = False
    End If
    On Error GoTo 0
End Function

Function Dispon(arc As String) As Boolean
‘Verifica disponibilidad de archivo
Dim pos As Long
Dim cad As String
Dim arc_temp As String
    arc_temp = arc & «.chg»          ‘inicia
    If Dir(arc_temp) <> «» Then Kill arc_temp   ‘si ya existe lo borra
    On Error Resume Next
    Name arc As arc_temp
    If Err.Number = 0 Then    ‘se cambio de nombre
        Name arc_temp As arc  ‘devuelve nombre
        Dispon = True
    Else                      ‘falló, no está listo
        Dispon = False
    End If
    On Error GoTo 0
End Function

El código lanza el comando «cmd /c ipconfig /all» mediante la instrucción Shell, redireccionando la salida a un archivo y luego espera hasta que el comando termine de ejecutarse.

Luego, mediante análisis del contenido del archivo, se extraen los parámetros buscados, explorando línea por línea y reconociendo patrones. Por ejemplo para extraer la dirección IP, se busca la línea que contiene el texto «IPv4.», que es parte de la salida del comando IPCONFIG:

Adaptador de Ethernet Conexión de área local:
Sufijo DNS específico para la conexión. . :
Vínculo: dirección IPv6 local. . . : fe60::55ff:ff83:ff:fdc
Dirección IPv4. . . . . . . . . . . . . . : 192.168.1.30
Máscara de subred . . . . . . . . . . . . : 255.255.255.0
Puerta de enlace predeterminada . . . . . : 192.168.1.1

Hay que notar que el texto de salida del comando IPCONFIG viene en el idioma configurado en el sistema operativo, y el código aquí mostrado, solo funcionará cuando esté en español.

En fin, pueden haber mejores formas de acceder a la información de Red, pero este método es sencillo y portable para diversas versiones de Windows.


2 comentarios

  1. hola tito

    se ve intersante tu codigo pero al aplicarlo me sale error debe ser por la version actual de windows , haber si actualizas tu codigo para poder probarlo, gracias

    • Hola.
      Este código lo escribí hace mucho tiempo, cuando todavía usaba VB6. Desgraciadamente ahora ya no tengo acceso a VB6 para probar el código en un sistema más moderno. Siempre me sorprende que este lenguaje, ya descontinuado, se siga usando aún hoy en día. Si tengo oportunidad, trataré de actualizarlo.

Dejar una contestacion

Tu dirección de correo electrónico no será publicada.


*