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
25visitas
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.