[Avancé]Si sur votre live_cd de linux, les caractères sont énormes…

enorme

Ça nous arrive tous un jour où l’autre: On teste une nouvelle distribution linux, la carte graphique et l’écran sont mal reconnus, et on se retrouve avec une taille de police démentielle qui rend toute manipulation impossible à cause de la taille des menus. En plus si on est sur un live cd, toute manipulation conduisant au redémarrage est à proscrire, puisqu’on perdrait ce qu’on a fait.

Alors voici comment faire:

  1. Passer en terminal virtuel (combinaison de touche ctrl + alt + F1)
  2. éditer le fichier /etc/X11/xorg.conf avec les droits d’administration
    pour ce faire personnellement j’utilise nano, ce qui nous donne ‘nano /etc/X11/xorg.conf‘, éventuellement à faire précéder d’un sudo si vous êtes sur Ubuntu, ou bien à faire un su avant, je vous laisse agir selon votre distribution.
  3. Repérer la section dédiée à la carte graphique. Dedans il y a une ligne dans le style Driver  “quelque chose”. Et manifestement le quelque chose n’est pas bon, donc il faut le remplacer par quelque chose qui va avec votre config, les plus courants étant {ati, nv, vesa, nvidia}. Mais attention, certains correspondent à des pilotes propriétaires, s’ils ne sont pas inclus par défaut sur le live_cd (ce qui est rarement le cas), ça ne marchera pas. Par exemple moi j’ai une Geforce, et hier j’ai voulu tester Sidux. Le driver paramétré dans le xorg.conf était nv, je l’ai remplacé par vesa, qui est un driver générique, sachant que sur ma distribution habituelle j’utilise le driver nvidia qui est propriétaire
  4. Utilisez la combinaison de touches crtl + alt + backspace pour redémarrer le serveur X. Si le serveur redémarre, mais que vous avez toujours le problème, ou que c’est pire refaits la manip pour essayer un autre pilote. Si il ne se passe rien après avoir fait crtl + alt + backspace, revenez en section graphique (ctrl + alt +F7) et réessayez. S’il ne se passe toujours, rien, pas de chance, cette combinaison a été désactivée pour votre distribution.

Deux possibilités maintenant:

  • Vous vous apprêtez à plusieurs essais, ou bien vous souhaitez réactiver la combinaison dans l’un des cas contraire, passez à l’étape suivante.
    - Retournez dans le terminal virtuel, rééditez le fichier xorg.conf, et rajoutez à la fin la section que vous trouverez sur tuxplanet, mais ne redémarrez pas l’ordinateur après .
    - enregistrez le fichier
    Passez à l’étape suivante
  • Nous allons maintenant redémarrer X manuellement.
    - ps -A | grep X
    - notez le numéro de PID de Xorg
    - faites un kill PID (éventuellement en root si ça ne marche pas). Notez que j’ai dit kill et pas kill -09, nous souhaitons ici une terminaison correcte du processus, pas un arrêt brutal. Ne rajoutez le -09 que si ça ne marche pas autrement.

Après ça le serveur X redémarre, et normalement ça marche mieux. Sinon vous avez tous les outils pour refaire des essais. Pensez aussi à jeter un coup d’oeuil à la documentation francophone d’Ubuntu (même si vous n’êtes pas sur cette distribution, ce qui concerne le Xorg et les cartes graphiques reste valable)

Comment se procurer une clé gpg par des voies détournées..

gpg

Le gros problème avec les clés gpg, c’est que le serveur de clés gpg intégrés aux machines unix utilise un port particulier pour se connecter à internet. Si celui-ci s’avère bloqué, c’est le début de la galère. Heureusement, il est possible d’ajouter les clés manuellement, a condition de réussir à mettre la main dessus en recherchant sur Internet. Alors voici une manière de faire qui marche parfois.

