Delphi-PRAXiS

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)

c.kauer 20. Aug 2006 17:38


UPNP / Portscan
 
Hallo,

Ich möchte folgendes hinbekommen:
Alle UPNP Devices finden, nach offenen Ports scannen und selbst Ports öffnen und schließen:

Zunächst habv ich die UPNP Dll in Delphi importiert. Mit den dann zur Verfügung stehenden Interfaces kann ich die Geräte auch finden:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  UPnPDeviceFinder : IUPnPDeviceFinder;
  UPnpDevices : IUPnpDevices;
  EnumVariant, EnumVariant2 : IEnumVariant;
  rgvar, rgvar2 : OleVariant;
  celtFetched, celtFetched2 : Cardinal;
  UPnpDevice : IUPnpDevice;
  Counter, Counter2 : Integer;
  Erg : HResult;
  UPnpService : IUPnpService;
begin
  Memo1.Lines.Clear;
  Counter := 0;
  UPnPDeviceFinder := CoUPnPDeviceFinder.Create;
  UPnpDevices := UPnPDeviceFinder.FindByType('upnp:rootdevice', 0);
  Memo1.Lines.Add('Number of UPnP devices: ' + IntToStr(UPnpDevices.Count));
  lblDisplay.Caption := IntToStr(UPnpDevices.Count) + ' UPnp-Geräte gefunden';
  try
    EnumVariant := IEnumVariant(UPnpDevices._NewEnum);
    while (EnumVariant.Next(1, rgvar, celtFetched) = S_OK) do
    begin
      UPnpDevice := IUPnpDevice(IUnknown(rgvar));
      Inc(Counter);
      Memo1.Lines.Add('Device: ' + IntToStr(Counter));
      Memo1.Lines.Add(UPnpDevice.FriendlyName);
      Memo1.Lines.Add(UPnpDevice.UniqueDeviceName);
      Memo1.Lines.Add('Services: ' + IntToStr(UPnpDevice.Services.Count));
      Memo1.Lines.Add('');
      Memo1.Lines.Add(UPnpDevice.PresentationURL);
//      UPnpDevice.Services.Item[].
      EnumVariant2 := IEnumVariant(UPnpDevice.Services._NewEnum);
      Erg := EnumVariant2.Next(1, rgvar2, celtFetched2);
      Counter2 := 0;
      while (Erg = S_OK) do
      begin
        UPnpService := IUPnPService(IDispatch(rgvar2));
        Inc(Counter2);
        Memo1.Lines.Add('Service: ' + IntToStr(Counter2));
        Memo1.Lines.Add('ServiceID: ' + UPnpService.Id);
        Erg := EnumVariant2.Next(1, rgvar2, celtFetched2);
      end;
    end;
  except
  end;
end;

An dem Rest der Aufgabe bin ich leider am verzweifeln.

Vielen Dank im Voraus,

mit freundlichen Grüßen
Christian Kauer

Der_Unwissende 20. Aug 2006 18:03

Re: UPNP / Portscan
 
Hi
und Willkommen in der DP! :dp:

Fragen die sich auf Arbeiten beziehen sind immer sehr ungern gesehen (da schon in den AGBs die du bei der Anmeldung bekommen hast steht, dass dies kein Forum ist, in dem solche Aufgaben gelöst werden).

Was deinen Code angeht, so würde ich dir empfehlen, dass du den etwas mehr strukturierst. Nicht falsch verstehen, der ist natürlich strukturiert, aber ein paar Leerzeilen und mehr als eine Methode machen den leichter lesbar. An sich solltest du in einer Methode immer nur eine Sache machen. In deinem Fall kannst du z.B. leicht die Anzeige (Eintragen ins Memo) von dem Finden der UPNPs trennen. Je kleiner eine Methode, desto übersichtlicher (weniger Fehler, leichter wiederverwendbar/austauschbar).

Was deine ausstehenden Probleme angeht, so ist es halt so eine Sache, dir einfach eine Lösung zu posten. Wiederspricht irgendwie dem wofür ein Forum gut ist. Deshalb mal die Frage, wie weit ist es mit deinem Wissen her?
Hast du irgendeinen Ansatz? Kennst du schon bestimmte Komponenten, die sich eventuell eignen würden? Und andere wissen was du für Komponenten hast, wäre auch die Delphi Version hier interessant.

Gruß Der Unwissende

RobertP 20. Aug 2006 20:51

Re: UPNP / Portscan
 
Liste der Anhänge anzeigen (Anzahl: 1)
Moin!
An etwas ähnlichem arbeite ich zurzeit auch gerade. Ich wär dir deshalb sehr dankbar wenn du mir den Code, mit dem du die DLL einbunden hast schicken könntest. Zu deinem Problem: Ich weiß nicht wie die Funktion das bisher darstellt, aber wenn du das so ähnlich darstellen lässt wie es das Intel Device Spy Tool und anschließend in dieser Liste z.B. nach "AddPortMapping" oder "DeletePortMapping" suchst, kannst du auch aus dem jeweils übergeordneten Listenelement die URL rauslesen an die du den Befehl schicken musst. So is zumindest mein Plan wenn jemand ne bessere Idee hat -> bitte posten :-D

Grüße,
MrPayne

JonnyGuitar 21. Aug 2006 08:53

Re: UPNP / Portscan
 
moin zusammen,

ich plage mich zur zeit auch mit dem thema upnp herum. aufgelistet kriege ich die geräte auch schon aber danach hört es bei mir auch auf. es muss doch leute geben die da durchblicken :) .

@mr payne: die dll lässt sich unter projekt/typ bibliothek importieren einbinden. danach hast du unter dem active x reiter diverse komponenten.

mfg jonny guitar

RobertP 21. Aug 2006 17:10

Re: UPNP / Portscan
 
Ah danke für den Tipp!
Aber sucht der bei euch auch so lange nach Geräten (20 sek oder so)?

JonnyGuitar 21. Aug 2006 21:12

Re: UPNP / Portscan
 
ja, 10 - 15 sekunden sucht der bei mir auch.

aber ich hätte noch eine bitte. mir hat ein bekannter ein beispiel python quellcode geschickt:

Delphi-Quellcode:
import win32com.client
from pythoncom import CoInitialize,CoUninitialize

def AddPortMapping(Port,LocalIP):
try:
CoInitialize()
DeviceFinder=win32com.client.Dispatch("UPnP.UPnPDeviceFinder")

Connections=DeviceFinder.FindByType("urn:schemas-upnp-org:service:WANIPConnection:1",0)
Connection=Connections.__getitem__(0)
Service=Connection.Services.__getitem__(0)

Service.InvokeAction("AddPortMapping",["",Port,"TCP",Port,LocalIP,True,"BitTorrent",""],"")
return True
except:
return False



def ReleasePortMapping(Port):
try:
CoInitialize()
DeviceFinder=win32com.client.Dispatch("UPnP.UPnPDeviceFinder")

Connections=DeviceFinder.FindByType("urn:schemas-upnp-org:service:WANIPConnection:1",0)
Connection=Connections.__getitem__(0)
Service=Connection.Services.__getitem__(0)
r=[]
Service.InvokeAction("DeletePortMapping",["",Port,"TCP"],r)
finally:
return
es gibt ja nun auch UPnpService.InvokeAction. kann mir einer das Service.InvokeAction("AddPortMapping",["",Port,"TCP",Port,LocalIP,True,"BitTorrent"," "],"") nach delphi übersetzen?
UPnpService.InvokeAction('AddPortMapping', [0, 1000, 'TCP', 1000, '192.168.0.1', True, 'TEST', 0], '') gibt nur fehler aus

mfg Jonny

TKC 21. Aug 2006 22:37

Re: UPNP / Portscan
 
Eventuell ist ja AddPortMapping nicht erlaubt auf dem Router... bei der FritzBox kann man das z.B. einstellen.

JonnyGuitar 22. Aug 2006 07:07

Re: UPNP / Portscan
 
