Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi FritzBox Wlan deaktivieren / aktivieren (https://www.delphipraxis.net/176463-fritzbox-wlan-deaktivieren-aktivieren.html)

1aa 6. Sep 2013 14:47

FritzBox Wlan deaktivieren / aktivieren
 
Ich suche jetzt schon seit einiger zeit eine möglichkeit die wlan funktion der fritzbox mit einem klick zu beenden.

Diverse scripte und befehle für andere funktionen hab ich schon gefunden nur leider nix was mir mit dem problem weiter hilft .
habt ihr eine idee?

DeddyH 6. Sep 2013 15:27

AW: FritzBox Wlan deaktivieren / aktivieren
 
Könnte man nicht über NetCAPI die Telefon-Codes #96*0* (WLAN aus) bzw. #96*1* (WLAN ein) senden? Ich hab das aber auch nur irgendwo aufgeschnappt und keine Ahnung von der Materie.

1aa 12. Okt 2013 22:23

AW: FritzBox Wlan deaktivieren / aktivieren
 
So hat zwar etwas gedauert.... Aber da ich es nicht leiden kann wenn ein Post nur mit dem Kommentar: "jetzt geht es!" endet, stell ich mal meine Lösung vor wer was zu meckern hat immer her damit man kann nur daraus lernen:

Die Methoden LogIn und Logout basieren auf dem Code von Hier im Forum suchenCalganX in seinem Post "Anrufliste der FritzBox auslesen" würden aber für die neue Firmware "FRITZ!OS 5.50" angepasst.

für den MD5 Hash verwende ich: Message-Digest MD5 optimiert für Delphi

Erläuterungen zum Login-Verfahren gibts in der AVM-Doku: AVM_Technical_Note_-_Session_ID.pdf

Der Code:

Delphi-Quellcode:
uses Classes, SysUtils, IdHTTP, Md5;

const

  FRITZBOX_HOST            = 'fritz.box';

type
      TBoxInfo = record
        [....]
        SID : String;

      TFritzBox = class(TObject)
        private
          ffHTTP : TIdHTTP;             //INdy HTTP Componente
          fError : String;
          fBox   : TBoxInfo;            // Aktuelle FritzBox
             [....]
          function GetSID : String;
        public
          constructor Create;
          destructor Destroy; override;
              [....]
          Procedure LogIn(ABenutzername: string = ''; APassword: string = '');
          procedure Logout;

          procedure WLanAusAn(aOn :String);
             [.....]
          property SID : String read GetSID;
      end;

[.......]

Constructor TFritzBox.Create;
begin
  ffHTTP := TIdHttp.Create(nil);
end;

Destructor TFritzBox.Destroy;
begin
  ffHTTp.Free;
  inherited;
end;

procedure TFritzBox.LogIn(ABenutzername: string = ''; APassword: string = '');
var
  challenge,response,sid : String;
  function InternalGetChallenge : String;
  begin
    Result := ffHTTP.Get('http://' + FRITZBOX_HOST + '/login_sid.lua');
    if Pos('<challenge>',LowerCase(Result))=0 then
      raise Exception.Create('Fehler beim Initialisieren der Verbindung.');
    System.Delete(Result,1,Pos('<challenge>',LowerCase(Result))+10);
    System.Delete(Result,Pos('</',Result),Length(Result)-Pos('</',Result)+1);
  end;

  function InternalGetResponse : String;
  var
    Hash : TMD5_CTX;
    Digest: TMD5digest;
    str : String;
    i : Integer;
  begin
    str := challenge+'-'+APassword;
    MD5Init(Hash);
    MD5Update(Hash, @str[1],Length(str)*2);
    MD5Final(Hash,Digest);
    Result := '';
    for i := 0 to 15 do
      Result := Result + IntToHex(Digest[i],2);
    Result := LowerCase(Result);
  end;

  function InternalGetSid : String;
  var
    Params :String;
  begin
    Result := '';
    Params:=('?username=' + ABenutzername + '&response=' + challenge + '-' + response);
    Result := ffHTTP.Get('http://' + FRITZBOX_HOST + '/login_sid.lua' + Params);
    if Pos('<sid>',LowerCase(Result))=0 then
       raise Exception.Create('Fehler beim Generieren der Sitzungs-ID.');
    System.Delete(Result,1,Pos('<sid>',LowerCase(Result))+4);
    System.Delete(Result,Pos('</',Result),Length(Result)-Pos('</',Result)+1);
  end;

begin
  ffHTTP.HandleRedirects := true;
  ffHTTP.Request.ContentLength := -1;
  ffHTTP.Request.Accept := 'text/html, */*';
  ffHTTP.HTTPOptions := [hoForceEncodeParams];
    try
      challenge := InternalGetChallenge;
      response := InternalGetResponse;
      sid := InternalGetSid;
      FBox.SID := sid;
    except
      on E:Exception do fError := E.Message;
    end;
end;

procedure TFritzBox.Logout;
begin
  ffHTTP.HandleRedirects := true;
  ffHTTP.Request.ContentLength := -1;
  ffHTTP.Request.Accept := 'text/html, */*';
  ffHTTP.HTTPOptions := [hoForceEncodeParams];
  ffHTTP.Get('http://'+ FRITZBOX_HOST + '/login_sid.lua?logout=0&sid=' + fBox.SID);
  fBox.SID := '0000000000000000';
end;



procedure TFritzBox.WLanAusAn(aOn :String):;
var hUrl : String;
    hParams : TStringlist;
Begin
LogIn('xxx','xxx');
  ffHTTP.HandleRedirects := true;
  ffHTTP.Request.ContentLength := -1;
  ffHTTP.Request.Accept := 'text/html, */*';
  ffHTTP.HTTPOptions := [hoForceEncodeParams];
  hParams := Tstringlist.Create;
  try
    hParams.Clear;
    hParams.Add('wlan:settings/ap_enabled=' + aOn);
    hParams.Add('getpage=/wlan/wlan_settings.lua');
    hUrl := 'http://'+ FRITZBOX_HOST + '/wlan/wlan_settings.lua?sid=' + fBox.SID;
    ffHTTP.Post(hUrl,hParams);
  finally
    hParams.Free;
  end;
Logout;
end;
mit
Delphi-Quellcode:
 WLanAusAn('1')
kann man Wlan aktiviern
mit
Delphi-Quellcode:
 WLanAusAn('0')
kann man Wlan deaktiviern

weitere Funktionen sind auch möglich...

Viel Spaß beim Testen

hathor 12. Okt 2013 23:19

AW: FritzBox Wlan deaktivieren / aktivieren
 
Ich hoffe, da etwas nicht falsch verstanden zu haben:

1. mit WLanAusAn('0') kann man Wlan deaktivieren

2. mit WLanAusAn('1') kann man Wlan aktiviern

Aktivieren: Wie soll das funktionieren - über LAN? WLAN ist ja aus...

1aa 13. Okt 2013 00:44

AW: FritzBox Wlan deaktivieren / aktivieren
 
richtig aktivieren kann man nur über lan.....:oops: pfeif..:oops:... hätte ich erwähnen sollen
mit einer kleinen modi. kann man den code auch nutzen um den wlan gastzugang zu aktivieren/deaktivieren das funktioniert dann auch komplett über wlan aber dann auch nur über das haupt wlannetz da man aus dem gastnetz keinen zugang zur fritzbox config hat....

sorry für das missverständnis....


Alle Zeitangaben in WEZ +1. Es ist jetzt 23: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