Admettons que lors d’un update des listes de paquets, la console vous sorte un truc du genre:µ
W: GPG error: http://mirror.noreply.org jaunty Release: Les signatures suivantes n’ont pas pu être vérifiées car la clé publique n’est pas disponible : NO_PUBKEY CFF71CB3AFA44BDD

  • Repérez les 8 derniers caractères, ici AFA44BDD.
  • Allez sur google et recherchez ["AFA44BDD" site:http://subkeys.pgp.net/] (sans les crochets)
  • Parmis les résultats, il y en a qui tombent sur des pages bloquées par le proxy (donc a priori valides) et d’autres qui passent mais qui retournent des erreurs http. Oubliez ces derniers et concentrez vous sur les résultats bloqués par le proxy.
  • Recherchez sur google un de ces sites de surf anonymes qui servent justement à contourner les proxy, et surfez sur les url bloquées.
  • Bon l’ennui, c’est qu’il faut aussi trouver le petit non de la clé, mais si vous faites en parallèle une recherche sur google portant sur le nom que vous avez, vous devriez trouver tout un tas de petits gars qui ont eu le même problème que vous et qui ont posté sur des forums, faut chercher un peu mais ça se trouve, ici c’était : “94C09C7F”
  • Faites une recherche dans la page sur un lien qui pointe sur ce nom, et vous devriez arriver sur une page internet qui contient la clé vous pouvez pas la louper, elle ressemble à l’illustration de ce billet. Ne vous souciez pas de la longueur. Celle qui sert d’exemple à ce post fait trois kilomètres, mais parfois elles sont toutes petites.
  • Enregistrez la clé dans un fichier, ouvrez vos sources de mise à jour, aller dans sécurité, ajoutez une clé, sélectionnez le fichier où vous l’avez enregistré, refaites un apt-get update, avec un peu de chance, c’est bon.

IMPORTANT: LE TRUC DONNE DANS CET ARTICLE EST DE TYPE RECETTE DE GRAND MERE. CA MARCHE DANS CERTAINS CAS, RIEN NE DIT QUE ÇA MARCHERA DANS TOUS LES CAS. PAR AILLEURS CE TUTO CONTOURNE LA MANIÈRE DE FAIRE OFFICIELLE. UTILISEZ LA A VOS RISQUES ET PERILS. JE DECLINE TOUTE RESPONSABILITÉ EN CAS DE DISFONCTIONNEMENT DE N’IMPORTE QUEL ORDRE SURVENU A VOTRE ORDINATEUR PAR SUITE DE L’APPLICATION DE CE TUTORIEL.

[Avancé] clés GPG et cyptage asymétrique

gpg

Je vais essayer d’être aussi concis que possible, mais je vais devoir faire une brêve introduction à la cryptographie. Pendant des siècles, la cryptographie a été à clé unique. Par exemple si je prend cet article et que je décide de décaler chaque lettre de l’article de 6 lettres dans l’alphabet, j’aurais alors a=f, b=g, c=h et ainsi de suite. Bien sûr le moyen de décodage est totalement symétrique, il suffit de faire l’inverse. Ca vaut pour cet exemple ultra simple, et vaut également pour tout un tas de codes compliqués, comme le code symbolique de Louis XIV ou la machine enigma. A chaque fois on prend un message original, on le triture de manière plus ou moins complexe pour le coder, et celui qui le reçoit doit connaitre le procéder de codage (la clé) et l’inverser.

Mais le défaut énorme de ce type de codage, c’est qu’il faut que l’émetteur et le récepteur se rencontrent au moins une fois pour convenir de la clé. Dans le monde d’aujourd’hui où des gens se parlent d’un bout du monde à l’autre, ce n’est pas trop faisable. Heureusement le cryptage asymétrique a été inventé: au lieu d’une seule clé, il y en a deux, une publique, et une privée. Et là ou c’est très fort, c’est que ce qui est crypté avec la clé publique ne peut être décrypté que par celui qui possède la clé privée et vice versa.

L’intéret est énorme: Il suffit que chacun donne sa clé publique dans un catalogue ouvert à tous, et tout le monde pourra lui envoyer des messages cryptés sans l’avoir rencontré au préalable. Et lui, il peut utiliser sa clé privée pour crypter ses messages et les signer. Ca permet de garantir l’authenticité du message. Si marc reçoit un message de paul et qu’il veut être sûr que c’est bien paul qui a envoyé le message, il utilise la clé publique sur le message signé par paul avec sa clé privée, et si quelqu’un a essayé de se faire passer pour paul il sera tout de suite repéré puisqu’il ne connait pas la clé privée de paul et n’a donc pas pu signer le message.

Bien sûr tout ça est extrêmement simplifié, et vous trouverez sans doute bien plus de détails sur les sites dédiés au cryptage Asymétrique, au chiffre RSA et à GnuGPG. En tout état de cause, voici une application directe: Une clé gpg est la clé publique d’un éditeur de logiciel. Celui-ci utilise sa clé privée pour signer ses logiciels, et nous pouvons utiliser la clé publique pour vérifier que les logiciels que nous trouvons sur internet viennent bien de lui et pas d’un quelconque pirate qui aurait bidouillé le logiciel pour y introduire un malware.

Ce procédé est très connu dans le monde de Linux, et en particulier dans les distributions issues de Debian, il est utilisé pour garantir l’authenticité des paquets non issus des dépots officiels.

petit edito…

Plop un petit mot à propos de ce blog et de son avenir. Comme vous aurez pu le remarquer, je suis de retour après plusieurs mois, qui m’ont permis d’accumuler un certain nombre d’idées d’articles. Il y a un certain nombre de bidouilles firefox dont je n’ai pas encore parlées, et un certain nombre de notions java que je voudrais expliquer, ainsi que certaines bidouilles logicielles ou linuxiennes. Je pense que ce que je fais ici a son role, car finalement les sources d’informations un peut techniques ne sont pas si nombreuses que cela sur le Web, et il est bon de dupliquer un minimum l’information pour mieux en assurer la pérennité, de même qu’il est bon de savoir aborder les choses de différents points de vue jusqu’à ce que nous en trouvions un qui nous paraisse logique et plus facilement compréhensible. D’un autre coté, il est bon de ne pas se disperser outre mesure. Ce que je fais sur ce blog est certes utile à la 50aine de personne qui le visitent quotidiennement, principalement en provenance de Google, mais ça pourrait bénéficier d’une bien meilleure audience et donc être utile a bien plus de monde si je le postais sur un site spécialisé, et c’est en partie ce que je fais en contribuant à divers wikis. A l’horizon de fin aout environ, je pense que je laisserai le blog en sommeil pour un temps indéterminé, ayant une perspective de rentrée chargée.

N’oubliez pas que l’informatique est en constante évolution. Même les technologies éprouvées comme java évoluent. On est en train d’attendre la sortie de Java EE 6 (j’expliquerai peut être un de ces jours ce que c’est), l’HTML5 est en cours d’élaboration, une nouvelle version de PHP est sortie il n’y a pas longtemps, Google envisage de lancer un système d’exploitation pour Netbooks, Firefox 3.5 vient de sortir, Vlc 1.0 vient de sortir en version finale, Windows Seven sera bientôt disponible en précommande, Ubuntu 9.10 est en cours de développement, Twitter est en train de prendre un essort considérable, et la liste est encore longue. Celui qui veut apprendre à connaitre l’informatique doit effectuer une double tache permanente d’apprentissage sur le fond des technologies éprouvées actuelles, parce qu’on n’a jamais fini d’apprendre, et de veille technologique pour surveiller et anticiper les futures évolutions de l’informatique. Bonne route sur les chemins du savoir :)

Publié dans Le blog. Mots-clefs : , . Laisser un commentaire »

Songbird : le logiciel idéal pour écouter les WebRadios

songbird600

Je ne sais pas si vous appréciez d’écouter des Web Radios, mais moi j’aime beaucoup. Ce qui passe sur la FM n’est pas inintéressant, mais je trouve que c’est trop commercial et formaté, avec un quart d’heure de pub toutes les demi heures pour certaines. Et puis on ne trouve pas de tous les genre. Tandis que le Web est bourré de petites Web Radios sympas, avec très peu de pub, et un répertoire de genre bien plus varié et bien moins commercial que ce qu’on trouve sur la FM. Reste à trouver un bon logiciel pour en profiter…

Après quelques essais, j’ai été séduit par Songbird. Ce logiciel a plus d’un tour dans son sac. D’abord il est gratuit et open-source. Il a des liens de parenté avec Mozilla, il est multi plateforme, idéal pour ceux qui jonglent entre Windows et Linux, et puis il a une interface conviviale, un classement des web radios par genre, un plugin qui affiche un résumé sur la vie de l’artiste dont le morceau est joué, et en plus il bouffe très peu de CPU, ce qui est idéal, c’est pas tous les média players qui peuvent s’en vanter ;) .

Le site est en anglais, mais rassurez vous, vous pouvez l’obtenir en français (cf la capture d’écran ci dessus, vous pouvez cliques dessur pour la voir en taille normale ;) ). Bonne écoute :) .

Quelques liens utiles pour programmer sereinement en java

Jusqu’à présent, je vous ai présenté le java à ma façon, parce que je trouve que la manière dont mes collègues le présentent n’est jamais suffisamment pédagogique. Il faut toujours commencer par les bases, sauf que celles-ci sont toujours tellement évidentes pour le professionnel, qu’en général il en zappe une partie. N’étant dans le java que depuis un an et demi, je me souviens encore très bien de mes débuts, et de mes difficultés d’alors. Cependant il est inutile de réinventer la roue en vous exposant l’intégralité des finesses de ce vaste sujet, ce qui prendrait un temps considérable, et serait totalement inutile puisqu’il existe d’excellents tutoriels sur la toile.

Dans le cadre de mon travail, je suis un intégrateur, c’est à dire que je reprend des bouts de logiciels qui existent déjà, et j’ajoute un ciment qui me permet de les liers entre eux dans un but novateur d’interaction entre tous ces bouts de logiciels. Entre 80% et 90% du code que je manipule existe déjà! C’est le principe de base de la programmation moderne. On reprend ce qui a déjà été fait, on ajoute juste ce qui manque. Et bien je me propose de faire de même dans le cadre de ces tutoriels. Je vais donc vous inviter à puiser abondamment dans des sites comme ceux qui suivent:

Qui sont des références absolues du petit programmeur, même s’il y a de nombreuses autres sources d’informations sympathiques à trouver sur le web ;) .

Tant que nous y sommes, voici un certain nombre de sites dont vous aurez rapidement besoin pour vous faciliter la programmation:

  • javadoc online vous renseignera très utilement sur toutes les classes existantes et leur usage.
  • findjar.com vous aidera à retrouver les librairies qui vous manquent, ce qui provoque ces agaçantes erreurs de “ClassNotFoundException”.
  • java examples contient des centaines de petits bouts de code qui illustrent telle ou telle fonctionnalité de java, une vraie mine d’or pour comprendre comment marchent les choses :) .

Il y a aussi java source.net, mais a priori, vous n’en aurez pas besoin tout de suite ;) . Voila pour les liens utiles. Alors bouquinez bien, potassez bien, et à bientôt pour quelques éclaircissements sur certains points chauds :D .

Compiler et exécuter un fichier java.

vaisseau_java_2-compil

En complément à mon article précédent, voici comment faire pour compiler et tester mon exemple:

  • D’abord, récupérez le code source sur mon pastebin.
  • Ensuite, vous allez avoir besoin d’un outil de compilation. Sous Ubuntu, faites un petit
    sudo apt-get install gcj” pour l’installer (sachant que si vous travaillez depuis un ordinateur de votre école ou université, le paquet est probablement déjà installé, et vous pouvez sauter cette étape.
  • Ensuite, la procédure est simple: “javac monfichier.java” pour compiler (avec le ‘c’ de compilateur à la fin).
  • java monfichier arguments” pour  lancer l’exécution (sans le ‘c’ cette fois ci, sans le “.java”, et les arguments, c’est en option, ça correspond au “String [] args”, l’argument de la fonction main qui est appelée pour lancer le programme).

Dans notre cas, procéder comme sur l’illustration de ce billet, je pense que c’est assez explicite ;) .

Introduction à la programmation Objet (2)

vaisseau_java_2

Dans mon exemple d’hier, je vous donnais les clés de la compréhension des fondamentaux de l’orienté objet. Nous gagnons aujourd’hui un petit peu en complexité. Cette classe est la même que celle d’hier, mais enrichie par l’arrivée de différentes nouveautés.

  • Comme vous pouvez le remarquer, il est possible d’initialiser les attributs de la classe à l’extérieur du constructeur. C’est une facilité qui permet d’apporter de la clarté dans le code, car comme ça seuls les champs qui doivent varier sont initialisés dans le constructeur.
  • Vous remarquez également que nous avons ici deux constructeurs, la chose est rendue possible par le fait que les deux ne prennent pas le même nombre ni le même type de paramètres. Ce n’est d’ailleurs pas réservé aux constructeurs, c’est le cas de n’importe quelle fonction. Par exemple vous pouvez avoir une fonction chargerPreferences(String nomFichier) et une fonction chargerPreferences(FileReader fichier), étant entendu que la première va ouvrir le fichier spécifié puis faire appel à l’autre. Et dans le cas présent, vous remarquerez qu’effectivement le constructeur qui prend le plus de paramètres fait appel au constructeur simple par le biais du mot clé “this”. Ce mot clé permet soit de désigner le constructeur de la classe s’il est utilisé comme fonction, soit de désigner une instance de la classe. Bien sûr il n’est pas obligatoire de lier les constructeurs, on aurait pu recopier le premier dans le deuxième, et éviter le renvoi. Mais en règle général en programmation, on évite de dupliquer le code tout simplement parce que s’il y a une modification à faire, on aime bien n’avoir à la faire qu’une seule fois.
  • Vous remarquerez enfin l’apparition du mot clé “static”. Ce mot clé permet de désigner une fonction ou un paramètre comme indépendant d’un objet particulier, mais au contraire commun à tous les objets de la classe. C’est un peu l’analogue d’une variable globale. Vous pouvez créer 100 vaisseaux, tous de nom, de couleur et de nombre de canons différents, mais si vous modifiez la variable nombre de vaisseaux, tous seront affectés, parce que c’est une variable dite “de classe et non d’instance”, c’est à dire qu’elle ne s’applique pas à un objet particulier de la classe, mais à l’ensemble de ces objets.
  • et puis il y a la fonction public static void main(String args). Comme vous le remarquerez, cette fonction est “static”, donc ne s’applique pas à un objet particulier mais à l’ensemble de la classe. En particulier, par convention, ce nom et cette signature de fonction désignent le bout de code qui doit être appelé pour lancer le programme.
  • Que dire d’autre, System.out.println() est une fonction qui permet d’afficher la chaine de caractères spécifiée à l’écran. On peut concaténer deux chaines de caractères avec des ‘+’. Il est également possible de concaténer des entiers avec une chaine de caractères, et comme vous le voyez, si jamais ça sort de l’écran, on peut étaler sur plusieurs ligne, le programme s’en fout du moment qu’il y a bien le point virgule à la fin de l’instruction ;) .

Je sens que vous êtes légèrement perdus, donc je vais faire un bref rappel sur les variables:

  • On appelle variable d’instance un attribut qui décrit une caractéristique d’un objet de la classe. Chaque objet de la classe possède cet attribut (couleur, nombre de canons, nom…) mais il peut être différent en fonction de l’objet. On y accède en utilisant le nom de la variable suivit d’un point et du nom de l’attribut, par exemple vaisseau1.couleur pour obtenir la couleur du vaissau1 ou encore vaisseau2.nombre_de_canons pour obtenir le nombre de canons du vaisseau2.
  • On appelle méthode d’instance une méthode (fonction) qui peut s’appliquer à une instance (un objet) particulier de la classe, exemple accelerer(), que  l’on applique à un objet particulier, par exemple vaisseau1.accelerer() pour faire bouger le vaisseau1.
  • On appelle variable de classe une variable qui ne dépend pas d’un objet de la classe, mais qui est commun à tous les objets. Ces variables sont repérées par le mot clé “static”. Exemple, nombre_vaisseaux est une variable de classe. Si on la modifie, elle change pour tous les objets. On peut y accéder par le nom de la classe suivit d’un point et du nom de la variable, par exemple VaisseauSpatial.nombre_vaisseaux permettrait d’y accéder depuis une autre classe,
  • de même qu’une autre classe pourrait lancer la méthode main par l’instruction VaisseauSpatial.main(args); En effet la méthode main elle non plus ne s’applique pas à un objet particulier, mais comme toutes les méthodes statiques, elle s’applique à manipuler des objets de la classe.

