Thema: Delphi UPNP / Portscan

Einzelnen Beitrag anzeigen

c.kauer
(Gast)

n/a Beiträge
 
#1

UPNP / Portscan

  Alt 20. Aug 2006, 17:38
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
  Mit Zitat antworten Zitat