Einzelnen Beitrag anzeigen

runger
(Gast)

n/a Beiträge
 
#8

Re: Internet-IP durch Routerabfrage ermitteln

  Alt 12. Nov 2006, 13:00
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
  Mit Zitat antworten Zitat