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