morgen zusammen,

also upnp ist auf dem router aktiviert. ich denke das sollte funktionieren. aber es kommen ja auch erstmal fehler von delphi:

UPnpService.InvokeAction('AddPortMapping', [0, 1000, 'TCP', 1000, '192.168.0.1', True, 'TEST', 0], '')

bei den beiden Portangaben 1000 kommt "Konstantenausdruck verletzt untere Grenzen"

bei der ip angabe und dem Portnamen 'test' kommt "inkompatible Typen integer und string"


vielleicht weiss ja einer weiter


mfg Jonny

TKC 22. Aug 2006 07:29

Re: UPNP / Portscan
 
bei InvokeAction musst du doch alle Werte als Variant übergeben oder ?

JonnyGuitar 22. Aug 2006 07:40

Re: UPNP / Portscan
 
also die drei parameter sind:

bstrActionName: WideString;
vlnActionArgs: OleVariant;
pvOutActionArgs: OleVariant;

Also demnach ja. Oder wolltest du mich jetzt irgendwo drauf stoßen weil irgendwas dummes gemacht habe? sehe mittlerweile den wald vor lauter bäumen nicht ;)

mfg Jonny

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

TKC 24. Aug 2006 13:04

Re: UPNP / Portscan
 
Naja das liegt wohl daran das nicht auf jedem Router alles vom Standart implementiert ist.

RobertP 25. Aug 2006 00:12

Re: UPNP / Portscan
 
Zum Thema Devices suchen:
Zitat:

Zitat von ACE-ppc
zu 1. kann man so machen .. ich persönlich benutze UPnPMonitor.CreateAsyncFind mit einem CallBack

Das funktioniert bitte wie? :-D Der Upnpdevicefinder braucht mir mittlerweile zu lange...

TKC 29. Aug 2006 23:59

Re: UPNP / Portscan
 
Zitat:

Zitat von MrPayne
Das funktioniert bitte wie? :-D Der Upnpdevicefinder braucht mir mittlerweile zu lange...

Nach was suchst du denn ... RootDevice oder InternetGatewayDevice ??

Und CreateAsyncFind gehört zum TUPnPDeviceFinder !!

Das Callback Interface sieht dann so aus, und muss selst noch deklariert werden.
Delphi-Quellcode:
type
  IUPnPDeviceFinderCallback = interface(IUnknown)['{415A984A-88B3-49F3-92AF-0508BEDF0D6C}']
    procedure DeviceAdded(iFindData: Integer; UPnPDevice: UPnPDevice); stdcall;
    procedure DeviceRemoved(iFindData: Integer; wsUDN: WideString); stdcall;
    procedure SearchComplete(iFindData: Integer); stdcall;
  end;

RobertP 30. Aug 2006 17:49

Re: UPNP / Portscan
 
Ich such nur nach Routern also InternetGatewayDevice. Thanks erstmal, werd nu versuchen ob ich das so hinkrieg :wink:

TKC 31. Aug 2006 23:00

Re: UPNP / Portscan
 
Zitat:

Zitat von MrPayne
Ich such nur nach Routern also InternetGatewayDevice. Thanks erstmal, werd nu versuchen ob ich das so hinkrieg :wink:

Versuche doch mal nach root device zu suchen und dann die dienste und untergeräte zu enumerieren .. evtl. bringt das mehr speed.

timi 7. Jul 2008 15:18

Re: UPNP / Portscan
 
servus,

so ich habe es auch geschafft, meinen router zu finden und aufzulisten.
was nun aber noch nicht klappt, sind die prozeduren addportclick und getportlist. upnp ist definitiv aktiviert.

anhand eurer beispiele habe ich mir folgende funktion checkrouter() gebastelt:

Delphi-Quellcode:
function checkrouter(): string;
  var
  rhost,ehost, eport, protocol, iport, iclent, enable, pdes, leasd: olevariant;
  UPnPDeviceFinder : IUPnPDeviceFinder;
  UPnpDevices : IUPnpDevices;
  EnumVariant, EnumVariant2 : IEnumVariant;
  rgvar, rgvar2 : OleVariant;
  celtFetched, celtFetched2 : Cardinal;
  UPnpDevice : IUPnpDevice;
  Counter, Counter2 : Integer;
  Erg : HResult;
  UPnpService : IUPnpService;

begin
      message('Einen Moment bitte. Suche nach Router im Netzwerk läuft...');
      Counter := 0;
      UPnPDeviceFinder := CoUPnPDeviceFinder.Create;
      UPnpDevices := UPnPDeviceFinder.FindByType('urn:schemas-upnp-org:service:WANIPConnection:1', 0);
      message(IntToStr(UPnpDevices.Count) + ' UPnP Geräte gefunden!');
      try
        EnumVariant := IEnumVariant(UPnpDevices._NewEnum);
        while (EnumVariant.Next(1, rgvar, celtFetched) = S_OK) do
          begin
            UPnpDevice := IUPnpDevice(IUnknown(rgvar));
            Inc(Counter);
            irc('Device ' + IntToStr(Counter)+ ': ' + UPnpDevice.FriendlyName + ': ' + UPnpDevice.PresentationURL);
            irc(UPnpDevice.UniqueDeviceName);
      //    UPnpDevice.Services.Item[].
            EnumVariant2 := IEnumVariant(UPnpDevice.Services._NewEnum);
            Erg := EnumVariant2.Next(1, rgvar2, celtFetched2);
            Counter2 := 0;
            GetPortlist(IUPnPService(IDispatch(rgvar)), form1.ListBox1);  // Hier möchte ich die Liste der Ports anzeigen
            AddPortclick(IUPnPService(IDispatch(rgvar)));   // Hier möchte ich den Port 1000 freigaben;
           
           // message('Listing und Portfreigabe erfolgreich');
   
            while (Erg = S_OK) do
             begin
               message('erg ist noch S_OK');
               UPnpService := IUPnPService(IDispatch(rgvar2));
               inc(counter2);
               message('Service: ' + IntToStr(Counter2));
               message('ServiceID: ' + UPnpService.Id);
               Erg := EnumVariant2.Next(1, rgvar2, celtFetched2);
            end;
            end;
        except
           message('Fehler');
    end;
end;
mein problem ist: [b]ich bin mir nicht ganz sicher, was ich bei dem prozeduraufruf statt "WANIPconn:Upnpservice" eintrage?[b]

wenn ich es mit..
Delphi-Quellcode:
 AddPortclick(IUPnPService(IDispatch(rgvar)));
..versuche, listet er mir nur den router auf aber es kommt keine meldung, ob das portmapping erfolgreich war oder nicht.
wenn ich statt "regvar" die variable "regvar2" nehme, gibt er mir aus: not assigned.

bei der prozedur getportlist kommt dann die fehlermeldung:

---------------------------
Debugger Exception Notification
---------------------------
Project upnp.exe raised exception class EAccessViolation with message 'Access violation at address 7095E2EF in module 'upnp.dll'. Write of address 0048C914'. Process stopped. Use Step or Run to continue.

ich habe auch schon versucht die prozedur erst in der while-schleife

Delphi-Quellcode:
while (Erg = S_OK) do
aufzurufen, doch anhand einer test-message habe ich gemerkt, dass es gar nicht erst zu dem aufruf kommt.

so sorry für das durcheinander, vielleicht kann man es auch einfacher erklären als ich hier meine frage gestellt habe?!

habt vielen dank für eure bemühungen,

viele grüße
tim

TKC 9. Jul 2008 09:50

Re: UPNP / Portscan
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo,

du hast ja in deinem Code das Upnp Gerät schon gefunden.

Jetzt fehlt dir noch der Aufbau der Innereien des Gerätes, gehe mal nach folgender Reihenfolge vor:

1. UPNP Gerät finden
2. WANConnectionDevice finden (falls du nicht direkt danach gesucht hast)
3. Services des WANConnectionDevice durchlaufen und WANIPConnection finden
4. jetzt kannst du mit der WANIPConnection weiterarbeiten um z.B. Portmappings auszulesen

