hubiC, maintenant vraiment ubiquitous
Par GR le dimanche, janvier 29 2012, 18:02 - Reverse - Lien permanent
Votre serviteur s'est intéressé au cloud storage tel qu'implémenté par hubiC. Malheureusement, OVH ne fournit pas encore de binaire pour Linux. Eh oui, OVH a choisi de rendre disponible son espace de stockage uniquement via un client lourd. J'ai décidé d'analyser ce programme afin rendre ce cloud storage interopérable avec mon système (c'est légal).
Tout d'abord, certaines personnes arrivent à se connecter depuis Linux. Ces personnes possédaient un compte CloudNAS, le prédécesseur d'hubiC. Pour ces personnes, pas de problèmes. Pour les nouveaux arrivants (comme moi), le sytème de gestion des comptes d'OVH a changé. Un WAS (Web Application Service) est utilisé pour gérer les crédences d'hubiC. En analysant le programme Windows, je me suis aperçu que le client hubiC effectue 3 requêtes avant d'obtenir les informations qui serviront ensuite à la connexion WebDAV. Pour pouvoir se connecter, il est nécessaire d'avoir :
- l'URL du WebDAV
- le login du WebDAV
- le mot de passe du WebDAV
Les 3 requêtes sus-mentionnées sont destinées au serveur ws.ovh.com et permettent d'obtenir ces trois informations indispensables à la connexion WebDAV. Sans plus tarder, voici ces requêtes (en mode raw), toutes à destination de ws.ovh.com en HTTPS :
Requête POST nasLogin :
'POST /cloudnas/r0/ws.dispatcher/nasLogin HTTP/1.1'."\r\n". 'Content-Type: application/x-www-form-urlencoded'."\r\n". 'User-Agent: hubiC/1.0.9 (Windows NT 6.1; fr_FR)'."\r\n". 'Content-Length: 126'."\r\n". 'Connection: Keep-Alive'."\r\n". 'Accept-Encoding: gzip'."\r\n". 'Accept-Language: fr-FR,en,*'."\r\n". 'Host: ws.ovh.com'."\r\n". ''."\r\n". 'session=¶ms=%7B%20%22email%22%20%3A%20%22<login>%22%2C%20%22password%2 2%20%3A%20%22<password>%22%20%7D'."\r\n". "\r\n";
Requête POST getNas :
'POST /cloudnas/r0/ws.dispatcher/getNas HTTP/1.1'."\r\n". 'Content-Type: application/x-www-form-urlencoded'."\r\n". 'User-Agent: hubiC/1.0.9 (Windows NT 6.1; fr_FR)'."\r\n". 'Content-Length: 54'."\r\n". 'Connection: Keep-Alive'."\r\n". 'Accept-Encoding:gzip'."\r\n". 'Accept-Language: fr-FR,en,*'."\r\n". 'Host: ws.ovh.com'."\r\n". ''."\r\n". 'session=<id>'."\r\n". "\r\n";
Requête POST getCredentials :
'POST /cloudnas/r0/ws.dispatcher/getCredentials HTTP/1.1'."\r\n". 'Content-Type: application/x-www-form-urlencoded'."\r\n". 'User-Agent: hubiC/1.0.9 (Windows NT 6.1; fr_FR)'."\r\n". 'Content-Length: 54'."\r\n". 'Connection: Keep-Alive'."\r\n". 'Accept-Encoding: gzip'."\r\n". 'Accept-Language: fr-FR,en,*'."\r\n". 'Host: ws.ovh.com'."\r\n". ''."\r\n". 'session=<id>'."\r\n". "\r\n";
Et voilà. Ca va renvoyer les trois précieuses informations.
Certains pourraient me demander : mais comment avez-vous fait pour avoir ces informations ? Le serveur d'hubiC est en HTTPS ; on ne peut pas écouter la conversation entre le client et le serveur. Effectivement, sauf que le client tourne sur mon système. Rien ne m'empêche de brancher un débuggeur sur mon programme sur ma machine. En deux mots : OllyDbg, SSL_write.
Bon, comme j'aime aussi le Perl, je fournis le programme qui permet de récupérer les précieux sésames : http://www.protocol-hacking.org/public/hubic.pl
% ./hubic.pl Usage: ./hubic.pl -l login [-d] [-h] % ./hubic.pl -l <mon_login_genre_une_adresse_email> Password: URL: https://cloudnas1.ovh.com/XXXXXXXXXX/ Login: cloudnas Password: YYYYYYYYYY mount -t davfs https://cloudnas1.ovh.com/XXXXXXXXXX/ /mnt
Maintenant, hubiC fonctionne sur tous les systèmes supportant un client WebDAV.
UPDATE : la presse en parle :
UPDATE : autres versions du programme :
Commentaires
Super, je te conseil d'essayer ospy [1] et rohitab api monitor [2] aussi pour débugger/tracer/sniffer les application windows.
1] https://code.google.com/p/ospy
2] http://www.rohitab.com/apimonitor
Merci pour l'info.
J'avais testé rohitab, mais bien trop lourd pour faire un simple breakpoint sur une function (SSL_write dans mon cas).
Merci, mais j'ai un petit souci avec le script, j'obtient
"postNasLogin failed"
Je viens de retester les identifiants, et il n'y a pas de problème sur le manager d'ovh, je peux me connecter.
Est-ce que cela viendrait que j'ai un "." dans mon adresse email? (mon mot de passe contient que des caractères alphanumérique)
Merci d'avance =)
Même problème que toi.
"postNasLogin failed" lorsque je valide mon mot de passe.
Oui, vous devez installer le module Perl qui va bien pour gérer le HTTPS : LWP::Protocol::https.
Utilisez soit le package manager de votre système, soit la commande :
... en effet.
Par contre, je ne vois rien apparaître dans mon dossier /mnt. Mais je vais voir ça se plus près.
C'est normal. L'outil affiche une ligne qu'il faut copier/coller pour exécution. C'est juste un helper pour montrer comment monter un partage WebDAV sous Linux.
Ok, mais au risque d'etre lourd, j'ai l'erreur suivante qui apparait:
"mount: unknown filesystem type 'davfs'"
je suis en train de rechercher un Internet mais rine d'interressant apparait.
Là, ça sort de mon cadre. You are on your own.
Merci, ça marche d'enfer !!! Monté dans Dolphin etc. Super !
@ Baxterx : t'as installé davfs2 ? Sur mon opensuse 12.1, le paquet n'était pas installé, il a fallu que j'aille le chercher dans des dépôts extra ...
Man, YOU really made my day !
Ton script + rsync et on a une petite sauvegarde distante accessible par webdav. Génial !
Merci de faire le taff d'OVH à leur place! Je désespérais de pouvoir me servir d'Hubic de manière pratique et utile.
Kudos pour le travail!!!
Merci et bonne continuation
Merci GR, c'était ça :)
Akoine:
Merci monsieur!! ;)
couloucoucou:
Apparement une version Mac et Linux est dans les cartons
@Baxterx : My pleasure, sir. ;)
La version Mac est annoncée pour ce mois-ci, pas de date de sortie pour la version Linux par contre (même s'ils ont effectivement dit travailler dessus) ... :(
Bonjour
merci pour ce script perl bien pratique.
J'ai converti viteuf (hors gestion erreurs) en powershell
UPDATE par GR : voir le lien suivant pour le script en PowerShell :
http://www.protocol-hacking.org/public/getHubicWebdavInfos.ps1
@WeetA ça prend de la place ton truc. Si tu me mail le fichier je peux l'uploader et le mettre en lien (adresse : gr_at_protocol-hacking.org).
MErci ... tu est mon dieux vivant au moins jusqu'a la fin du mois !
Moi j'ai un problème avec linux
commande : ./hubic.pl -l nom@ndd.fr [-d] [-h]
j'ai : ./hubic.pl: Permission non accordée
Pourquoi ?
@GR
j'vais refaire ça plus propre :) et je te l'envoie
@DD : t'as vérifié que le fichier était exécutable ? Clic-droit dessus, propriétés, en général c'est une case à cocher à côté des permissions (propriétaire, groupe, etc.)
Ca semble super. Y'a t'il un moyen de passer les proxy ?
Et sinon, il y a CRDF Cloud qui fonctionne sans logiciel :).
Merci WeetA pour le script en powersheel mais quand je l'execute la 1er erreur c'est : Le serveur distant a retourné une erreur : (404) Introuvable.
J'en ai plein d'autre par la suite mais je suppose que cela provient juste de la page 404.
Merci encore pour l'effort !
"@DD : t'as vérifié que le fichier était exécutable ? Clic-droit dessus, propriétés, en général c'est une case à cocher à côté des permissions (propriétaire, groupe, etc.)"
Merci c'est mieux, mais maintenant j'ai des messages d'erreur
Merci pour votre travail.
Perso j'ai: erreur http: cannot resolve hostname (https) sous ubuntu que je ne sais pas resoudre.
@ romain : l'erreur, c'est quand tu veux utiliser le serveur via nautilus ? Si c'est ça, il faut virer le https:// au début, et spécifier que c'est une connexion sécurisée ...
Ca pose un pb si l'adresse mail comporte le caractère + ?
J'ai ce message en retour
URL: {"answer":null,"version":"1.0","error":{"__class":"result:error","status":301,"message":"This session id is not valid or expired : {\"answer\":null,\"version\":\"1.0\",\"error\":{\"__class\":\"result:error\",\"status\":310,\"message\":\"Wrong user id or password: Can't Login\",\"textStatus\":null},\"id\":0}","textStatus":"SessionExpired"},"id":0}
Login: {"answer":null,"version":"1.0","error":{"__class":"result:error","status":301,"message":"This session id is not valid or expired : {\"answer\":null,\"version\":\"1.0\",\"error\":{\"__class\":\"result:error\",\"status\":310,\"message\":\"Wrong user id or password: Can't Login\",\"textStatus\":null},\"id\":0}","textStatus":"SessionExpired"},"id":0}
Password: {"answer":null,"version":"1.0","error":{"__class":"result:error","status":301,"message":"This session id is not valid or expired : {\"answer\":null,\"version\":\"1.0\",\"error\":{\"__class\":\"result:error\",\"status\":310,\"message\":\"Wrong user id or password: Can't Login\",\"textStatus\":null},\"id\":0}","textStatus":"SessionExpired"},"id":0}
Je me réponds à moi même, on peut utiliser le nichandle donné par Ovh au lieu du mail et là plus de pb.
@sperenz55, attention, les urls visibles (en rouge) sont tronquées.
il faut les remplacer par leur version complète via "copier l'adresse du lien" (ou équivalent)
@GR, script powershell envoyé par mail
J'ai uploadé les deux scripts (Python et PowerShell). Voir UPDATE à la fin du post. Merci aux contributeurs.
Merci pour l'upload des scripts ! ca marche très bien
pour gérer correctement les caractères particuliers dans l’adresse mail ou le password, il faut urlencoder ces derniers. J'envoie par mail une version mise à jour du script python.
J'ai mis à jour. Merci.
Pouer les personnes interessees, lors de l;installation du client si la langue choisi n'est pas "Francais" alors la licence n'est pas affichee dans son integral a l'utilisateur.
La version anglaise retourne betement un lien vers ovh.co.uk, pour la version espagnole c'est carrement un encadre vide.
Je me demande donc des consequences que cela pourrait avoir devant un tribunal...
Edit : Lors de la creation d'un compte, quelque soit le pays choisi, la langue proposee pour la licence n'est affichee qu'en francais.
Dommage !
Super ce script.. ça marche du feu de dieu!!
Merci à donf!
Merci pour ce script ! :-)
Ça fonctionne nickel !
Merci pour ce script !
Fonctionne sans pb sur ubuntu (11.10) ;)
Bravo et merci ;)
GG!
The python script with config file :)
https://bitbucket.org/rangzen/hubic...
Merci,
Enfin j'arrive à me connecter depuis mon Mac. L'appli Mac d'OVH est totalement incapable ;-(
Super job ;-)
Merci beaucoup pour le script et le boulot (qui devrait être récompensé par OVH ;)
Au cas où d'autres auraient le même problème, si vous devez passer par un proxy il suffit de modifier le début du fichier ainsi :
my $ua = LWP::UserAgent->new;
$ua->agent("hubiC/1.0.9 (Windows NT 6.1; fr_FR)");
my $proxy = 'http://proxy.toto.com:8001'; // ICI on met le nom du proxy et le port
$ua->proxy(['http', 'https'], $proxy); // Et ça ça le rajoute à l'UA.
$h{_ua} = $ua;
Pour ceux qui sont sous OSX, j'ai fait un script AppleScript pour monter automatiquement le volume.
Le login et mot de passe sont stockés dans Keychain Access (Trousseau d'accès).
J'ai dû modifier le script perl d'origine pour qu'il accepte le mot de passe en paramètre.
Dispo ici : http://dl.dropbox.com/u/20410649/hu...
Merci beaucoup ! Cela va me permettre de ne pas passer par hubiC-drive ni hubiC-browser avec lesquels les transferts de fichiers sont fastidieux...
Le script de python de Nicolas marche impeccable !
Bonjour,
Pour le hubic du boulot, ça marche parfaitement. Par contre pour celui personnel, j'ai un message d'erreur
URL: {"answer":null,"version":"1.0","error":{"__class":"result:error","stat
us":451,"message":"Query cloudnas::r0#getNas quota has been exceeded (500 per 36 00 seconds) and will be replenished in 28800 seconds.","textStatus":null},"id":0}
Est-ce que quelqu'un sait ce que cela veut dire ?
Merci
Mortel GR !
Ca me fait une sauvegarde pas cher sur mon NAS Synology ! :)
Muchas Gracias !
Alors là, chapeau !
Super ! Grace a toi le service hubiC devient incontournable.
Pourquoi OVH ne communique-t-il pas sur l'accès WebDav?
Maintenant je vois hubiC comme un disque réseau sur mon linux, et les données importantes de mon NAS sont automatiquement sauvegardées.
Bravo et encore merci.
C'est de la balle ! Merci pour le script.
C'est la meilleur offre de stockage public online pour Linux.
Merci pour le script. Juste, si t'as remarqué, l'echo du shell n'est pas restitué après exécution du script. Faut juste un ReadMode('normal'); après $password = <>;
J'ai commis un script ruby qui fait la même chose un peu différemment et l'ai posté sur Github, pour ceux que ça intéressent : https://gist.github.com/2639276
Bonjour, merci de partager les effets de vos compétences, je vous envie ... j'en profite et j'apprends. Par contre, j'accéde bien à mon espace via nautilus en webdav mais pas avec dejà up (sauvegarde sous ubuntu 12.04 à jour) pour mes sauvegardes ...Erreur HTTP : Cannot resolve hostname (cloudnas1.ovh.com/mon_id_serveur_hubic)
J'ai essayé tout une série de façon de faire, mais non... Une idée ?
Merci, frtr.