InicioInfoAbrir puertos usando una script - uPNP
Abrir puertos usando una script - uPNP


Te voy a mostrar como se hace para abrir puertos usando una Script VBS en una Aplicación HTA.
Esto nos permite abrir y cerrar puestos con una aplicación simple y fácil de usar, sin necesidad de entrar a la pagina de nuestro modem o router.

INTRO

Si te interesan las script y la programación podes ver estos posts:




Una Miradita a la APP Fucnionando

Cuando la aplicación se inicia se abre una ventana y queda así:

script


Luego de que se detectan los dispositivos que tienen habilitado el uPNP se ve algo así:

puertos


Luego se selecciona el dispositivo al cual le queremos abrir los puertos y se ve esto:

vbscript

El código de la aplicación

Si quieres tener esta aplicacion en tu pc solo debes abrir un notepad, o block de notas o cualquier editor de textos copiar y pegar el codigo y grabarlo como upnp.hta, luego lo ejecutas y sin cambiar nada funciona para cualquier modem con uPnp activo.

Si utilizas esta script en otro sitio te pido que hagas una referencia a esta página.

Para quienes les interesa el código la script está auto documentada, lo básico así que te será fácil modificarla.


<Script language="VBScript">

Dim deviceFinder
Dim devices(10)
Dim CurrentID
Dim CurrentDevice
Dim GateWayService
Dim findData
Dim ds
dim DeviceCount

Set deviceFinder = CreateObject( "UPnP.UPnPDeviceFinder" )

sub window_onLoad
   ds=""
   window.resizeto 800,400
   DeviceCount=0
   StartFind()
end sub



'Esta funcion comienza la busqueda asincronica de dispositivos uPnp
'lo hace dependiendo de tipo de dispositivo a buscar
'en este caso se usa urn:schemas-upnp-org:service:Layer3Forwarding
' pero se puede usar tambien 
'
Sub StartFind()
  findData = devicefinder.CreateAsyncFind( "urn:schemas-upnp-org:service:Layer3Forwarding:1",0,GetRef("DeviceFinderCallback";))
  devicefinder.StartAsyncFind(findData)
End Sub

' esta funcion es llamada por el s.o. cada vez que se encuentra un dispositivo uPnp
' dependiendo del critero de busque utilizado 
' tambien se llama cuando se termina la busqueda
'
Sub DeviceFinderCallback (device, UDN, calltype)
  Select case calltype
    Case 0
      DeviceCount=DeviceCount+1
      ds=ds+"<option value=" & DeviceCount & ">" & Device.FriendlyName & "</option>"
      Set Devices(DeviceCount)=Device
    Case 1
      MsgBox "device removed: " & UDN

    Case 2
       UpdateList()
    end select
End Sub

'esta funcion se encarga de redibujar la pagina una vez que estan los dispositivos encontrados
'
Sub UpdateList()
   Document.body.innerHtml=_
"<form name=""SelectDevice"">"+_
"      <select id=""Devices"" Name=""Devices"" onchange=SelectDevice()>"+_
"         <option value=0> Seleccione un Dispositivo </option> "+_
ds+_
"      </select>"+_
"   </form>"+_
"   <form name=""puertos"">"+_
"      Seleccione"+_
"   </form>"

End Sub

' esta funcion se ejecuta cada vez que se selecciona un dispositivo de la lista desplegable
'
Sub SelectDevice()
   CurrentId=cint(document.SelectDevice.Devices.value)
   if CurrentId=0 then
      document.Forms("Puertos";).innerHTML=""
   Else
      set CurrentDevice = Devices(CurrentId)
      ShowData CurrentDevice
   End If
End Sub


' esta funcion llama a otra que muestra los puertos abiertos en el modem 

Sub ShowData(dv)
   dim dvc
   if dv.HasChildren then
       for each dvc in dv.children      
           if dv.HasChildren then
              for each dvc1 in dvc.children      
                 Showports dvc1
              Next
           End If
       Next
   end if
End Sub

