Ir al contenido



Foto

Redirigir puerto en el router usando UPnP desde Delphi


  • Por favor identifícate para responder
4 respuestas en este tema

#1 seoane

seoane

    Advanced Member

  • Administrador
  • 1.244 mensajes
  • LocationEspaña

Escrito 03 julio 2012 - 03:22

Pues como dice el titulo, el siguiente programa permite redirigir un puerto en el router usando UPnP.

El único requisito es que nuestro router tenga UPnP (lo mayoría de los modernos lo tienen) y que este habilitado (suele estar por defecto).

El código:


delphi
  1. program Openport;
  2.  
  3. {$APPTYPE CONSOLE}
  4.  
  5. uses
  6.   Windows,
  7.   SysUtils,
  8.   Variants,
  9.   ComObj,
  10.   ActiveX;
  11.  
  12. var
  13.   NATUPnP: OleVariant;
  14.   Ports: Variant;
  15.   Table: IUnknown;
  16.   Enum : IEnumVARIANT;
  17.   Item: OleVariant;
  18.   Fetched: Cardinal;
  19. begin
  20.   Writeln('Openport 0.1');
  21.   Writeln;
  22.   CoInitialize(nil);
  23.   try
  24.     try
  25.       NATUPnP:= CreateOleObject('HNetCfg.NATUPnP');
  26.       Ports:=  NATUPnP.StaticPortMappingCollection;
  27.       if not ((ParamCount = 1) and (Uppercase(ParamStr(1)) = '-L')) then
  28.         if (ParamCount <> 5) then
  29.         begin
  30.           Writeln('Openport [-l] [TCP/UDP Remoto IP Local Descripcion]');
  31.           Writeln;
  32.           Writeln;
  33.           Exit;
  34.         end else
  35.         begin
  36.           Ports.Add(StrToInt(ParamStr(2)),Uppercase(ParamStr(1)),
  37.             StrToInt(ParamStr(4)),ParamStr(3),TRUE,ParamStr(5));
  38.         end;
  39.       Writeln('=== Portmap Table ===');
  40.       Writeln('Count: ' + VarToStr(Ports.Count));
  41.       Writeln;
  42.       Table:= Ports._NewEnum;
  43.       Enum:= Table as IEnumVariant;
  44.       Enum.Reset;
  45.       Enum.Next(1, Item, Fetched);
  46.       Writeln(Format('%-6.6s%-7.7s%-16.16s%-7.7s%s',[
  47.         'Prot.','Ext.','IP','Int.','Desc.']));
  48.       while Fetched = 1 do
  49.       begin
  50.         try
  51.           if Item.Enabled then
  52.           begin
  53.             Writeln(Format('%-6.6s%-7.7s%-16.16s%-7.7s%s',[
  54.               VarToStr(Item.Protocol),
  55.               VarToStr(Item.ExternalPort),
  56.               VarToStr(Item.InternalClient),
  57.               VarToStr(Item.InternalPort),
  58.               VarToStr(Item.Description)]));
  59.           end;
  60.         finally
  61.           Enum.Next(1, Item, Fetched);
  62.         end;
  63.       end;
  64.     except
  65.       On E: Exception do
  66.       begin
  67.         Writeln;
  68.         Writeln;
  69.         Writeln('Error: ' + E.Message);
  70.       end;
  71.     end;
  72.   finally
  73.     CoUninitialize;
  74.   end;
  75.   Writeln;
  76.   Writeln;
  77. end.



Por ejemplo:


delphi
  1. E:\Openport>openport tcp 11111 192.168.0.2 22222 Prueba
  2. Openport 0.1
  3.  
  4. === Portmap Table ===
  5. Count: 79
  6.  
  7. Prot. Ext.  IP              Int.  Desc.
  8. TCP  12345  192.168.0.2    3389  Remote Desktop [MICROSOFT]
  9. TCP  1234  192.168.0.100  1234  Test [MICROSOFT]
  10. UDP  45678  192.168.0.2    45678  UDP Test [MICROSOFT]
  11. TCP  54321  192.168.0.3    22    ServidorNX [MICROSOFT]
  12. TCP  11111  192.168.0.2    22222  Prueba



Saludos

  • 1

#2 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 13.962 mensajes
  • LocationMéxico

Escrito 03 julio 2012 - 03:36

Vaya

Y  no se requiere de algún password ? digo, me espanta que sea tan transparente hacer ese NAT :s

Saludos
  • 0

#3 seoane

seoane

    Advanced Member

  • Administrador
  • 1.244 mensajes
  • LocationEspaña

Escrito 03 julio 2012 - 03:54

Y  no se requiere de algún password ? digo, me espanta que sea tan transparente hacer ese NAT :s


Pues no, no hace falta ningún password. A que da miedo !!!  :s  :D

Es lo mismo que utilizan programas como emule, utorrent, messnger, etc ... para redirigir los puertos de manera transparente para el usuario.
  • 0

#4 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 13.962 mensajes
  • LocationMéxico

Escrito 03 julio 2012 - 03:57


Y  no se requiere de algún password ? digo, me espanta que sea tan transparente hacer ese NAT :s


Pues no, no hace falta ningún password. A que da miedo !!!  :s  :D

Es lo mismo que utilizan programas como emule, utorrent, messnger, etc ... para redirigir los puertos de manera transparente para el usuario.


Pues que decir, por eso es tan fácil meterse en problemas :D :D :D

Saludos
  • 0

#5 sir.dev.a.lot

sir.dev.a.lot

    Advanced Member

  • Miembros
  • PipPipPip
  • 545 mensajes
  • Location127.0.0.1

Escrito 25 diciembre 2016 - 12:37

Interesante... el Codigo...

 

Me muestra un Error, y mi Router soporta UPNP... Alguna mejora ?

 

Saludos!


  • 1