staging.inyokaproject.org

Statusmonitor Speedport W921v

Archivierte Anleitung

Dieser Artikel wurde archiviert. Das bedeutet, dass er nicht mehr auf Richtigkeit überprüft oder anderweitig gepflegt wird. Der Inhalt wurde für keine aktuell unterstützte Ubuntu-Version getestet. Wenn du Gründe für eine Wiederherstellung siehst, melde dich bitte in der Diskussion zum Artikel. Bis dahin bleibt die Seite für weitere Änderungen gesperrt.

Achtung!

Die Verwendung dieses Howto geschieht auf eigene Gefahr. Bei Problemen mit der Anleitung melde dies bitte in der dazugehörigen Diskussion und wende dich zusätzlich an den Verfasser des Howtos.

Hinweis:

Diese Howto-Anleitung wurde zuletzt von Stepe am 29.01.2015 unter Ubuntu 14.10 erfolgreich getestet.

Problembeschreibung

Ziel ist es, die Statuswerte des Speedport W921v mit einem Skript auszulesen und je nach Bedarf weiter zu verarbeiten. Im folgenden Beispiel wird PHP in der Version 5.3.3-7 verwendet.

Anmerkung: Das ursprüngliche Ziel, die Statuswerte direkt mit den eigenen Funktionen des Speedport auszulesen, konnte bisher mangels Zugriff auf die Quelldaten nicht realisiert werden. Die Lösung hier verwendet die Statuswerte, welche auf einer versteckten Statusseite des Herstellers Arcadyan generiert werden. Allerdings kann auf die Seite nur nach erfolgter Benutzeranmeldung zugegriffen werden. Da der Speedport doppelten administrativen Zugriff verweigert, darf keine weitere Webseite des Speedports geöffnet sein.

Anleitung

Voraussetzungen:

  • Ein lokaler Webserver (zum Beispiel Apache) mit PHP Modul (das Skript wurde mit der PHP-Version 5.3.3-7 getestet)

  • Die PHP-Datei muss in einem Verzeichnis liegen, auf welches der Webserver zugreifen kann (z.B. "/var/www")

  • Damit PHP die Daten von der Statusseite auslesen kann, wird die cUrl-Erweiterung benötigt:

    sudo apt-get install curl libcurl3 libcurl3-dev php5-curl 
    sudo /etc/init.d/apache2 restart  

Folgende Statusvariablen werden von der Statusseite ausgelesen:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
"bWanConnected" - Verbindungsstatus (0/1)
"var download_rate" - DSL Downstream (kbps)
"var upload_rate"   - DSL Upstream  (kbps)
"var max_download_rate" - maximaler Downstream (?)
"var max_upload_rate" - maximaler Upstream (?)
"var download_noise_margin"
"var upload_noise_margin"
"wan_ip" öffentliche IP-Adresse
"wan_subnet_mask"
"wan_gateway"
"primary_dns"
"secondary_dns"

Das Skript:

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
<?php
$_PASS="<PASSWORT DES SPEEDPORTS>";
$_REFERER="https://<IP DES SPEEDPORTS>/html/login/";
$_REFEREE="https://<IP DES SPEEDPORTS>/data/Login.json";
$_USERAGENT="Mozilla/4.73 [en] (X11; U; Linux 2.2.15 i686)";

$cl = curl_init();
curl_setopt($cl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($cl, CURLOPT_COOKIESESSION, true); 
curl_setopt($cl, CURLOPT_COOKIEJAR, "/tmp/speedport.cookie"); 
curl_setopt($cl, CURLOPT_COOKIEFILE, "/tmp/speedport.cookie");
curl_setopt($cl, CURLOPT_USERAGENT, $_USERAGENT);
curl_setopt($cl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($cl, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($cl,CURLOPT_NOBODY,false);

curl_setopt($cl, CURLOPT_REFERER, $_REFERER);
curl_setopt($cl, CURLOPT_URL, $_REFEREE);
curl_setopt($cl, CURLOPT_POST, true);
curl_setopt($cl, CURLOPT_POSTFIELDS, "password=$_PASS&showpw=0");

curl_exec($cl); 
//echo "Info1: ".curl_getinfo($cl,CURLINFO_HTTP_CODE)."<br>"; 
//echo "Error1: ".curl_error($cl)."<br>";

curl_setopt($cl, CURLOPT_POST,false);
$_REFERER=$_REFEREE;
$_REFEREE="https://<IP DES SPEEDPORTS>/hidden/status_main.stm";
curl_setopt($cl, CURLOPT_REFERER, $_REFERER);
curl_setopt($cl, CURLOPT_URL, $_REFEREE);

$_webpage = curl_exec($cl); 
//echo "Info2: ".curl_getinfo($cl,CURLINFO_HTTP_CODE)."<br>"; 
//echo "Error2: ".curl_error($cl)."<br>";
if($_webpage){

//Array mit den relevanten Variablenbezeichnungen
$vars = array("bWanConnected","var download_rate","var upload_rate","var max_download_rate","var max_upload_rate","var download_noise_margin","var upload_noise_margin","wan_ip","wan_subnet_mask","wan_gateway","primary_dns","secondary_dns");
//Array mit Anzeigetexten
$text = array("Verbindung:  ","Down:  ","Up:  ","Max Down:  ","Max up:  ","Noise margin down:  ","Noise margin up:  ","WAN-IP:  ","WAN-Subnetmaske:  ","WAN-Gateway:  ","Primary-DNS:  ","Secondary-DNS:  ");

$rows = explode("\n", $_webpage);
$val="";
$i=0;
?>

<!DOCTYPE html PUBLIC "../../xhtml1-transitional-translate.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" 
      xmlns:i18n="../">

<head>
  <title>Speedport Verbindungsstatus</title>

  <meta http-equiv="content-type" content="text/html; charset=utf-8" />

  <meta name="author" content="Stepe">
</head>

<body>

<?php
foreach($vars as $var)
{
	$pattern = '/^'.$var.'/';

	$matches = preg_grep($pattern, $rows);
	$matches = array_values($matches); //Array neu indizieren
	if($matches[0]){
		$val=substr($matches[0],strpos($matches[0],"=")+1,strlen($matches[0])-strpos($matches[0],"=")-2);
		$val=str_replace("\"", "", $val);		
		if($i > 0 & $i < 5)
		{
			echo $text[$i].$val." kbps<br>";
		}
		else
		{
			if($i==0){
				$val= $val=="1" ? "verbunden" : "getrennt";
			}			
			echo $text[$i].$val."<br>";
		}
	}
	$i++;
}
?>

</body>

</html>

<?php
}


$_REFEREE="https://<IP DES SPEEDPORTS>/data/Login.json";
curl_setopt($cl, CURLOPT_POSTFIELDS, "logout=byby");
curl_setopt($cl, CURLOPT_POST, true);
curl_setopt($cl, CURLOPT_URL, $_REFEREE);

curl_exec($cl); 
//echo "Info3: ".curl_getinfo($cl,CURLINFO_HTTP_CODE)."<br>"; 
//echo "Error3: ".curl_error($cl)."<br>";

curl_close($cl);

?>

Diese Revision wurde am 31. Oktober 2016 18:28 von noisefloor erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Howto