Connexion freebox v6 et c# [Résolu]

dodo7263 642 Messages postés mercredi 10 septembre 2008Date d'inscription 9 février 2017 Dernière intervention - 8 déc. 2011 à 21:47 - Dernière réponse : Whismeril 12114 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 18 octobre 2018 Dernière intervention
- 16 mai 2014 à 06:36
Bonjour tout le monde,

Cela fait bien longtemps...ravi de vous retrouver...bref voici ma question :

J'ai un "petit" projet en tete. Pour l'instant je suis en train de mettre tout cela sur papier donc pas de programmation.

J'ai une freebox revolution (V6) et lorsque je veux acceder a mon interface de gestion des parametres, j'utilise un simple navigateur web dans lequel je lui indique cette adresse : mafreebox.freebox.fr et j'arrive sur une page de login, je me connecte et j'ai ensuite acces a tous les parametres de l'interface dans le navigateur web.

Mon idee est de pouvoir recuperer certaines infos presentes dans ces pages en c# bien evidemment.

Ma question est donc la suivante:

Faut il plutot un projet style client/serveur avec connexion au serveur, envoi de requetes, attente reponse etc.... ?

ou bien

une utilisation des get / post (webrequest) ?

Dans le second cas, j'ai deja fait quelques essais rapides car la mise en oeuvre "me semble plus simple" mais je suis ennuye car je pense que la page login va me poser quelques soucis. Et oui il faut bien que je me connecte avant de pouvoir acceder au reste des infos.

Du coup je me replonge dans la premiere solution et.....je suis perdu.

Quel est donc votre avis ?

@pluche

SD


[b]"Chez ceux qui semblent très vertueux se cachent en général la vanité, l'orgueil, l'intolérance".

P.Coehlo (Maktub 2004)/b
Afficher la suite 

Votre réponse

7 réponses

dodo7263 642 Messages postés mercredi 10 septembre 2008Date d'inscription 9 février 2017 Dernière intervention - 20 déc. 2011 à 10:14
0
Merci
Bonjour a tous,

bon j'ai presque resolu mon "probleme".
Mais j'aurais bien voulu avoir votre avis.

@pluche


[b]"Chez ceux qui semblent très vertueux se cachent en général la vanité, l'orgueil, l'intolérance".

P.Coehlo (Maktub 2004)/b
Salut dodo,

Je sais que ça fait un moment que tu posté ça mais j'aimerais savoir comment tu as fais finalement parce aujourd'hui j'aimerais bien moi aussi récupérer ces infos..

Merci d'avance :D
dodo7263 642 Messages postés mercredi 10 septembre 2008Date d'inscription 9 février 2017 Dernière intervention - 6 août 2013 à 08:24
Salut,

Alors les choses ont pas mal changé depuis 2011 puisque tout récemment les nouvelles API venant avec le firmware 2.0 sont sorties. Pour le moment je suis en train de lire la documentation qui elle aussi est disponible. Dès que j'ai un peu de temps, je posterais une source qui montrera comment au moins s'identifier pour ensuite utiliser les API.

@++

SD
Commenter la réponse de dodo7263
0
Merci
/*
 * Created by SharpDevelop.
 * User: Eric
 * Date: 02/11/2013
 * Time: 13:43
 * 
 * To change this template use Tools | Options | Coding | Edit Standard Headers.
 */
using System;
using System.Net;
using System.Text;
using System.IO;
using System.Text.RegularExpressions;
using System.Security.Cryptography;
using System.Collections.Generic;
using System.Linq;

namespace testfree
{
 class Program
 {
  public static void Main(string[] args)
  {
   Console.WriteLine("Hello World!");
   Tuple<string,string> apptokenrequest = AppTokenRequest();
   Tuple<string,string> apptokenstatus = AppTokenStatus(apptokenrequest.Item2);
   Console.WriteLine(apptokenstatus.Item1);
   
   Console.Write("Activer l'app . . . ");
   apptokenstatus = AppTokenStatus(apptokenrequest.Item2);
   
   
   
   Console.WriteLine(apptokenstatus.Item1);
   Tuple<string,string> sessionRequest = SessionRequest("fr.freebox.testapp",apptokenrequest.Item1, apptokenstatus.Item2);
   
   if (sessionRequest.Item1 == "success")
   {
    Console.WriteLine(sessionRequest.Item1);
    string Output = ApiCall("http://mafreebox.freebox.fr/api/v1/lan/freeplug/",sessionRequest.Item2);
   }
   else
   {
    
   }
   
   Console.ReadKey(true);
  }
  
  private static Tuple<string,string> AppTokenRequest()
  {
   var httpWebRequest = (HttpWebRequest)WebRequest.Create("http://mafreebox.freebox.fr/api/v1/login/authorize/");
   httpWebRequest.ContentType = "text/json";
   httpWebRequest.Method = "POST";

   using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
   {
    string json = "{\"app_id\":\"fr.freebox.testapp\"," +
     "\"app_name\":\"Test app\"," +
     "\"app_version\":\"1.0\"," +
     "\"device_name\":\"LaptopA\"}";

    streamWriter.Write(json);
    streamWriter.Flush();
    streamWriter.Close();

    var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
    using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
    {
     var result = streamReader.ReadToEnd();
     Regex token = new Regex("app_token\":\"(.[^\"]*)");
     Regex trackid = new Regex("track_id\":(\\d*)");
     return new Tuple<string,string>(token.Match(result).Groups[1].Value.ToString(), trackid.Match(result).Groups[1].Value.ToString());
    }
    
   }
  }
  
  private static Tuple<string,string> AppTokenStatus(string trackid)
  {
   var httpWebRequest = (HttpWebRequest)WebRequest.Create("http://mafreebox.freebox.fr/api/v1/login/authorize/" + trackid);
   httpWebRequest.Method = "GET";

   var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
   using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
   {
    var result = streamReader.ReadToEnd();
    Regex status = new Regex("\"status\":\"(.[^\"]*)");
    Regex challenge = new Regex("challenge\":\"(.[^\"]*)");
    return new Tuple<string,string>(status.Match(result).Groups[1].Value.ToString(),challenge.Match(result).Groups[1].Value.ToString());
   }
   
  }
  
  private static string ChallengeRequest()
  {
   var httpWebRequest = (HttpWebRequest)WebRequest.Create("http://mafreebox.freebox.fr/api/v1/login/");
   httpWebRequest.Method = "GET";

   var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
   using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
   {
    var result = streamReader.ReadToEnd();
    Regex challenge = new Regex("challenge\":\"(.[^\"]*)");
    return challenge.Match(result).Groups[1].Value.ToString();
   }
   
  }

  private static Tuple<string,string> SessionRequest(string appid, string apptoken, string challenge)
  {
   
   string password = Encode(challenge,Encoding.ASCII.GetBytes(apptoken));
   string password1 = Encode(apptoken,Encoding.ASCII.GetBytes(challenge));
   
    
   var httpWebRequest = (HttpWebRequest)WebRequest.Create("http://mafreebox.freebox.fr/api/v1/login/session/");
   httpWebRequest.ContentType = "text/json";
   httpWebRequest.Method = "POST";

   using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
   {
    string json = "{\"app_id\":\"" + appid + "\",\"password\":\"" + password + "\"}";

    streamWriter.Write(json);
    streamWriter.Flush();
    streamWriter.Close();

    var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
    using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
    {
     var result = streamReader.ReadToEnd();
     Regex session = new Regex("session_token\" : \"(.[^\"]*)");
     Regex success = new Regex("success\": " + @"(\w[^,]*)");
     return new Tuple<string,string>(success.Match(result).Groups[1].Value.ToString(), session.Match(result).Groups[1].Value.ToString());
    }
    
   }
  }
  
  
  private static string ApiCall(string url, string sessionid)
  {
   //X-Fbx-App-Auth:
   HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
   httpWebRequest.Method = "GET";
   httpWebRequest.Headers.Add("X-Fbx-App-Auth", sessionid);

   HttpWebResponse httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
   using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
   {
    return streamReader.ReadToEnd();
   }
  }
  
  public static string Encode(string input, byte[] key)
        {
            HMACSHA1 myhmacsha1 = new HMACSHA1(key);
            byte[] byteArray = Encoding.ASCII.GetBytes(input);
            MemoryStream stream = new MemoryStream(byteArray);
            return myhmacsha1.ComputeHash(stream).Aggregate("", (s, e) => s + String.Format("{0:x2}",e), s => s );
        }
 
  
 }
}


J'ai un pb avec le password lors du login j'ai essayer d'inverser le challenge et l'apptoken comme pour le php, mais cela ne marche pas.

Quelqu'un pourrait m'aider?

Édition par la modération: ajout de la coloration syntaxique.
Commenter la réponse de Eric
pawnies20 2 Messages postés vendredi 28 mars 2014Date d'inscription 3 avril 2014 Dernière intervention - 3 avril 2014 à 13:02
0
Merci
Bonjour à tous.
Le problème a été résolu de quelle manière je vous prie?

Merci
Commenter la réponse de pawnies20
0
Merci
ça vaut le cout : http://p0w3rsh3ll.wordpress.com/2013/07/04/piloter-sa-freebox/
Whismeril 12114 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 18 octobre 2018 Dernière intervention - 16 mai 2014 à 06:36
Bonjour, cependant cet article n'est pas en C#.
Commenter la réponse de odrix

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.