J’espère avoir été suffisamment compréhensible. Ce que je raconte est un peu dur à suivre, parce que malgrès tout je suis obligé d’introduire peu à peu le vocabulaire de base du programmeur java. Enfin vous avez l’exemple du code source pour comprendre, et en extrapolant un peu par rapport aux autres langages vous devriez avoir les outils pour piger le truc. Je précise que j’ai utilisé le logiciel très connu Eclipse pour programmer ma classe. Ceci dit vous n’en avez absolument pas besoin pour débuter. N’importe quel éditeur de texte basique comme Notepad++ sous Windows, et Gedit sous Linux vous permettrons d’avoir le minimum de coloration syntaxique sans avoir besoin de passer par des choses plus compliquées. Disons que c’est pour moi une habitude et un outil de travail. Je consacrerai sans doute prochainement un article aux environnements de développement.

Pour finir, voici ce que l’on vois lorsqu’on lance ce programme:

vaisseau_java_2-exe

Comme vous le voyez, le main a été appelé, il a déclaré deux vaiseaux qui ont été construits d’après ses spécifications, et il leur a appliqué quelques méthodes d’instance. La variable nombre_vaisseaux a bien été incrémentée deux fois, autant de fois que des vaisseaux ont été construits (elle n’a été initialisée q’une seule fois lors du premier appel de la classe).

Introduction à la programmation Objet

Je me rappelle encore de mon premier cours sur le java. Le prof a expliqué en un quart d’heure ce qu’était une classe, et ce qu’était une instance, et a passé l’heure suivante à employer à tout bout de champ des expressions comme “variable de classe”, “variable d’instance”, méthode et constructeur, de sorte que tout le monde s’est retrouvé instantanément largué, parce que le temps de se rappeler de ce qu’est un constructeur, le prof était déjà passé à autre chose. On va essayer d’être un peu plus simples.

Le principe de la programmation objet, c’est que dans tout programme, on manipule des objets. Par exemple un jeu de simulation de combat spatial contiendra des vaisseaux, des canons, des projectiles, un espace 3D, etc, tous ces objets interagissant entre eux. Le principe de la programmation objet, c’est de rassembler dans un même bout de programme (la classe) tout ce qui se rapporte à un objet particulier, à savoir: ses caractéristiques (les attributs), par exemple la couleur du vaisseau, son nombre de canons ou sa vitesse, et les actions qu’on peut effectuer avec cet objet (les méthodes), par exemple accélérer, ralentir, etc. On y ajoute aussi un bout de code qui explique comment faire pour créer un nouvel objet. Voici un exemple qui illustre mon explication:

vaisseau_java

Ce qu’il faut retenir, c’est que cette classe décrit comment tous les objets de type VaisseauSpatial seront. Mais il peut y en avoir plusieurs. Chaque fois que l’on va vouloir créer un nouveau vaisseau, on va appeler la fonction/méthode qui porte le même nom que la classe: c’est le constructeur. L’appel de cette fonction réserve la place en mémoire pour stocker un nouveau vaisseau spatial, initialisé comme le dit le constructeur. Par exemple, dans un autre programme, on pourra trouver la séquence suivante:

VaisseauSpatial vaisseau1 = new VaisseauSpatial();
VaisseauSpatial vaisseau2 = new VaisseauSpatial();
vaisseau1.couleur = “jaune”
vaisseau2.accelerer();

