![]() |
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 |
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 |
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 ![]() Grüße, MrPayne |
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 |
Re: UPNP / Portscan
Ah danke für den Tipp!
Aber sucht der bei euch auch so lange nach Geräten (20 sek oder so)? |
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:
es gibt ja nun auch UPnpService.InvokeAction. kann mir einer das Service.InvokeAction("AddPortMapping",["",Port,"TCP",Port,LocalIP,True,"BitTorrent"," "],"") nach delphi übersetzen?
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 UPnpService.InvokeAction('AddPortMapping', [0, 1000, 'TCP', 1000, '192.168.0.1', True, 'TEST', 0], '') gibt nur fehler aus mfg Jonny |
Re: UPNP / Portscan
Eventuell ist ja AddPortMapping nicht erlaubt auf dem Router... bei der FritzBox kann man das z.B. einstellen.
|
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 |
Re: UPNP / Portscan
bei InvokeAction musst du doch alle Werte als Variant übergeben oder ?
|
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 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:29 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz