Lorsqu'un bug apparaît dans une application réseau et qu'il n'est pas possible de modifier le comportement du client ni du serveur pour le contourner, il peut être nécessaire d'altérer les informations pendant leur transmission. Cette manipulation nécessite évidemment que les infomations transitent en clair sur le réseau.

Dans cet article, j'explique la manière dont j'ai corrigé la configuration du client DLNA intégré dans ma télévision.

Apparition du problème

Alors que je parcourais les différentes options de tri dans la liste des vidéos depuis le client DLNA de ma télévision, la connexion avec le serveur s'est brutalement interrompue. J'ai alors relancé le client DLNA, mais le problème a persisté.

Il restait cependant possible de consulter les contenus en sélectionnant "Tous les contenus", "Musiques" et "Images". Cela a permis de confirmer que le client et le serveur fonctionnaient encore correctement, seul un paramètre appliqué pour un seul type de contenu causait l'erreur.

Tentatives de correction du paramétrage

En parcourant les menus de la télévision et après quelques recherches sur Internet, j'ai compris que ce paramètre ne pouvait être modifié que depuis l'écran devenu inaccessible. Je n'ai pas non plus trouvé de possibilité de réinitialiser la configuration du client DLNA de la télévision sans réinitialiser totalement la télévision elle-même, ce que je ne voulais pas faire.

Je me suis donc tourné vers le serveur DLNA, une simple instance de minidlna lancée sur mon NAS sous Debian. Après avoir activé le paramètre log_level=http=debug, j'ai comparé les requêtes entre l'affichage du type de contenu "Musiques", totalement fonctionnel, et l'affichage du type de contenu "Vidéos", affecté par le problème. Cette comparaison m'a permis de déterminer l'erreur exacte : le type d'objet demandé (ObjectID) par la télévision était vide lors de la sélection du type de contenu "Vidéos", le serveur DLNA ne pouvait donc répondre correctement à cette requête.

La requête émise par le client étant invalide, il n'y avait pas non plus de possibilité de contourner le problème en agissant sur la configuration du serveur.

Contournement de l'erreur

La seule solution pour corriger le paramétrage de la télévision était donc d'accéder à l'écran qui provoquait l'erreur. Pour cela, j'ai opté pour une attaque de l'homme du milieu (MitM) afin de modifier à la volée le contenu de la requête, et permettre au serveur DLNA de recevoir une requête valide. L'outil parfait pour cela dans mon cas se nomme netsed (NETwork Stream EDitor).

Un autre problème mineur s'est posé lors de mes premières tentatives pour appliquer cette solution. Le protocole DLNA repose sur une détection automatique des paramètres du serveur par les clients. Il était donc inutile de tenter une modification du port coté serveur pour intercaler netsed entre le client et le serveur, puisque le client utilisait alors le nouveau port configuré. Pour contourner cet autre problème, j'ai simplement utilisé une règle iptables afin de rediriger les paquets à destination du port du serveur DLNA vers le port utilisé par netsed en local lors de l'arrivée des paquets sur le serveur.

$ # Redirection du port 8200 de l'interface enp1s0 vers le port 8201 pour les paquets entrants
$ sudo iptables -t nat -A PREROUTING -i enp1s0 -p tcp --dport 8200 -j REDIRECT --to-port 8201
$ # Lancement de netsed pour écouter sur le port 8201 et retransmettre les requêtes modifiées sur le port 8200
$ netsed tcp 8201 localhost 8200 's/ObjectID></ObjectID>V<'

Une fois netsed lancé, j'ai relancé le client DLNA, et le type de contenu "Vidéos" s'est correctement affiché. J'ai alors pu modifier le paramètre bugué pour remettre une valeur fonctionnelle. La dernière étape a consisté à stopper netsed et retirer la règle iptables pour restaurer le fonctionnement normal du service.


Gestion des mots de passe avec pass

dim. 25 févr. 2018 by Marmotte

Plusieurs solutions existent pour la gestion des mots de passe, chacune présentant ses avantages et inconvénients.

Je présente ici pass, un script bash permettant de gérer des mots de passe chiffrés avec GPG dans un dépôt git. Je l'ai choisi pour plusieurs raisons :

  • Très simple d'utilisation.
  • Très léger (et sans …
read more

Utilisation basique de GPG

dim. 25 févr. 2018 by Marmotte

GNU Privacy Guard (GPG) est un logiciel permettant de chiffrer et/ou signer des documents (fichiers, emails, commits git...), fonctionnant principalement à partir d'un système de paires de clés publique et privée.

Cet article est simplement un résumé des commandes basiques nécessaires à l'utilisation de GPG. J'explique ici l'utilisation de …

read more

Migration du SheevaPlug de Debian Wheezy vers Jessie

sam. 27 févr. 2016 by Marmotte

Après la migration du système Debian Wheezy vers Jessie sur mon SheevaPlug, j'ai eu la mauvaise surprise de me rendre compte que le système ne démarrait plus.

J'explique ici l'origine du problème qui l'empêchait de démarrer, ainsi que la solution que j'ai appliquée pour le corriger.

L'erreur

Après quelques dizaines …

read more

Masquer les messages de démarrage

dim. 15 sept. 2013 by Marmotte

Plymouth est une application lancée très tôt dans le processus de démarrage, qui permet d'afficher un écran graphique, ou semi-graphique, à la place des habituels messages de démarage du système.

Installation

Sous Debian, il suffit d'installer le paquet plymouth.

$ sudo apt-get install --no-install-recommends plymouth

Note : Certains thèmes sont disponibles dans …

read more

Environnement graphique léger

dim. 15 sept. 2013 by Marmotte

Un environnement graphique est quasi-indispensable, notamment pour visiter un bon nombre de sites web. Il en existe beaucoup sous Linux, ce qui permet de choisir selon des critères très variés.

J'aime bien les environnements légers, autant au niveau consommation de ressources qu'affichage à l'écran. Précédemment, j'utilisais Xfce, accompagné de Compiz …

read more

Versionner les configurations utilisateur

dim. 01 sept. 2013 by Marmotte

J'utilise régulièrement plusieurs ordinateurs. Avec le temps, je configure donc ces machines selon mes habitudes, afin de rendre leur utilisation plus simple et efficace pour moi.

Comme pour les notes d'installation, j'ai donc dupliqué les fichiers de configuration d'un ordinateur à l'autre, faisant des corrections sur chacun, sans forcément toujours …

read more

Introduction

mer. 28 août 2013 by Marmotte

Passionné d'informatique, adepte du libre, je passe beaucoup de temps à bidouiller sur mes différentes machines. Au fur et à mesure de mes expérimentations, j'ai tout naturellement accumulé un bon nombre de notes d'installation, et je continue d'en créer à chaque nouveau test. Il n'y a parfois qu'une procédure d'installation …

read more