2 Abril, 2011 a las 21:17

El viernes ocurrió un pequeño problema en el trabajo y es que cambiaron el cliente de VPN y la gente no se podía conectar, esto era por que tenían habilitado el proxy y al tratar de pasar la conexión por dentro del proxy sin estar conectados a la red corporativa los echaba para atrás. Si el usuario deshabilitaba el proxy en opciones de Internet conectaba sin problemas.

Aunque la solución fue permitir esta conexión en el proxy se me ocurrió una idea para deshabilitar el proxy temporalmente mientras se está ejecutando una aplicación, volviendolo a conectar en el momento que el programa se cierre, así que al llegar a casa me puse a programar. Viene bien si un usuario necesitara conectarse a una VPN externa a la de una empresa desde una red no corporativa, lo cual no es nada descabellado, imaginemos un trabajador que conecta a través de una 3G y debe enviar informes a una intranet de un cliente, por ejemplo. El programa tendrá deshabilitado el proxy mientras el programa encargado de la conexión VPN (Por ejemplo Cisco VPN Client) y lo volverá a habilitar una vez desconectado.

El programa es muy sencillo pero efectivo para estos casos ya que lo deshabilita de forma transparente para el usuario que no tiene por que notar nada raro.

El programa se compone de dos partes, antiProxy.exe y antiProxy.txt.

En el fichero antiProxy.txt debemos ubicar la ruta del ejecutable que se debe ejecutar sin usar la conexión del proxy.

A continuación os pongo la descarga del binario y el código fuente en VB.Net comentado.

Descarga el binario: antiProxy.zip

Sigue leyendo para ver el código fuente.

Código fuente

Imports System
Imports System.IO
Imports System.Collections

Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim autoConfigURL As String 'Guardará la URL de scripts automaticas
        Dim proxyEnable As Boolean 'Guardará si está habilitado el proxy (la opcion de abajo en la ventana conexiones)
        Dim urlProceso As String 'Proceso a ejecutar sin el proxy

        'Lee el archivo de configuracion el cual contiene el path al ejecutable a lanzar
        Try
            Dim objReader As New StreamReader(".\antiProxy.txt")
            urlProceso = objReader.ReadLine

            If IO.File.Exists("""" & urlProceso & """") Or urlProceso.Replace(" ", "") = "" Then 'Si el ejecutable no existe
                MsgBox("El ejecutable definido en antiProxy.txt no existe")
                End
            End If
        Catch ex As Exception
            MsgBox("No existe el archivo de configuración antiProxy.txt") ' Si el fichero de configuracion no existe
            End
        End Try

        'Windows Script Host
        Dim MiObjeto As Object
        MiObjeto = CreateObject("Wscript.Shell")

        'Comprueba si existe URL de scripts automaticos y si es así la deshabilita
        Try
            autoConfigURL = MiObjeto.RegRead("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\AutoConfigURL")
            MiObjeto.RegDelete("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\AutoConfigURL")
        Catch ex As Exception
            autoConfigURL = "0"
        End Try

        'Comprueba si el proxy está habilitado y si es así lo deshabilita
        Try
            If MiObjeto.RegRead("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ProxyEnable") = 1 Then
                proxyEnable = True
                MiObjeto.RegDelete("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ProxyEnable")
            Else
                proxyEnable = False
            End If
        Catch ex As Exception
            proxyEnable = False
        End Try

        'Lanza el proceso y se mantiene a la espera
        Dim proceso As New Process
        proceso.StartInfo.FileName = """" & urlProceso.Trim & """"
        proceso.Start()
        proceso.WaitForExit()

        'Restaura los valores del proxy

        If autoConfigURL <> "0" Then
            MiObjeto.RegWrite("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\AutoConfigURL", autoConfigURL, "REG_SZ")
        End If

        If proxyEnable = True Then
            MiObjeto.RegWrite("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ProxyEnable", 1, "REG_DWORD")
        End If
        End

    End Sub
End Class

Acerca de Miguel Díaz

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

Deja un comentario

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