Qu’est-ce qui se produit exactement? Eh bien deux objets décrits par la classe précédentes et stockés dans les variables vaisseau1 et vaisseau2 sont créés. La couleur du vaisseau1 ne nous plait pas, donc on la change, et on demande au vaisseau2 d’accélérer un peu. Vous remarquerez la manière dont on s’y prend pour accéder à tout ce qui se rapporte à un objet: on met le nom de la variable, un “.”, et le nom du paramètre (attribut) ou de la fonction (la méthode) qu’on veut appeler sur cet objet.

Je n’en dirai pas plus pour aujourd’hui, nous avons vu l’illustration de base du concept, il restera encore à voir comment l’utiliser, c’est un chouia plus complexe, mais pas tant que ça.

Capturer le localhost dans WireShark/Ethereal sous Windows

Je ne sais pas si certains d’entre vous bossent sur des projets telecom, mais il est une situation dans laquelle on se retrouve tôt ou tard: avoir besoin de tester deux logiciels censés communiquer entre eux par le réseau sur son propre ordinateur, et vouloir sniffer le réseau pour savoir ce qu’ils se disent exactement. Problème, wireshark (nouveau nom d’Ethereal) capture tout ce qui passe par la carte réseau, mais dans le cas de communication réseau internes à l’ordinateur, les paquets empruntent des raccourcis qui les font échapper à cette capture. Comment tricher pour les avoir quand même? Une façon de faire consiste à les forcer à passer par la carte réseau, en indiquant à windows que tous les paquets en provenance de notre ordinateur et à destination de notre adresse ip doivent emprunter la passerelle par défaut.

I visualisation des paramètres initiaux :

D’abord on fait un ipconfig pour repérer son adresse ip, et la passerelle par défaut. Par exemple on obtient ça:

C:\>ipconfig
Windows IP Configuration
Ethernet adapter Local Area Connection:
Connection-specific DNS Suffix  . : toto.titi.tata.com
IP Address. . . . . . . . . . . . : 192.168.16.53
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . : 192.168.16.2

Tant qu’on y est, on peut aussi regarder les paramètres par défaut de routage interne :

H:\>route print 192.168.16.53 | find “192.168.16.53″
192.168.16.53  255.255.255.255        127.0.0.1       127.0.0.1       20

Le résultat dit que les paquets à destination de mon adresse IP doivent être redirigés sur mon localhost. C’est ce que nous allons changer.

II Forçage du passage des paquets par le routeur :

Nous allons donc ajouter une route à Windows en lui disant que pour router des paquets vers notre adresse IP, il faut passer par le routeur:

H:\>route add 192.168.16.53 mask 255.255.255.255 192.168.16.2 metric 1

Regardons maintenant les nouveaux parametres de routage de windows :

H:\>route print 192.168.16.53 | find “192.168.16.53″
192.168.16.53  255.255.255.255        127.0.0.1       127.0.0.1       20
192.168.16.53  255.255.255.255 192.168.16.2 192.168.16.53       1

La nouvelle route a bien été ajoutée. L’étape suivante concerne notre application qui tourne en interne : Au lieu de lui donner l’adresse hote interne 127.0.0.1, il faut lui donner l’adresse hôte externe, dans cet exemple 192.168.16.53. Une fois que c’est fait, nous pouvons lancer ethereal/wireshark  et notre application, et les paquets seront capturés.

III Résoudre le problème du dédoublement des paquets :

Seul petit problème, le trajet des paquets va être le suivant :
1)      Le paquet part de l’application cliente sur notre ordinateur
2)      Il est routé vers le routeur
3)      Le routeur nous le renvoie
4)      Le paquet est reçu par l’application serveur sur notre ordinateur

Et dans le cas du trajet serveur -> client, c’est la même chose.

Ca implique que chaque paquet passe deux fois par notre carte réseau, et que du coup tous les paquets seront capturés en double par wireshark/ethereal. Pour pallier à ce petit problème, il suffit d’ajouter un filtre dans wireshark, pour lui indiquer par exemple de bloquer les paquets sortant de la carte réseau du routeur. Par exemple, si en plus vous ne voulez que les paquets snmp, et que votre carte réseau a pour adresse 00:ab:cd:ef:12:34, indiquez le filtre suivant dans wireshark/ethereal:

