El Blog de Gualtrysoft

Windows 2000/2003/2008, Active Directory, VBScript, Hyper-V, PowerShell y todo aquello interesante a la hora de usar, configurar y administrar Windows Server. También tenemos longanizas…

Script VBSCript Para Cambiar La Puerta De Enlace De Un Equipo

Posted by urpiano en Sábado 9 \09\UTC diciembre \09\UTC 2006

Este script VBScript nos permite cambiar la puerta de enlace del equipo local, dejando la IP que tenía. Se puede asignar como script de arranque de equipo, en una GPO, y así automatizar el cambio de puerta de enlace de los equipos que se desee. La sintaxis es:

cscript //nologo cambia-mascara-de-red.vbs ip máscara nueva máscara

Siendo:

  • ip: una ip del segmento de red al que queremos cambiar la máscara de red.
  • máscara: la máscara de red de la subred a la que queremos cambiar la máscara.
  • nueva_mascara: la nueva máscara de red que queremos establecer.

Ejemplo:

cscript //nologo cambia-mascara-de-red.vbs 192.168.2.0 255.255.255.0 255.255.248.0

El script sólo afectará a aquellas conexiones de red que tengan establecida una IP y que no obtengan sus propiedades de red de forma dinamica (que no usen DHCP, vaya).

Este es el código del script:

'Este script se encarga de cambiar la máscara de red  para aquellas IPs que
'coincidan con el entorno de red recibido como IP y máscara y la cambia a
'la máscara que se recibió como parámetro. trabaja con el equipo local
'
'La sintaxis es:
'
'cscript //nologo cambia-mascara-de-red.vbs <ip> <máscara> <nueva máscara>
'
'Ejemplo:
'
'cscript //nologo cambia-mascara-de-red.vbs 192.168.1.0 255.255.255.0 255.255.0.0
'
'© Fernando Reyes - 12/2006


'Requerimos declaración de variables
Option Explicit

'Declaración de variables
Dim str_Equipo
Dim str_IPSubred
Dim str_MascaraSubred
Dim str_NuevaMascara
Dim obj_ServicioWMI
Dim col_Conexiones
Dim obj_Conexion

'Revisamos que se ha recibido el número de parámetros necesario
If Not WScript.Arguments.Count = 3 Then

    WScript.Echo "Número de argumentos erroneo." & vbCrLf
    WScript.Echo "La sintaxis del script es:" & vbCrLf
    WScript.Echo "cscript //nologo cambia-mascara-de-red.vbs " & _
                  "<ip de subred> <máscara de subred> <nueva máscara>" & _
                  vbCrLf
    WScript.Echo "Ejemplo:" & vbCrLf
    WScript.Echo "cscript //nologo cambia-mascara-de-red.vbs " & _
                  "192.168.0.1 255.255.255.0 255.255.248.0"

    WScript.Quit 1

End If


'Establecemos el equipo local
str_Equipo = "."

'str_IPSubred y str_MascaraSubred nos definen la subred que queremos
'cambiar. str_NuevaMascara es la nueva máscara que queremos establecer
str_IPSubred = WScript.Arguments(0)
str_MascaraSubred = WScript.Arguments(1)
str_NuevaMascara = WScript.Arguments(2)

'Conectamos con el servicio WMI
Set obj_ServicioWMI = GetObject("winmgmts:" & str_Equipo & "rootCIMV2") 

'Obtenemos una colección con las conexiones de red
Set col_Conexiones = obj_ServicioWMI.ExecQuery( _
    "SELECT * FROM Win32_NetworkAdapterConfiguration",,48) 

