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