myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
   » Plugin für Firefox
   » Plugin für IE
   » Gadget für Windows
» Regeln
» Wie poste ich richtig?
» Datenschutzerklärung
» wbb-FAQ

Mitglieder
» Liste / Suche
» Stadt / Anleitung dazu
» Wer ist wo online?

Angebote
» ASP.NET Webspace
» Bücher
» Zeitschriften
   » dot.net magazin

Ressourcen
» guide to C#
» openbook: Visual C#
» openbook: OO
» MSDN Webcasts
» Search.Net

Team
» Kontakt
» Übersicht
» Wir über uns
» Impressum

» Unsere MiniCity
MiniCity
» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Gemeinschaft » .NET-Komponenten und C#-Snippets » PS Fritz!Box API - TR-064
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

PS Fritz!Box API - TR-064

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
inflames2k inflames2k ist männlich
myCSharp.de-Poweruser/ Experte

images/avatars/avatar-3407.gif


Dabei seit: 03.01.2010
Beiträge: 2.098
Entwicklungsumgebung: Visual Studio 2010 Express


inflames2k ist offline

PS Fritz!Box API - TR-064

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Beschreibung:

Ich stelle hier meine Klassenbibliothek für den Zugriff auf die Fritz!Box bereit. Die Bibliothek enthält Klassen für den Zugriff auf verschiedene TR-064-Schnittstellen der Fritz!Box zur Abfrage von Informationen und zur Ausführung von Aktionen auf dem Gerät.

Hinweis:
Die Bibliothekist für .NET Standard Version 1.6 kompiliert und besitzt neben dem Standard SDK derzeit keine weiteren Abhängigkeiten.


Projekt auf Github:  PS.FritzBox.API
Lizenz:  MIT License

Die Bibliothek ist als NuGet-Package unter  https://www.nuget.org/packages/PS.FritzBox.API/1.0.0 bereitgestellt.

Der Download hier im Forum ist entfernt, da doppelt pflegen einfach zu viel Aufwand ist.

Bei den Kabelboxen scheint die TR-064 Schnittstelle deaktiviert zu sein. Bei denen wird die API dann wohl leider nicht funktionieren. - Falls da draußen dennoch eine funktionierende Kabelbox existiert könnt ihr ja mal bescheid geben.

Derzeit sind folgende Schnittstellen implementiert:
  • DeviceConfig (backup and restore settings, factory reset, reboot)
  • DeviceInfo (Ereignisse, TR-069 Provisioning Code, Security Port for TR-064
  • WANCommonInterfaceConfig (Zugriff auf Informationen des WAN Interfaces und zur Abfrage der aktuellen Up- und Downstream Raten, die auch im Webinterface angezeigt werden)
  • WANPPPConnectionClient (Informationen zur WAN PPP Verbindung)
Weitere Schnittstellen sind geplant. Diese habe ich aktuell jedoch nicht umgesetzt, da ich sie zum aktuellen Zeitpunkt nicht benötige.

DeviceConfig - DeviceConfigClient

Die Klasse DeviceConfigClient stellt Funktionen zum Backup der Einstellungen und zum Rückspielen des Backups bereit.

Im Konkreten wurden folgende Funktionalitäten auf Basis der  Schnittstellenbeschreibung implementiert:
  • FactoryReset (setzt den Router auf Werkseinstellungen zurück)
  • Reboot (führt den Neustart des Routers aus)
  • GetConfigFile (liefert die Download-Url für die Konfiguration zurück, AVM-interne Funktion: X_AVM-DE_GetConfigFile)
  • DownloadConfigFile (nimmt einen Speicherpfad entgegen, ruft intern die Methode GetConfigFile auf und lädt die Datei herunter).
DeviceInfo - DeviceInfoClient

Die Klasse DeviceInfoClient stellt Funktionen zur Ermittlung von Geräteinformationen bereit. Darunter auch die System-Logs.

Im Konkreten wurden folgende Funktionalitäten auf Basis der  Schnittstellenbeschreibung implementiert:
  • GetDeviceInfo (liefert Geräteinformationen, AVM-interne Funktion: GetInfo)
  • GetDeviceLog (liefert die Log-Einträge des Router zurück.)
  • GetSecurityPort (liefert den Sicherheitsport für den Zugriff per TR-064 Protokoll zurück)
WANCommonInterfaceConfig - WANCommonInterfaceConfigClient

Die Klasse WANCommonInterfaceConfigClient stellt Funktionen zum Abruf von Informationen zur WAN-Verbindung bereit.

Im Konkreten wurden folgende Funktionalitäten auf Basis der  Schnittstellenbeschreibung implementiert:
  • GetCommonLinkProperties (liefert allgemeine Informationen zur Verbindung zurück)
  • GetTotalBytesSent
  • GetTotalBytesReceived
  • GetTotalPacketsSent
  • GetTotalPacketsReceived
  • SetWANAccessType (AVM-interne Funktion: X_AVM-DE_SetWANAccessType)
  • GetOnlineMonitor (AVM-interne Funktion: X_AVM-DE_GetOnlineMonitor)
WANPPPConnection - WANPPPConnectionClient

Die Klasse WANPPPConnectionClient stellt Funktionen zum Abruf von Informationen PPP Verbindung, sowie zum Trennen und Aufbauen einer Verbindung bereit.

Im Konkreten wurden folgende Funktionalitäten auf Basis der  Schnittstellenbeschreibung implementiert:
  • GetInfo (liefert vollständige Informationen zur PPP-Verbindung zurück)
  • GetConnectionTypeInfo (liefert Informationen zum Verbindungstyp zurück)
  • SetConnectionType (Legt den Verbindungstyp fest)
  • GetStatusInfo (Liefert Statusinformationen zur PPP-Verbindung zurück)
  • GetUserName (Liefert den Nutzernamen zurück, der für den Aufbau der PPP-Verbindung übergeben wird)
  • SetUserName (Legt den Nutzernamen für den Aufbau der PPP-Verbindung fest)
  • SetPassword (Legt das Passwort für den Aufbau der PPP-Verbindung fest)
  • GetNATRSIPStatus (Liefert den NAT und RSIP-Status zurück)
  • ForceTermination (Trennt die PPP-Verbindung)
  • RequestConnection (Startet eine PPP-Verbindungsanforderung)
  • GetExternalIPAddress (Liefert die externe iP-Adresse zurück)
  • GetDNSServers (Liefert die verwendeten DNS-Server zurück, AVM-interne Funktion: X_GetDNSServers)
  • SetDNSServers (Legt die DNS-Server fest, AVM-interne Funktion: X_SetDNSServers)
  • GetLinkLayerMaxBitRates (Liefert die maximale UP-undDownstream Rate zurück)
Verwendung der Schnittstellenklassen:

Jede Schnittstellen-Klasse nimmt im Konstruktor die URL zur Fritz!Box und das Timeout für Anfragen entgegen. Zusätzlich stellen sie die Properties "UserName" und "Password" bereit. Diese dienen der Anmeldung an der Fritz!Box und müssen einem gültigen Fritz!Box-Nutzer zugewiesen sein.

Im folgenden ein Beispiel der Schnittstellenverwendung:

C#-Code:
WANCommonInterfaceConfigClient client = new WANCommonInterfaceConfigClient("https://fritz.box", 10000);
client.UserName = "inflames2k";
client.Password = "mysecret";

OnlineMonitorInfo monitor = await client.GetOnlineMonitor(0);

Schlagwörter: Fritz!Box, Fritz!Box UPnP, Fritz!Box TR-064, TR-064

Dieser Beitrag wurde 4 mal editiert, zum letzten Mal von inflames2k am 05.11.2017 10:13.

04.11.2017 13:51 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

images/avatars/avatar-2981.png


Dabei seit: 20.07.2008
Beiträge: 10.726
Herkunft: Süddeutschland


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Wäre es auch eine Option das Ganze auf GitHub Open Source zu machen, dass man hier auch aktiv mitmachen kann? Und als NuGet Paket anbieten...? Sharing via ZIP ist ja nicht so das Wahre :-)
Ansonsten fehlt mir hier auch die Angabe einer Lizenz.

Aber: super!
04.11.2017 14:04 Beiträge des Benutzers | zu Buddylist hinzufügen
inflames2k inflames2k ist männlich
myCSharp.de-Poweruser/ Experte

images/avatars/avatar-3407.gif


Dabei seit: 03.01.2010
Beiträge: 2.098
Entwicklungsumgebung: Visual Studio 2010 Express

Themenstarter Thema begonnen von inflames2k

inflames2k ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Habe das Projekt auf Github veröffentlicht und mich kurzerhand für die MIT-Lizenz entscheiden. - Link im Eingangsbeitrag. - Ein NuGet-Package habe ich ebenfalls erstellt und direkt bei NuGet veröffentlicht.

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von inflames2k am 04.11.2017 16:11.

04.11.2017 15:54 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

images/avatars/avatar-2981.png


Dabei seit: 20.07.2008
Beiträge: 10.726
Herkunft: Süddeutschland


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Also ich bekomme es trotz mehrere Anläufe nicht zum Laufen.

Trotz korrekter Settings gemäß Deiner Anleitung bekomme ich nur

Fehlermeldung:
System.Net.Http.HttpRequestException: 'An error occurred while sending the request.'

WinHttpException: A connection with the server could not be established

Und zwar mit Deinem Sample Code

C#-Code:
            WANCommonInterfaceConfigClient client = new WANCommonInterfaceConfigClient("https://fritz.box", 10000);

            client.UserName = "Ben";
            client.Password = "xxxxxxxxxxxxxxxxxxxx";

            OnlineMonitorInfo monitor = await client.GetOnlineMonitor(0);

            Console.ReadKey();

Stelle ich interessehalber von https auf https, passiert einfach bis zum Timeout nichts.
Ich werde wohl ein wenig im Code Debuggen und wenn ich Zeit finde auch den ein oder anderen PR einreichen.
Generell bin ich zum Beispiel ein Freund eine von Connection Pooling statt überall das Passwort mitzugeben.
Ebenso ein paar Parameter Dinge; aber das bei Zeit dann.

Abt hat dieses Bild (verkleinerte Version) angehängt:
2017-11-04 17_38_58-FritzBoxApp1 (Debugging) - Microsoft Visual Studio.png
Volle Bildgröße

04.11.2017 17:38 Beiträge des Benutzers | zu Buddylist hinzufügen
inflames2k inflames2k ist männlich
myCSharp.de-Poweruser/ Experte

images/avatars/avatar-3407.gif


Dabei seit: 03.01.2010
Beiträge: 2.098
Entwicklungsumgebung: Visual Studio 2010 Express

Themenstarter Thema begonnen von inflames2k

inflames2k ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Ist der Zugriff für Anwendungen auf deine Box aktiviert? Prüfen kannst du das im Webinterface der Box unter Heimnetz => Netzwerkeinstellungen im Bereich Heimnetzfreigaben. Bei mir ist das der Punkt "Zugriff für Anwendungen zulassen".

Ansonsten kann es u.U. auch sein, dass bei dir der Port für die Verbindung erforderlich ist. Probier mal mit der Url "https://fritz.box:49000".
04.11.2017 17:50 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

images/avatars/avatar-2981.png


Dabei seit: 20.07.2008
Beiträge: 10.726
Herkunft: Süddeutschland


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Ich hab eine 6490 Cable; unter System -> Fritz!Box-Benutzer -> Anmeldung im Heimnetz ist der Zugriff erlaubt. Unter Apps sehe ich meine Android App.
Also ja, soweit ich das sehe ist das alles aktiviert. Ich musste dies glaube ich schon für die Android FritzBox-App aktivieren; und die funktioniert.

Die Angabe des Ports war auch erfolglos.
Ich benutze meinen Adminuser.

Mit Port 49443 bekomme ich einen Internal Service Error.
Das is der Port, den ich bei meinen Versuchen damals genutzt hatte; denn 49000 dürfte kein HTTPS sein laut Doku.

fritz.box:49000/igddesc.xml liefert mir aber ein sauberes XML.

Da die Fehlermeldung ja WinHttpException: A security error occurred lautet vermute ich, dass dem HttpClient die Einstellung des Security Protokoll fehlt.
Evtl. ist dies ja bei den Fritzboxen jeweils anders (zB. weil der Provider an der FritzBox rumfingert). Also wahrscheinlich irgendwas wegen HTTPS.
04.11.2017 18:01 Beiträge des Benutzers | zu Buddylist hinzufügen
inflames2k inflames2k ist männlich
myCSharp.de-Poweruser/ Experte

images/avatars/avatar-3407.gif


Dabei seit: 03.01.2010
Beiträge: 2.098
Entwicklungsumgebung: Visual Studio 2010 Express

Themenstarter Thema begonnen von inflames2k

inflames2k ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Ja, laut Doku dürfte der Port 49433 aber auch nicht notwendig sein, wenn man die https-Url verwendet. Nichts desto trotz habe ich mit meiner Fon mal eben getestet was passiert, wenn ich den App-Zugriff deaktivere. - Dann kommt direkt ein Internal Server Error zurück.

Habe aber gerade einmal recherchiert. - Handelt es sich dabei um eine Box von Kabel Deutschland bzw. eine Box die mit einem Installationscode eingerichtet wurde?

Dann trifft eventuell folgendes Zitat:

Zitat:
es ist von Kabel Deutschland nicht vorgesehen, dass Änderungen an der Konfiguration der Fritzbox vorgenommen werden können. Aus diesem Grund ist der Zugriff über TR-064 nicht möglich.

Quelle:  TR064 - 6490 - Entwickleranfrage

Weitere Quelle mit folgendem Zitat:

Zitat:
Bei Fritz!Boxen für den Kabelanschluss (z.B. Kabel Deutschland) scheint neben Telnet auch die TR064-API nicht zu funktionieren. Vermutlich wurde die API von AVM auf Betreiberwunsch deaktiviert, da man sonst Dinge ändern kann, die das gesamte Kabelnetz stören können.

 FHEM - FRITZBOX

Dieser Beitrag wurde 4 mal editiert, zum letzten Mal von inflames2k am 04.11.2017 18:21.

04.11.2017 18:17 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

images/avatars/avatar-2981.png


Dabei seit: 20.07.2008
Beiträge: 10.726
Herkunft: Süddeutschland


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Ich bin nicht bei Kabel Deutschland, aber die Box ist vom Provider.
Also vielleicht ist tatsächlich der SOAP Zugriff gesperrt (REST geht).

Super. (Du kannst dafür natürlich nichts).
04.11.2017 18:18 Beiträge des Benutzers | zu Buddylist hinzufügen
inflames2k inflames2k ist männlich
myCSharp.de-Poweruser/ Experte

images/avatars/avatar-3407.gif


Dabei seit: 03.01.2010
Beiträge: 2.098
Entwicklungsumgebung: Visual Studio 2010 Express

Themenstarter Thema begonnen von inflames2k

inflames2k ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Gibt es zu der REST-API auch irgendwo Informationen?

// EDIT: Ich vermute mal, du beziehst dich da auf die Schnittstelle für die Home-Automation?

Weitere Frage, was erscheint denn wenn du  http://fritz.box:49000/tr64desc.xml aufrufst?

Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von inflames2k am 04.11.2017 18:28.

04.11.2017 18:23 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

images/avatars/avatar-2981.png


Dabei seit: 20.07.2008
Beiträge: 10.726
Herkunft: Süddeutschland


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Ne war nicht direkt Home Automation, aber war auf alle Fälle diese *.lua API.
fritz.box/login_sid.lua war dazu mein Endpunkt.

REST ist auch zu viel gesagt.
Nennen wir es lieber JSON API.
04.11.2017 18:53 Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als ein Monat.
Der letzte Beitrag ist älter als ein Monat.
Antwort erstellen


© Copyright 2003-2017 myCSharp.de-Team. Alle Rechte vorbehalten. 11.12.2017 20:14