snmp && !(eth.src == 00:ab:cd:ef:12:34)

Et le tour est joué!

IV Rétablir les choses dans leur configuration d’origine :

Lorsqu’on n’a plus besoin de capturer les paquets, il n’est pas nécessaire de polluer le routeur plus longtemps. Il suffit d’enlever la route ajoutée au II :

H:\>route delete
192.168.16.53
H:\>route print 192.168.16.53 | find “192.168.16.53″
192.168.16.53  255.255.255.255        127.0.0.1       127.0.0.1       20

Et tout est de retour à l’état initial.

I visualisation des paramètres initiaux :

D’abord on fait un ipconfig pour repérer son adresse ip, et la passerelle par défaut. Dans mon cas ça donne ça :

H:\>ipconfig

Windows IP Configuration

Ethernet adapter Local Area Connection:

Connection-specific DNS Suffix  . : rennes.eu.thmulti.com

IP Address. . . . . . . . . . . . : 141.11.149.18

Subnet Mask . . . . . . . . . . . : 255.255.240.0

Default Gateway . . . . . . . . . : 141.11.159.1

Tant qu’on y est, on peut aussi regarder les paramètres par défaut de routage interne :

H:\>route print 141.11.149.18 | find “141.11.149.18″

141.11.149.18  255.255.255.255        127.0.0.1       127.0.0.1       20

Le résultat dit que les paquets à destination de mon adresse IP doivent être redirigés sur mon localhost. C’est ce que nous allons changer.

II Forçage du passage des paquets par le routeur :

Nous allons donc ajouter une route à Windows en lui disant que pour router des paquets vers notre adresse IP, il faut passer par le routeur :

H:\>route add 141.11.149.18 mask 255.255.255.255 141.11.159.1 metric 1

Regardons maintenant les nouveaux parametres de routage de windows :

H:\>route print 141.11.149.18 | find “141.11.149.18″

141.11.149.18  255.255.255.255        127.0.0.1       127.0.0.1       20

141.11.149.18  255.255.255.255     141.11.159.1   141.11.149.18       1

La nouvelle route a bien été ajoutée. L’étape suivante concerne notre application qui tourne en interne : Au lieu de lui donner l’adresse hote interne 127.0.0.1, il faut lui donner l’adresse hôte externe, dans mon cas 141.11.149.18. Une fois que c’est fait, nous pouvons lancer ethereal/wireshark  et notre application, et les paquets seront capturés.

III Résoudre le problème du dédoublement des paquets :

Seul petit problème, le trajet des paquets va être le suivant :

1) Le paquet part de l’application cliente sur notre ordinateur

2) Il est routé vers le routeur

3) Le routeur nous le renvoie

4) Le paquet est reçu par l’application serveur sur notre ordinateur

Et dans le cas du trajet serveur -> client, c’est la même chose.

Ca implique que chaque paquet passe deux fois par notre carte réseau, et que du coup tous les paquets seront capturés en double par wireshark/ethereal. Pour pallier à ce petit problème, il suffit d’ajouter un filtre dans wireshark, pour lui indiquer par exemple de bloquer les paquets sortant de la carte réseau du routeur. Par exemple, dans mon cas, je ne veux que les paquets snmp, donc j’indique le filtre suivant à wireshark/ethereal :

snmp && eth.src != 00:19:b9:2e:45:cf

Et le tour est joué!

IV Rétablir les choses dans leur configuration d’origine :

Lorsqu’on n’a plus besoin de capturer les paquets, il n’est pas nécessaire de polluer le routeur plus longtemps. Il suffit d’enlever la route ajoutée au II :

H:\>route delete 141.11.149.18

H:\>route print 141.11.149.18 | find “141.11.149.18″

141.11.149.18  255.255.255.255        127.0.0.1       127.0.0.1       20

Et tout est de retour à l’état initial.