AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

UPNP / Portscan

Offene Frage von "timi"
Ein Thema von c.kauer · begonnen am 20. Aug 2006 · letzter Beitrag vom 16. Jul 2009
Antwort Antwort
Seite 1 von 4  1 23     Letzte » 
c.kauer
(Gast)

n/a Beiträge
 
#1

UPNP / Portscan

  Alt 20. Aug 2006, 18: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
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#2

Re: UPNP / Portscan

  Alt 20. Aug 2006, 19:03
Hi
und Willkommen in der 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
  Mit Zitat antworten Zitat
RobertP

Registriert seit: 19. Aug 2006
181 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: UPNP / Portscan

  Alt 20. Aug 2006, 21:51
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

Grüße,
MrPayne
Miniaturansicht angehängter Grafiken
device_spy_screeny_147.jpg  
Robert
  Mit Zitat antworten Zitat
JonnyGuitar

Registriert seit: 4. Jun 2004
233 Beiträge
 
#4

Re: UPNP / Portscan

  Alt 21. Aug 2006, 09:53
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
the only thing to fear is runnin' out of beer
  Mit Zitat antworten Zitat
RobertP

Registriert seit: 19. Aug 2006
181 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: UPNP / Portscan

  Alt 21. Aug 2006, 18:10
Ah danke für den Tipp!
Aber sucht der bei euch auch so lange nach Geräten (20 sek oder so)?
Robert
  Mit Zitat antworten Zitat
JonnyGuitar

Registriert seit: 4. Jun 2004
233 Beiträge
 
#6

Re: UPNP / Portscan

  Alt 21. Aug 2006, 22:12
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
the only thing to fear is runnin' out of beer
  Mit Zitat antworten Zitat
Benutzerbild von TKC
TKC

Registriert seit: 21. Apr 2004
Ort: Tuningen
367 Beiträge
 
Delphi XE2 Enterprise
 
#7

Re: UPNP / Portscan

  Alt 21. Aug 2006, 23:37
Eventuell ist ja AddPortMapping nicht erlaubt auf dem Router... bei der FritzBox kann man das z.B. einstellen.
  Mit Zitat antworten Zitat
JonnyGuitar

Registriert seit: 4. Jun 2004
233 Beiträge
 
#8

Re: UPNP / Portscan

  Alt 22. Aug 2006, 08:07
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
the only thing to fear is runnin' out of beer
  Mit Zitat antworten Zitat
Benutzerbild von TKC
TKC

Registriert seit: 21. Apr 2004
Ort: Tuningen
367 Beiträge
 
Delphi XE2 Enterprise
 
#9

Re: UPNP / Portscan

  Alt 22. Aug 2006, 08:29
bei InvokeAction musst du doch alle Werte als Variant übergeben oder ?
  Mit Zitat antworten Zitat
JonnyGuitar

Registriert seit: 4. Jun 2004
233 Beiträge
 
#10

Re: UPNP / Portscan

  Alt 22. Aug 2006, 08:40
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
the only thing to fear is runnin' out of beer
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:57 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf