Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Internet-IP durch Routerabfrage ermitteln (https://www.delphipraxis.net/49758-internet-ip-durch-routerabfrage-ermitteln.html)

Cmd.exe 15. Jul 2005 14:20


Internet-IP durch Routerabfrage ermitteln
 
Hi,
da ich zur Zeit einen Chat programmiere und ihn internettauglich machen will, muss mein Proggi meine aktuelle Internet-IP herausfinden können. Ich weiß, dass es die Möglichkeit gibt, aus einer Website, die meine IP anzeigt, die IP zu kopieren, aber das finde ich zu umständlich. Außerdem würde der Spaß ein Ende haben, sobald es diese Seite nicht mehr gibt oder der Server irgendwelche Probleme hat. Mir ist eingefallen, dass man doch direkt den Router abfragen könnte, ich weiß aber nicht wie und ob das überhaupt möglich ist. Ich hoffe, ihr könnt mir weiterhelfen.

fred.reichbier 15. Jul 2005 14:23

Re: Internet-IP durch Routerabfrage ermitteln
 
erstmal herzlich willkommen :dp:
hier gibts ne codelibrary ;)
klick

PierreB 15. Jul 2005 14:25

Re: Internet-IP durch Routerabfrage ermitteln
 
Zitat:

da ich zur Zeit einen Chat programmiere
Kommt drauf an welche Internetkomponenten du bereits benutzt. Die Sockets zum Beispiel teilen dem Serverprogramm automtisch die IP der Clients mit (da es sonst ja logischerweise keine Verbindung geben könnte).

Thanatos81 15. Jul 2005 14:30

Re: Internet-IP durch Routerabfrage ermitteln
 
Auch von mir erstmal Herzlich Willkommen!

Also, beim Aulsesen des Routers dürfte dir die Vielzahl an Routerherstellern und -modellen einen Strich durch die Rechnung machen. Zumindest wenn es um native Abfrage des Routers geht.

Könnte aber sein, dass es per UPnP ne Möglichkeit gibt. Azureus z.B. setzt "sein" Portforwarding auch per UPnP und löscht es hinterher wieder. Allerdings dürften auch noch ne Menge Router ohne/mit deaktivertem UPnP in Gebrauch sein.

Aber der Tipp vom fred ist doch schon ganz gut. Man könnte ja ne INI-Datei mit Anbiertern eintragen und diese solange durchlaufen, bis man eine IP bekommen hat...

€dit:
Hab ich solange gebraucht*wunder* Der Hinweis von PierreB ist natürlich auch einiges wert :wink:

Cmd.exe 15. Jul 2005 14:54

Re: Internet-IP durch Routerabfrage ermitteln
 
Mir hat freds Tipp auch ganz gut gefallen und das mit der Ini-Datei werd ich wahrscheinlich auch noch einbauen. :thumb:

supermuckl 15. Jul 2005 15:17

Re: Internet-IP durch Routerabfrage ermitteln
 
das einfachste und zuverlässigste für jeden user wäre eine abfrage der ip über einen webserver der dir deine client-inet ip sagt.

Cyberaxx 15. Jul 2005 23:12

Re: Internet-IP durch Routerabfrage ermitteln
 
Ist ectl etwas umständlich aber man könnte doch auch den Router per WebComp aufrufen. Wenn man weiss welche Daten für den Login gesetzt werden und man einmal drin ist kann man auch daraus direkt die IP auslesen.

Es gibt da auch nen Programm, nennt sich wenn ich mich nicht irre Router Control. Die haben das genau so gelöst. In einer ini stehen nen haufen Routertypen(Bei weitem aber nicht alle), dort wird dann der Loginstring gesendet und dann einfach gewisse Daten rausgefiltert wie z.B. IP, Verbindungsstatus, Firmware usw.

Das mit dem Login habe ich noch nie gemacht nur die Daten auslesen aus einer WebComp und das ist auch recht einfach, wenn man sich einmal den Quellcode angesehen hat.

Edit: Wie Supermuckl schon geschrieben hat wäre es am einfachsten mit einer statischen Adresse, Wenn Dein Router DynDns fähig ist wäre das wohl die einfachste Lösung. Müsstest dann nur aufpassen das sich Dein Router nicht aufhängt, wie es bei mir gelegentlich der Fall ist. Bin zwar online und der Router verrichtet seinen Dienst, jedoch kann ich mich nicht einloggen und die DynDns wird nicht akualisiert.

runger 12. Nov 2006 13:00

Re: Internet-IP durch Routerabfrage ermitteln
 
Hallo,

hier eine ganz kurze Lösung für dein Problem:
Du musst UPNP.dll importieren und in uses muss activex stehen.

Delphi-Quellcode:
function getglobalip:string;
var
  UPnPDeviceFinder : IUPnPDeviceFinder;
  UPnpDevices : IUPnpDevices;
  EnumVariant, EnumVariant2 : IEnumVariant;
  rgvar, rgvar2 : OleVariant;
  celtFetched, celtFetched2 : Cardinal;
  UPnpDevice : IUPnpDevice;
  Erg : HResult;
  UPnpService : IUPnpService;
  res,res1,t2:olevariant;
begin
  result:='Error';
  UPnPDeviceFinder := CoUPnPDeviceFinder.Create;
  UPnpDevices := UPnPDeviceFinder.FindByType('urn:schemas-upnp-org:service:WANIPConnection:1', 0);
  EnumVariant := IEnumVariant(UPnpDevices._NewEnum);
  EnumVariant.Next(1, rgvar, celtFetched);
  UPnpDevice := IUPnpDevice(IUnknown(rgvar));
  EnumVariant2 := IEnumVariant(UPnpDevice.Services._NewEnum);
  Erg := EnumVariant2.Next(1, rgvar2, celtFetched2);
  Erg := EnumVariant2.Next(1, rgvar2, celtFetched2);
  UPnpService := IUPnPService(IDispatch(rgvar2));
  res := VararrayCreate([0, 1], varVariant);
  res1 := VararrayCreate([0, 0], varVariant);
  t2:=UPnpService.InvokeAction('GetExternalIPAddress',res1,res);
  result:=res[0];
end;
Achtung: In dieser Routine sind keine Sicherheitsabfragen und sie ist ausschliesslich auf Fritzbox WLAN 2+ zugeschnitten. Doppelte Programmzeilen sind kein Fehler sondern absolut nötig.
Aber Achtung: Ohne die Mithilfe einiger lieber Kollegen und dem Intel Devicespy Tool ist es kaum möglich dahinterzukommen was hier gespielt wird.

Rainer


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:55 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz