rene
14. Juni 2011 um 08:56
1
Hallo,
ich suche ein Script mit dem ich den DSL Status meiner Fritzbox auslesen kann (siehe Anhang).
Da ich mittlerweile RAM geschaltet bekommen habe ist es mir jetzt möglich zu guten Zeiten eine 2Mbit Verbindung auszubauen (vorher nur DSL-light).
Mich würden vor allen die aktuellen Statusinformationen zur DSL-Leitung interessieren, mit welcher Geschwindigkeit usw. ich gerade verbunden bin.
Ich weiss, dass man diese Seiten irgendwie aus der Box auslesen kann.
Leider bin ich in PHP und Webprogrammierung etwas zu schlecht.
Anruferliste und Up- und Download Script habe ich schon in Betrieb --> funktioniert super
Vielleicht kann mir jemand mit einem kleinen Code-Schnipsel helfen.
Danke
Rene
RWN
14. Juni 2011 um 09:46
2
Ich hatte ja schon mal geschrieben, dass die SID benötigt wird. Funktioniert nur mit Firmware ab xx.04.74 oder neuer. Ältere unterstützen keine Session !! Diese gilt für alle Scripts !!! So geht es, prof of concept. Die benötigten Dateien im...
Ich seh grad, dass ist schon ein bischen älter. Hier mal etwas neueres.
Eventuell musst Du die Zeilen anpassen.
<?
$fritzbox_ip = 'fritz.box';
$fritzgui = 'http://fritz.box/cgi-bin/webcm';
$fritzseite = '../html/de/menus/menu2.html';
$filename = IPS_GetKernelDir()."\\webfront\\user\\Fritzbox\\DslDetails.txt";// anpassen
$password = 'xxxx';
$ch = curl_init('http://' . $fritzbox_ip . '/cgi-bin/webcm?getpage=../html/login_sid.xml');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$login = curl_exec($ch);
curl_close($ch);
$session_status_simplexml = simplexml_load_string($login);
if ($session_status_simplexml->iswriteaccess == 1)
{
$SID = $session_status_simplexml->SID;
}
else
{
$challenge = $session_status_simplexml->Challenge;
$response = $challenge . '-' . md5(mb_convert_encoding($challenge . '-' . $password, "UCS-2LE", "UTF-8"));
$login = array('getpage' => $fritzseite, 'login:command/response' => $response);
$sendlogin = http_post_fields($fritzgui, $login);
preg_match('@<input type="hidden" name="sid" value="([A-Fa-f0-9]{16})" id="uiPostSid">@i', $sendlogin, $matches);
if (isset($matches[1]) && $matches[1] != '0000000000000000')
{
$SID = $matches[1];
}
else
{
echo "Fehler: Login fehlgeschlagen";
return;
}
}
$dsl = array('getpage' => $fritzseite, 'sid' => $SID, 'var:menu' => 'internet', 'var:pagename' => 'adsl');
$getDslDetails = http_post_fields($fritzgui, $dsl);
$fileHandle = @fopen($filename, 'wb+');
fwrite($fileHandle, $getDslDetails);
fclose($fileHandle);
$lines = file("../webfront/user/Fritzbox/DslDetails.txt");
//print_r($lines);
for ($i = 2986; $i <= 3143; $i++)
{
$ausgabe = $lines[$i];
$ausgabe = str_replace('<table id="t1" class="tborder" width="600" style="margin: auto;">', '<table border="1" width="990px" style="margin: 15px; background-color:#FFFFC0; color:#000000;">', $ausgabe);
$ausgabe = str_replace('<table id="t4" class="tborder" width="600" style="margin: auto;">', '<table border="1" width="990px" style="margin: 15px; background-color:#FFFFC0; color:#000000;">', $ausgabe);
$ausgabe = str_replace('<td class="c3">', '<td style="text-align:right;">', $ausgabe);
$ausgabe = str_replace('<td class="c2">', '<td style="text-align:right;">', $ausgabe);
//$ausgabe = str_replace('<th class="c3">', '<th style="text-align:right;">', $ausgabe);
//$ausgabe = str_replace('<th class="c1"></th>', '<th style="text-align:left; background-color:#C0C0C0;">Informationen</th>', $ausgabe);
//$ausgabe = str_replace('<th class="c2"></th>', '<th style="background-color:#C0C0C0;">', $ausgabe);
echo utf8_decode($ausgabe);
}
?>
Sieht dann so aus.
rene
14. Juni 2011 um 10:08
3
Danke für die schnelle Antwort.
Leider wirft das Script bei mir einige Fehlermeldungen aus.
Call to undefined function mb_convert_encoding() in [Fritzbox\DSL Status\Abfrage DSL Status] on line 22
Call to undefined function http_post_fields() in C:\IP-Symcon\scripts\30228.ips.php on line 24
Sind das nicht PHP-Standartfunktionen oder muss man da noch was einbinden?
René
RWN
14. Juni 2011 um 10:11
4
Du musst die extension mit einbinden. Die Dateien findest Du im obigen Link im ersten Post angehängt für V2.2
rene
14. Juni 2011 um 10:44
5
Danke hat super geklappt.
Wer lesen kann ist klar im Vorteil, habe das mit den Extension nicht gleich mitbekommen.
Die Daten werden auch alle angezeigt. Ich erhalte aber noch als Pullup-Fenster folgende Fehlermeldung. (Anhang)
Stammt das aus IPS oder aus der Fritzbox?
Danke
René
RWN
14. Juni 2011 um 10:47
6
Das kannst Du ignorieren. Das tritt nur auf, wenn Du das Script von Hand ausführst. Das ganze rufst Du ja dann über Webfront auf.
rene
14. Juni 2011 um 10:52
7
Perfekt.
Danke nochmal für die schnelle Hilfe.
René
rene
15. Juni 2011 um 10:59
8
$dsl = array(‚getpage‘ => $fritzseite, ‚sid‘ => $SID, ‚var:menu‘ => ‚internet‘, ‚var:pagename‘ => ‚adsl‘);
$getDslDetails = http_post_fields($fritzgui, $dsl);
Wenn ich das richtig interpretiere scheinen diese Zeilen zur Abfrage der Informationen die wichtigsten zu sein.
‚var:menu‘ => ‚internet‘ → Menüpunkt
‚var:pagename‘ => ‚adsl‘ → Seite
Woher weiss man das der „pagename“ z.B. adsl ist ?
Gibt’s eine Liste oder kann ich das irgendwo ablesen?
Ich frage deshalb, weil ich gern aus anderen Seiten noch Informationen abrufen möchte.
Danke
René
Hallo,
Ich habe keine Ahnung von dem ganzen IP-S hier, da ich es selbst nicht brauche,
aber du kannst auch mal versuchen die Datei hier: „adsldaten.xml“
unter dem Link „getpage=…/html/de/internet/adsldaten.xml“
zu Lesen und Auszuwerten, es müssten? alle Infos die du brauchst drin stehen?!
Ich kann dabei nicht helfen, Sorry
Gruß Erwin
„adsldaten.xml“ hier:
<?xml version = "1.0" ?>
<DSL mode="0" carrierState="0" >
<DATA>
<MaxDslamRate rx="0" tx="0" />
<MinDslamRate rx="0" tx="0" />
<CableCapacity rx="0" tx="0" />
<ActDataRate rx="0" tx="0" />
<Latenz>
<RX interleave="0" delay="0" />
<TX interleave="0" delay="0" />
</Latenz>
<Bitswap rx="0" tx="0" />
<SignalNoiseDistance rx="0" tx="0" />
<LineLoss rx="0" tx="0" />
<PowerCutBack rx="0" tx="0" />
</DATA>
<STATISTIC>
<DslGuiVersion DslGuiVer="0" />
<ES cpe="0" coe="0" />
<SES cpe="0" coe="0" />
<FEC_min cpe="0.00" coe="0.00" />
<CRC_min cpe="0.00" coe="0.00" />
<LossOfSignal cpe="0" coe="0" />
<LossOfFrames cpe="0" coe="0" />
<FEC cpe="0" coe="0" />
<CRC cpe="0" coe="0" />
<NoCellDelineation cpe="0" coe="0" />
<HeaderErrorCtrl cpe="0" coe="0" />
</STATISTIC>
</DSL>
ohne Daten, da die Box FB 7390 neu und noch nicht mit DSL verbunden wahr letzes Jahr 12/2010
RWN
15. Juni 2011 um 20:19
10
Hallo Rene,
Woher weiss man das der „pagename“ z.B. adsl ist ?
Du musst dir den Quelltext der Seite ansehen von welcher Du Daten auslesen willst.
rene
15. Juni 2011 um 20:38
11
Hallo Rainer,
irgendwie stelle ich mich zu doof an.
Wenn ich die gewünschte Seite in meiner Fritzbox öffne und dann im Firefox mit der rechte Maustaste auf Quelltext gehe erhalte ich immer folgendes:
<!DOCTYPE html PUBLIC „-//W3C//DTD XHTML 1.0 Frameset//EN“ „http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd “>
<html>
<head>
<title>FRITZ!Box</title>
<meta http-equiv=„Content-Type“ content=„text/html; charset=utf-8“>
<meta http-equiv=„expires“ content=„0“>
<!–<link rel=„shortcut icon“ type=„image/x-icon“ href="/favicon.ico" />–>
<script type=„text/javascript“>
var g_HelpWin = null;
</script>
</head>
<frameset id=„frame_set“ rows="*">
<frame src="/logincheck.lua" id=„frame_content“ scrolling=„auto“ frameborder=„0“ />
</frameset>
<noframes>
<body>
<p>Ihr Browser unterstützt keine XHTML-Frames.</p>
<p>Sie können die <a href="/logincheck.lua">FRITZ!Box Benutzeroberfläche</a> aber trotzdem ohne Einschränkung nutzen.</p>
</body>
</noframes>
</html>
Bitte noch einen Tipp für jemanden der mit Webprogrammierung nichts zu tun hat.
Danke
René
RWN
15. Juni 2011 um 20:57
12
aktueller Frame, Framequelltext. Dann ganz nach unten scrollen.
Ich hatte ja schon mal geschrieben, dass die SID benötigt wird. Funktioniert nur mit Firmware ab xx.04.74 oder neuer. Ältere unterstützen keine Session !! Diese gilt für alle Scripts !!! So geht es, prof of concept. Die benötigten Dateien im...
rene
15. Juni 2011 um 21:05
13
Danke.
Den Punkt Framequelltext habe ich noch nie für Voll genommen.
Rene
Hallo,
ich nutze die FRITZ!Box 2170 (Firmware-Version 51.04.57).
Ich habe obige Tipps ausprobiert, erhalte aber sowohl manuell als auch im Webfront diverse Meldungen wie:
Warning: simplexml_load_string() [function.simplexml-load-string]: Entity: line 1: parser error : Space required after the Public Identifier in C:\Program Files\IPSymcon\scripts\25984.ips.php on line 12
Warning: simplexml_load_string() [function.simplexml-load-string]: <!DOCTYPE HTML PUBLIC „-//W3C//DTD HTML 4.0 Transitional//EN“> in C:\Program Files\IPSymcon\scripts\25984.ips.php on line 12
Warning: simplexml_load_string() [function.simplexml-load-string]: ^ in C:\Program Files\IPSymcon\scripts\25984.ips.php on line 12
Ist meine FritzBox nicht geeignet für: Zeile12:
$session_status_simplexml = simplexml_load_string($login);
DANKE für jeden Tipp
RWN
18. Juni 2011 um 12:23
15
Funktioniert nur mit Firmware ab xx.04.74 oder neuer. Ältere unterstützen keine Session !!
Es gibt aber auch diverse Scripts für Boxen ohne Sessionunterstütung.
Stöbere mal ein bischen im Forum rum, wirst schon fündig werden.
Also ein bischen mehr Hilfe wäre schon nett…
bis dato finde ich keine Scripts oder Anleitungen mit denen ich auf „ältere“ FritzBoxen zugreifen kann. Die Anruferliste interessiert mich nicht ich würde nur gern den DSL-Status loggen, optimal mit Bandbreite.
Kann mir jemand helfen?