Auteur Sujet: Connection SSH à une BOX SFR 7  (Lu 13970 fois)

0 Membres et 1 Invité sur ce sujet

rossmacfirdeen

  • Abonné SFR fibre FttH
  • *
  • Messages: 23
  • Rouen 76
Connection SSH à une BOX SFR 7
« Réponse #12 le: 13 juillet 2021 à 10:00:04 »
Bon, j'ai réussi  ;D

Code C# :   (Penser à ajouter RestSharp au projet : https://www.nuget.org/packages/RestSharp) (v104.2.0 ,au delà il y à un bug avec la prise en charge des caractères "_" dans les noms de propriété en XML)



private static void RestartBox()
        {

            string url = "http://192.168.1.1";


            var client = new RestClient(url);

            var request = new RestRequest("/api/1.0/?method=auth.getToken", Method.GET);

            var response = client.Execute<RspResponse>(request);

            var res = response.Data;

            string token = res.Auth.Token;
            string userName = "MonUser";
            string password = "MonPassword";

            string res1= Hash(token, userName);
            string res2 = Hash(token, password);

            url = $@"/api/1.0/?method=auth.checkToken&token={token}&hash={res1}{res2}";
            var request2 = new RestRequest(url, Method.GET);
            var response2 = client.Execute<RspResponse>(request2);

            var authToken = response2.Data.Auth.Token;

            string rebootUrl = $@"/api/1.0/?method=system.reboot&token={authToken}";

            var request3 = new RestRequest(rebootUrl, Method.POST);
            var res3 = client.Execute(request3);

            var check = res3.Content; // La box redémarre : Victoire !

        }

        private static string Hash(string token, string value)
        {
            var res = HashSha256(value);

            return HashHMac256(token, res);
        }

        private static string HashSha256(string source)
        {
            using (SHA256 sha256Hash = SHA256.Create())
            {
                string hash = GetHash(sha256Hash, source);

                return hash;

            }
        }

        private static string GetHash(HashAlgorithm hashAlgorithm, string input)
        {

            byte[] data = hashAlgorithm.ComputeHash(Encoding.UTF8.GetBytes(input));

            var sBuilder = new StringBuilder();

            for (int i = 0; i < data.Length; i++)
            {
                sBuilder.Append(data[i].ToString("x2"));
            }

            return sBuilder.ToString();
        }

        private static string HashHMac256(string key, string signature)
        {
            var shaKeyBytes = System.Text.Encoding.UTF8.GetBytes(key);
            using (var shaAlgorithm = new System.Security.Cryptography.HMACSHA256(shaKeyBytes))
            {
                var signatureBytes = System.Text.Encoding.UTF8.GetBytes(signature);
                var signatureHashBytes = shaAlgorithm.ComputeHash(signatureBytes);
                var signatureHashHex = string.Concat(Array.ConvertAll(signatureHashBytes, b => b.ToString("X2"))).ToLower();

                return signatureHashHex;


            }
        }




Classes XML :


[XmlRoot("Rsp")]
    public class RspResponse
    {

        public RspResponse()
        {
            Auth = new AuthenticationResult();
        }

        [XmlAttribute("stat")]
        public string Stat { get; set; }

        [XmlAttribute("Version")]
        public string Version { get; set; }


        [XmlElement("auth")]
        public AuthenticationResult Auth { get; set; }

    }

    public class AuthenticationResult
    {

        public AuthenticationResult()
        {
        }

        [XmlAttribute("token")]
        public string Token { get; set; }

        [XmlAttribute("method")]
        public string Method { get; set; }

    }


Il reste maintenant à refactoriser et à stabiliser tout ca :-)

Pour l'execution automatique, je vais faire une tâche planifiée windows (plan A), idéalement je serais interessée par une intégration à HomeAssistant (PlanB) ... si quelqu'un à des idées :-)

Merci à tous !!!
« Modifié: 13 juillet 2021 à 17:01:54 par rossmacfirdeen »

rossmacfirdeen

  • Abonné SFR fibre FttH
  • *
  • Messages: 23
  • Rouen 76
Connection SSH à une BOX SFR 7
« Réponse #13 le: 13 juillet 2021 à 16:40:40 »
Après quelques heures de développement, j'ai implémenté une grande partie des méthodes de l'API des box SFR, puis ai créé un client C#.
Ce dernier fournit des données à une interface WEB qui les consomme.

J'ai ainsi pu récupérer une grande partie des informations qui m'interessent :
  • BOX (matériel + connection)
  • ONT (etat)
  • VOIP (Journal d'appels)
  • FTTH
  • ...

Le tout avec une jolie page de login validant les identifiants de la box :-)
Voilà ce que ça donne une fois fini :





Il restera à implémenter un bouton de redémarrage ( les appels API fonctionnement correctement) pour redémarrer la box avec juste un seul bouton :-)


Coté performances c'est plutôt pas mal, il y a 7 appels API à faire pour afficher cette page, et cela prend moins de 420ms (la lenteur de la box est le seul point bloquant), en les paralellisant en asynchrone :

Infos Système (méthode publique) : 1 appel
Infos FTTH (méthode publique) : 1 appel
Infos WAN (méthode publique) : 1 appel
Infos ONT (méthode publique) : 1 appel
Infos VOIP (méthode privée) : 3 appels => 1 pour le token de base + 1 pour le token de session + 1 pour l'appel cible (le tout prends moins de 80ms)

Si vous avez des question ,n'hésitez pas !
« Modifié: 13 juillet 2021 à 17:08:51 par rossmacfirdeen »

fabtra31

  • Professionnel des télécoms
  • Abonné Orange Fibre
  • *
  • Messages: 2 505
  • ------ Espalion (12) ------- ↓300 Mbps ↑ 300 Mbps
    • Chaine Twitch
Connection SSH à une BOX SFR 7
« Réponse #14 le: 13 juillet 2021 à 18:45:34 »
Si tu peux faire un systeme de planification de reboot ca peut etre pas mal je pense ^^

xp25

  • Abonné RED by SFR fibre FttH
  • *
  • Messages: 5 948
Connection SSH à une BOX SFR 7
« Réponse #15 le: 13 juillet 2021 à 18:59:11 »
Je suis fan  ;D

*rossmacfirdeen entre sur le chat lafibre.info*

*Bjr, je veux redémarrer ma box à 3h du mat tout les jours sans passé par un programmateur physique, des idées ?
*Bjr, Voilà de quoi t'aider {code} ;)
*Merci bien je regarde ça  :D

*rossmacfirdeen left the chat*

Lendemain...

*rossmacfirdeen entre sur le chat*

*j'ai entièrement codé une interface en 30min pendant que je regardais une série et SFR me propose de devenir chef de projet au sein de son pole DEV box pour 10000€/mois :P
*Des questions les gars ? ;D

fabtra31

  • Professionnel des télécoms
  • Abonné Orange Fibre
  • *
  • Messages: 2 505
  • ------ Espalion (12) ------- ↓300 Mbps ↑ 300 Mbps
    • Chaine Twitch
Connection SSH à une BOX SFR 7
« Réponse #16 le: 13 juillet 2021 à 19:18:26 »
Il est chaud j'avoue x)

spectrolazer

  • Abonné RED by SFR fibre FttH
  • *
  • Messages: 4 637
  • Herblay-sur-Seine (95)
Connection SSH à une BOX SFR 7
« Réponse #17 le: 13 juillet 2021 à 20:03:27 »
Je suis fan  ;D

*rossmacfirdeen entre sur le chat lafibre.info*

*Bjr, je veux redémarrer ma box à 3h du mat tout les jours sans passé par un programmateur physique, des idées ?
*Bjr, Voilà de quoi t'aider {code} ;)
*Merci bien je regarde ça  :D

*rossmacfirdeen left the chat*


Lendemain...

*rossmacfirdeen entre sur le chat*

*j'ai entièrement codé une interface en 30min pendant que je regardais une série et SFR me propose de devenir chef de projet au sein de son pole DEV box pour 10000€/mois :P
*Des questions les gars ? ;D
Méfiez vous c'est 10k à vie et puis vu les pinces...même Drahi ne gagne pas ça  ;D

thedark

  • Abonné RED by SFR fibre FttH
  • *
  • Messages: 5 665
  • Réseau Covage
Connection SSH à une BOX SFR 7
« Réponse #18 le: 13 juillet 2021 à 20:09:01 »
Propre. J'aime bien.

rossmacfirdeen

  • Abonné SFR fibre FttH
  • *
  • Messages: 23
  • Rouen 76
Connection SSH à une BOX SFR 7
« Réponse #19 le: 15 juillet 2021 à 00:14:23 »
Bon, j'ai (presque) fini de développer une librairie C# pour piloter les box SFR conformement à cette documentation d'API : https://www.vincentalex.fr/neufbox4.org/download/apirest/apirest_4.0.pdf

Je dois avouer que c'est plutôt satisfaisant.

J'ai couvert les principales fonctions en lecture (car j'estime trop dangereux de tester des méthodes d'écriture avec des données aléatoires ^^)

Je couvre les périmètres :

DSL
LAN
ONT
FTTH
SYSTEME
VOIP
WAN

Je ne pense pas (pour le moment) publier le code source, mais s'il y a des beta testers qui veulent jouer avec , je suis partant :-)

Je ne demande que deux choses en retour :

Que vous connaissiez bien C# (évidemment) (=> le but n'est pas que vous appreniez le langage maintenant ^^, et je n'aurai pas le temps de vous former :p)
Que vous me fassiez vos retours sur ce thread afin de pouvoir partager les informations :-)

Volontaires bienvenus !




rossmacfirdeen

  • Abonné SFR fibre FttH
  • *
  • Messages: 23
  • Rouen 76
Connection SSH à une BOX SFR 7
« Réponse #20 le: 15 juillet 2021 à 00:19:28 »
Ci dessous un exemple d'implémentation C# :

(dont la fonction pour rebooter la box)  ;D ;D ;D

var client = SFRBoxApiClient.CreateClient();

            var infosWAN = await client.WAN.GetInfo();
            //.....
            // Autres périmètres avec éventuellement des méthodes complémentaires
            //.....
            var infosFTTH = await client.FTTH.GetInfo();

            //Rebooter la BOX
            var success = await client.SYSTEM.Reboot();

Le tout basé sur une config déclarée dans le (app/web).config :

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.2" />
    </startup>
  <appSettings>
    <add key="sfr.box.ipaddress" value="x.x.x.x"/>
    <add key="sfr.box.username" value="NomUtilisateur"/>
    <add key="sfr.box.password" value="MotDePasse"/>
  </appSettings>
</configuration>

Ci dessous le fichier ZIP avec les librairies (Il faut référencer SFR.API.Client dans votre projet)

xam60

  • Abonné OVH
  • *
  • Messages: 140
  • Beauvais 60
Connection SSH à une BOX SFR 7
« Réponse #21 le: 15 juillet 2021 à 17:58:18 »
Rien à voir avec le sujet mais en recherchant un peu dans l'API, certaines méthodes semblent ne plus exister on dirait :
voip.restart voip.stop voip.start
Si quelqu'un a des infos, je suis preneur

rossmacfirdeen

  • Abonné SFR fibre FttH
  • *
  • Messages: 23
  • Rouen 76
Connection SSH à une BOX SFR 7
« Réponse #22 le: 15 juillet 2021 à 21:37:11 »
Visiblement, mon sujet n’intéresse pas grand mode  :-[
1 seul téléchargement du zip en 24h  :-\

C'est assez décevant  :P

xam60

  • Abonné OVH
  • *
  • Messages: 140
  • Beauvais 60
Connection SSH à une BOX SFR 7
« Réponse #23 le: 15 juillet 2021 à 23:59:26 »
Ne te décourage pas, je pense qu'il n'y a rien de personnel contre ton travail.
J'imagine juste que les personnes prêtes à le mettre en place ont d'ores et déjà bypassé leur box avec un routeur personnel et que l'éventuel problème ne se pose plus.