'Recorremos las conexiones
For Each obj_Conexion in col_Conexiones 


    'Sólo nos interesan las conexiones con propiedades establecidas
    'y que no sean clientes DHCP
    If Not isNull(obj_Conexion.IPSubnet) _
    And Not obj_Conexion.DHCPEnabled Then

        'Miramos si no están en la misma subred que queda definida por 
        'str_IPSubred y str_MascaraSubred, ya que sólo queremos cambiar
        'la máscara a las IPs de determinado segmento de red, no a todas.
        'Usamos la función Join para convertir los arrays en que se 
        'guardan IP y máscara en un objeto 
        'Win32_NetworkAdapterConfiguration al formato de cadena típico
        If f_MismaSubred( _
                         str_IPSubred, _
                         Join(obj_Conexion.IPAddress,"."), _
                         str_MascaraSubred, _
                         Join(obj_Conexion.IPSubnet,".")) Then

            'Establecemos la nueva máscara asignando su IP y máscara
            'usando el método EnableStatic y conservando la IP que
            'tenía
            err_EnableStatic = obj_Conexion.EnableStatic( _
                                             obj_Conexion.IPAddress, _
                                             Array(str_NuevaMascara))
   
        End If

    End If

Next

'Nos limpiamos el culito :-)
Set obj_Conexion = Nothing
Set col_Conexiones = Nothing
Set obj_ServicioWMI = Nothing


Function f_MismaSubred(str_IP1, str_IP2, str_Mascara1, str_Mascara2)
'Esta función recibe dos parejas de IPs y máscaras y verifica si
'ambas pasejas definen la misma subred. En caso afirmativo devuelve
'True, en caso negativo False. Lo primero que hace la función es 
'comprobar que las máscaras sean iguales (de no hacerlo así, nos
'encontraríamos con que 192.168.0.1 255.255.255.0 y 192.168.0.1
'255.255.248.0 serían considerados del mismo segmento de red, lo cual
'no es correcto)

    Dim arr_IP1, arr_IP2
    Dim arr_Mascara1, arr_Mascara2
    Dim byt_And1, byt_And2
    
    'Si no es la misma mascara, no es la misma subred
    If not str_Mascara1 = str_Mascara2 Then

        f_MismaSubred = False
        Exit Function

    End If

    'Hacemos array las direcciones y las máscaras
    arr_IP1 = Split(str_IP1,".")
    arr_IP2 = Split(str_IP2,".")
    
    arr_Mascara1 = Split(str_Mascara1,".")
    arr_Mascara2 = Split(str_Mascara2,".")

    'Por ser arrays las direcciones y máscaras, podemos ir byte a byte
    'realizando la operación And. En el caso de que en cualquiera de los
    'bytes la operación And diferiera, estaríamos en distintas subredes
    For byt_Indice = 0 To 3

        byt_And1 = arr_IP1(byt_Indice) And arr_Mascara1(byt_Indice)
        byt_And2 = arr_IP2(byt_Indice) And arr_Mascara2(byt_Indice)

        If Not (byt_And1 = byt_And2) Then

            f_MismaSubred = False
            Exit Function

        End If
    
    Next

    'Si hemos llegado hasta aquí, pertenecen ambas a la misma subred
    f_MismaSubred = True

End Function

4 comentarios to “Script VBSCript Para Cambiar La Puerta De Enlace De Un Equipo”

  1. Victor said

    Estimado

    Excelene portal de aprendizaje….bravo

    Consulta algun script que te permita configura una IP nueva + la mascara y la puerta de enlace dependiendo de el segmenton donde se encuentre 1.0 p 2.0 etc

    Agradeciendo la gestion

    atte
    vitoconet

  2. urpiano said

    Victor,

    Con exactitud no sé lo que quieres. Sí te puedo decir, que se puede obtener la/s IP/s que tiene un equipo con este script:

    List IP Addresses for a Computer

    Con este otro puedes cambiar la IP máscara y puerta de enlace del equipo:

    Assign a Static IP Address

  3. Marc said

    Amazing! This blog looks exactly like my old one!
    It’s on a totally different subject but it has pretty much the same page layout and design. Outstanding choice of colors!

  4. Excellent blog here! Also your web site loads up very fast!
    What host are you the use of? Can I get your affiliate hyperlink
    for your host? I wish my web site loaded up as fast as yours lol

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

 
A %d blogueros les gusta esto: