Announcement

Collapse
No announcement yet.

UPNP Port öffnen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • UPNP Port öffnen

    Hallo,

    Im Zuge einer Studienaufgabe habe ich folgende Aufgabe bekommen:
    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:

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