' esta funcion muestra elemento por elemento los puertos abiertos
'
Function GetWanConn(inService)
   Dim retVal, emptyArgs(0), outArgs(20) 
   dim Args(1),oargs(8)
   dim indice
   dim entries
   s=""

   on error resume next
   s=s+"<table border= 1><tr><td>Puerto Externo</td><td>protocolo</td><td>Puerto Interno</td><td>Ip Local</td><td>Descripcion</td><td></td></tr>"
   s=s+"<tr>"
   s=s+"<td><INPUT TYPE=text NAME=p01></td>"
   s=s+"<td><SELECT NAME=p02><OPTION VALUE=TCP>TCP<OPTION VALUE=UDP>UDP</SELECT></td>"
   s=s+"<td><INPUT TYPE=text NAME=p03></td>"
   s=s+"<td><INPUT TYPE=text NAME=p04></td>"
   s=s+"<td><INPUT TYPE=text NAME=p06></td>"
   s=s+"<td><INPUT TYPE=Button NAME=Botonagregar VALUE=Add onClick=agregar()></td></tr>"

   retval = 0
   indice = 0
   Args(0) = "1"

   while ( retval = 0 )
      Args(0) = indice
      retVal = inService.InvokeAction("GetGenericPortMappingEntry", Args,oArgs) 
      if err <> 0 then
         retval = 1
      else
         s=s+CSTR(RETVAL)
         if ( retVal = 0 ) then
            s=s+"<tr><td>" & cstr(oargs(1)) & "</td><td>"& oargs(2) & "</td><td>"& cstr(oargs(3)) & "</td><td>"& oargs(4) & "</td><td>"& oargs(6) & "</td>"
            s=s+"<td><INPUT TYPE=Button NAME=Boton"& indice &" VALUE=Delete onClick=Borrar(" & indice & ")></td>"
            s=s+"</tr>"
            indice = indice + 1
         end if
      end if
   wend


   s=s+"</table>"

   on error goto 0

   GetWanConn=s
   Set GateWayService=inService
End Function

'esta funcion verifica los servicios del dispositivo 
' y llama a la funcion que muestra los datos del servicio
' se filtran solo los servicios de forwarding de puertos
'
Sub ShowPorts(inDevice) 
   dim service

   s=""
   
   For each service in inDevice.Services 
       If (service.ServiceTypeIdentifier = "urn:schemas-upnp-org:service:WANIPConnection:1") Then 
          s=s+GetWanConn(service) 
       End If
   Next 

   document.Forms("Puertos").innerHTML=s

End Sub

' Esta funcion se ejecuta cada vez que se agrega un nuevo puerto
' es cuando pulsmos el boton add
'
sub agregar()
   dim Args(8),oargs(1)

   args(0) = "0.0.0.0"
   args(1) = document.forms("Puertos").elements("p01").value
   args(2) = document.forms("Puertos").elements("p02").value
   args(3) = document.forms("Puertos").elements("p03").value
   args(4) = document.forms("Puertos").elements("p04").value
   args(5) = true
   args(6) = document.forms("Puertos").elements("p06").value
   args(7) = 0
   
   retVal = GateWayService.InvokeAction("AddPortMapping", Args,oArgs)
   ShowData(CurrentDevice)
end sub

<html>
<head>
<title>Port Forwarding App by @NeCroS</title>
<HTA:APPLICATION
  APPLICATIONNAME=" [email protected] "
  ID="ModemStatus"
  VERSION="1.0"
  SCROLL="yes"
  SINGLEINSTANCE="yes"
  'CAPTION="no"
  INNERBORDER="no"
  MAXIMIZEBUTTON="no"
  MINIMIZEBUTTON="no"
  SELECTABLE = "no"
  BORDER="Dialog"
/>
</head>
<body>
   Espera un cacho...<br>
   si querés quí ponele un gif animado...
</body>
</html>



En mi caso probé la APP con un router WiFi Tp-Link TL-WR743ND



Abrir puertos


upnp



  • Compartir el post estaría muy bueno.
  • Me costó un huevo hacer ásta script.
  • No sean forros y dejen un comentario.
  • Si se les caen algunos puntos no estaría de más
  • No comenten "mejor uso ...." porque la idea es aprender como se hace.
  • Si, si, es una porong@ el vbscript, pero con esto pueden probar sin instalar nada.
  • No comenten "el protocolo uPnp es inseguro ... bla bla bla ", Windows es inseguro y lo mismo se usa
  • Si usan la scrip o la comparten en otras paginas, mencionen el link a esta página
  • Si no les funciona y me mandan un mp mencionen el modelo y marca del router o modem
  • Buenisimo si se les cae una idea y aportan algo bueno para el post
  • Despues de un tiempo me quitan la edicion y no puedo incluir nada en el post
Datos archivados del Taringa! original
146puntos
953visitas
0comentarios
Actividad nueva en Posteamelo
0puntos
4visitas
0comentarios
Dar puntos:

Dejá tu comentario

0/2000

Autor del Post

N
NeCroS🇦🇷
Usuario
Puntos0
Posts27
Ver perfil →
PosteameloArchivo Histórico de Taringa! (2004-2017). Preservando la inteligencia colectiva de la internet hispanohablante.

CONTACTO

18 de Septiembre 455, Casilla 52

Chillán, Región de Ñuble, Chile

Solo correo postal

© 2026 Posteamelo.com. No afiliado con Taringa! ni sus sucesores.

Contenido preservado con fines históricos y culturales.