Du solltest dir noch das Service Template des WANIPConnection anschauen (s.Anhang).
Zur Veranschaulichung hänge ich noch ein kleines Bild mit an.

Gruß Thomas

timi 9. Jul 2008 11:02

Re: UPNP / Portscan
 
hi tkc,

vielen dank für deine antwort! ich denke mir würde ein beispiel code am besten helfen, denn bei den folgenden punkten fehlt mir das wissen, wo und wie ich anfangen soll:

2. WANConnectionDevice finden (falls du nicht direkt danach gesucht hast)
3. Services des WANConnectionDevice durchlaufen und WANIPConnection finden

ich lerne das immer am besten, wenn ich einen vorhanden beispielcode code habe und ihn nach und nach durchgehe, abändere und dann merke, was passiert.

wäre es evtl möglich, wenn du mir den sourcecode von deinem kleinen testprogramm schicken könntest?

ich wäre dir sehr dankbar!

viele grüße
tim

TKC 9. Jul 2008 12:35

Re: UPNP / Portscan
 
Hi,
kann ich leider nicht machen, da ich eine eigene Komponente dafür benutze und diese noch weit von einem Release weg ist ;) .

Du kannst mir aber dein Projekt schicken, dann schaue ich mal danach.

mfg
Thomas

Xen 12. Jul 2009 23:08

Re: UPNP / Portscan
 
Nennt mich Thread-Leichenschänder, aber was zur Hölle hat
der Threadstarter da am Anfang gemacht?

Wurde da eine ganze Klasse aus der DLL exportiert oder jede Funktion einzeln?
Komischerweise finde ich auch keine der genannten Funktionen wenn ich mir die DLL via TDump anschaue.

Wie man DLLs importiert (zumindest einzelne Funktionen) hab ich ja verstanden. Wieso dem Threadstarter aber Datentypen & Co zur verfügung stehen ist mir aber ein Rätzel.

Wäre nett wenn mich Jemand aufklären könnte was der Threadstarter bei
Zitat:

UPNP Dll in Delphi importiert. Mit den dann zur Verfügung stehenden Interfaces[...]
genau gemacht hat.

Xen 16. Jul 2009 16:14

Re: UPNP / Portscan
 
*Push*

Ich kann mir nicht vorstellen das das so schwer sein kann.

Wäre nett wenn mir doch noch Jemand antworten könnte.

mirage228 16. Jul 2009 16:16

Re: UPNP / Portscan
 
Zitat:

Zitat von Xen
Nennt mich Thread-Leichenschänder, aber was zur Hölle hat
der Threadstarter da am Anfang gemacht?

Wurde da eine ganze Klasse aus der DLL exportiert oder jede Funktion einzeln?
Komischerweise finde ich auch keine der genannten Funktionen wenn ich mir die DLL via TDump anschaue.

Wie man DLLs importiert (zumindest einzelne Funktionen) hab ich ja verstanden. Wieso dem Threadstarter aber Datentypen & Co zur verfügung stehen ist mir aber ein Rätzel.

Wäre nett wenn mich Jemand aufklären könnte was der Threadstarter bei
Zitat:

UPNP Dll in Delphi importiert. Mit den dann zur Verfügung stehenden Interfaces[...]
genau gemacht hat.

Ich nehme mal an, dass es sich um eine COM-Bibliothek handelt und er sie über die Delphi Funktion "Typbibliothek importieren" importiert hat. Damit werden alle Datentypen, Interfaces, Enums, etc. aus der Bibliothek geholt und in eine Delphi Unit gepackt und man kann auch schon mit der Verwendung der Klassen loslegen.

Viele Grüße

Xen 16. Jul 2009 16:33

Re: UPNP / Portscan
 
Okay ich hab mir das mal bei Delphi angeschaut. Das Ding das sich dann öffnet sieht unglaublich kompliziert aus, aber ich werd mich da mal reinwuseln.

Danke für die Antwort.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:59 Uhr.

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