Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi UPNP / Portscan (https://www.delphipraxis.net/75512-upnp-portscan.html)

TKC 22. Aug 2006 11:02

Re: UPNP / Portscan
 
Liste der Anhänge anzeigen (Anzahl: 1)
also ich mache das so...

Delphi-Quellcode:
procedure AddPortClick(WANIPConn:UPnPService);
var
  sOut                       : OleVariant;
  sArg                       : OleVariant;
  ret                        : OleVariant;

begin
  if not Assigned(WANIPConn) then exit;

  try
    sOut := VarArrayCreate([0, 0], varVariant);
    sArg := VarArrayCreate([0, 7], varVariant);

    sArg[0] := '';                               //RemoteHost
    sArg[1] := 1000;                             //ExternalPort
    sArg[2] := 'TCP';                            //Protocol
    sArg[3] := 1000;                             //InternalPort
    sArg[4] := '192.168.178.5';                  //InternalClient
    sArg[5] := 1;                                //Enabled
    sArg[6] := 'TestMapping';                    //PortMappingDescription
    sArg[7] := 0;                                //LeaseDuration


    ret := WANIPConn.InvokeAction('AddPortMapping', sArg, sOut);
    if ret = S_OK then
      lbDebug.Items.Add('Port Freischaltung erfolgreich !')
    else
      lbDebug.Items.Add('Port Freischaltung fehlgeschlagen !');

    VariantClear(sArg);
    VariantClear(sOut);
  except

  end;
end;
Sollte das nicht funktionieren dann ist es vom Router evtl nicht erlaubt!
Mein Testprogramm hänge ich mal mit an es öffnet den Port 1000.

JonnyGuitar 22. Aug 2006 13:01

Re: UPNP / Portscan
 
moin zusammen,

das codebeispiel funktioniert einwandfrei, nun hätte ich noch weitere fragen:

1)suchst man die devices so
a) UPnPDeviceFinder.FindByType('urn:schemas-upnp-org:service:WANIPConnection:1', 0) oder
b) UPnPDeviceFinder.FindByType('upnp:rootdevice', 0).

2) sehe ich das richtig das ich beim löschen des ports folgendes machen muss?
WANIPConn.InvokeAction('DeletePortMapping', sArg, sOut)
wobei sARg aus '', Port, 'TCP' besteht?

3) kennst einer eine möglichkeit alle offenen ports auf einem device per upnp aufzulisten?


mit aller besten grüssen

Jonny

TKC 22. Aug 2006 13:39

Re: UPNP / Portscan
 
Hi,

zu 1. kann man so machen .. ich persönlich benutze UPnPMonitor.CreateAsyncFind mit einem CallBack

zu 2.

Port löschen
Delphi-Quellcode:
procedure DelPortClick(WANIPConn:UPnPService);
var
  sOut                       : OleVariant;
  sArg                       : OleVariant;
  ret                        : OleVariant;

begin
  if not Assigned(WANIPConn) then exit;

  try
    sOut := VarArrayCreate([0, 0], varVariant);
    sArg := VarArrayCreate([0, 2], varVariant);

    sArg[0] := '';                               //RemoteHost
    sArg[1] := 1000;                             //ExternalPort
    sArg[2] := 'TCP';                            //Protocol


    ret := WANIPConn.InvokeAction('DeletePortMapping', sArg, sOut);
    if ret = S_OK then
      ShowMessage('Port löschung erfolgreich !')
    else
      ShowMessage('Port löschung fehlgeschlagen !');

    VariantClear(sArg);
    VariantClear(sOut);
  except

  end;
end;
zu 3. ja kenne ich ^^

Delphi-Quellcode:
procedure GetPortList(WANIPConn:UPnPService;lbDebug:TListBox);
var
  sOut                       : OleVariant;
  sArg                       : OleVariant;
  ret                        : OleVariant;
  iCount                     : Integer;
  x                          : Integer;

begin
  if not Assigned(WANIPConn) then exit;

  try
    // Portmappings zählen
    iCount := WANIPConn.QueryStateVariable('PortMappingNumberOfEntries');


    sOut := VarArrayCreate([0, 7], varVariant);
    sArg := VarArrayCreate([0, 0], varVariant);

    //Alle Portmappings durchlaufen
    for x := 0 to iCount - 1 do
      begin
        sArg[0] := x;
        ret := WANIPConn.InvokeAction('GetGenericPortMappingEntry', sArg, sOut);

        lbDebug.Items.Add(
          sOut[0] + '-'                          //RemoteHost
          + IntToStr(sOut[1]) + '-'              //ExternalPort
          + sOut[2] + '-'                        //Protocol
          + IntToStr(sOut[3]) + '-'              //InternalPort
          + sOut[4] + '-'                        //InternalClient
          + IntToStr(sOut[5]) + '-'              //Enabled
          + sOut[6] + '-'                        //PortMappingDescription
          + IntToStr(sOut[7])                    //LeaseDuration
          );

      end;

    VariantClear(sArg);
    VariantClear(sOut);
  except

  end;
end;

JonnyGuitar 22. Aug 2006 21:19

Re: UPNP / Portscan
 
nabend zusammen,

also das port anlegen und wieder löschen funktioniert nur wenn ich die devices per:

UPnPDeviceFinder.FindByType('urn:schemas-upnp-org:service:WANIPConnection:1', 0) gesucht habe.

suche ich über UPnPDeviceFinder.FindByType('upnp:rootdevies', 0) so folgt der fehler:
"EOLEException: Die Besitzer-SID eines Abonnements auf Einzelbenutzerbasis ist nicht vorhanden".

Die suche nach offenen Ports funktioniert leider in beiden fällen nicht, beim
iCount := WANIPConn.QueryStateVariable('PortMappingNumberOfE ntries');
kommt die fehlermeldung "OLE-Fehler 80040212" oder "OLE-Fehler 80040213"


hat vielleicht einer eine idee?

mfg Jonny

TKC 22. Aug 2006 21:35

Re: UPNP / Portscan
 
Zitat:

suche ich über UPnPDeviceFinder.FindByType('upnp:rootdevies', 0) so folgt der fehler:
"EOLEException: Die Besitzer-SID eines Abonnements auf Einzelbenutzerbasis ist nicht vorhanden".
Dieser Fehler tritt nur auf wenn die Suche noch nicht abgeschlossen ist und du versuchst auf den Service zuzugreifen !!!

Achte darauf das FindByType('urn:schemas-upnp-org:service:WANIPConnection:1', 0) vollständig durch ist bevor du versuchst auf den Service zuzugreifen!!

JonnyGuitar 22. Aug 2006 21:43

Re: UPNP / Portscan
 
aso, ich hatte auch schon festgestellt, dass die suche unterschiedlich lang dauert. bei deinem beispielprogramm geht es wesentlich schneller als bei mir.

kann es bei der suche nach den ports vielleicht sein, dass er gar keine findet und deswegen die fehlermeldung schmeisst?

mfg Jonny

TKC 22. Aug 2006 23:52

Re: UPNP / Portscan
 
Wenn du mir mal dein Projekt per PN Schickst schaue ich es mir mal an ... ansonsten versuche es so wie ich mit AsyncFind und CallBack.

RobertP 23. Aug 2006 15:18

Re: UPNP / Portscan
 
Wie kann ich eigentlich bei einem Service abrufen welche StateVariables und welche Actions es gibt?

TKC 23. Aug 2006 16:33

Re: UPNP / Portscan
 
du kannst dir die Dokumentation durchlesen .... www.upnp.org :wink:

In diesem Fall die des InternetGatewayDevices

RobertP 23. Aug 2006 17:44

Re: UPNP / Portscan
 
Du meinst des sind immer die Selben? Stimmt bei meinem 2 Routern nur bedingt...


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:53 Uhr.
Seite 2 von 4     12 34      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz