Alt-F4 n°32 - Opération Wireshark  23-04-2021

Écrit par The-Kool, Hornwitser, édité par stringweasel, Nanogamer7, Conor_, Therenas, Firerazer,
traduit par bev, relu par Firerazer

Sommaire

Bienvenue dans le numéro 2⁵ de Alt-F4, rempli de requins. Dans ces eaux dangereuses, The-Kool nous guide pour que les haut-parleurs soient utilisés à bon escient, peut-être même comme un système d’alerte aux requins, dans le dernier épisode du Coin de la complexité ! Ensuite, Hornwitser se lance dans une véritable chasse au requin à l’aide de Wireshark, racontant comment il a traqué les problèmes de réseau qu’il a rencontrés avec le jeu. Prenez un harpon et lancez-vous !

Le coin de la complexité : Les haut-parleurs The Kool

Bienvenue à nouveau dans le Coin de la complexité, où nous passons en revue les mécanismes les moins utilisés ou les plus complexes du jeu afin d’en donner une introduction à ceux qui ne les connaissent pas. Dans cet article, nous allons poser trois questions : “Qu’est-ce que c’est ?”, “Quels résultats cela peut-il donner ?”, et “Où devrait-il être utilisé ?”

Qu’est-ce que c’est ?

Le Haut-parleur programmable est un “bâtiment” qui occupe une seule tuile. Lorsqu’il est connecté à un réseau logique, il peut émettre des sons que vous entendrez dans le jeu en fonction des signaux sur ce réseau. Vous pouvez régler le volume, choisir un son spécifique à émettre, lui demander d’être audible quelle que soit la distance à laquelle vous vous trouvez, et même afficher une alerte personnalisée sur la carte. Le haut-parleur est débloqué grâce à la technologie Réseau logique, qui est si précoce dans l’arbre des recherches qu’elle pourrait être votre première technologie verte.

Haut-parleur programmable
Il est là, dans toute sa majestueuse gloire. Origine : Wiki de Factorio.

Quels résultats cela peut-il donner ?

Ça produit des sons ! OK, c’était un peu facile à dire. Si les haut-parleurs sont surtout connus pour les bidules musicaux fabriqués avec, ils ont aussi des usages pratiques. Si vous connectez un haut-parleur à votre usine et que vous réglez la diffusion globale et une icône d’alerte, vous pouvez concevoir des alertes personnalisées pour à peu près tout. Vous pouvez (et devriez !) lui donner une icône et un titre personnalisés car vous allez rapidement complètement oublier à quoi sert ce klaxon hurlant. C’est un moyen facile de diffuser une alarme sur l’ensemble de votre usine et cela peut vous aider à détecter les signes avant-coureurs de problèmes, avant qu’ils ne deviennent de véritables problèmes.

Où devrait-il être utilisé ?

Avez-vous déjà mis à rude épreuve votre alimentation électrique et provoqué accidentellement le ralentissement de vos foreuses de charbon, vous faisant entrer dans une spirale menant à la panne de courant car vos chaudières sont en manque de combustible ? Essayez de placer un haut-parleur à côté du convoyeur de charbon menant à vos chaudières et de le connecter au convoyeur avec un câble. Un convoyeur complet contient 8 objets, donc si vous réglez le haut-parleur pour qu’il se déclenche sur moins de 8 charbons, vous recevrez une alarme si des manques apparaissent dans votre convoyeur de charbon. Réglez cette alarme sur une diffusion globale et donnez-lui un nom comme “Vérifiez votre extraction de charbon !” et vous recevrez l’avis, peu importe où vous êtes ou ce qui vous occupe.

Système d’alarme pour le charbon
Si ce truc se déclenche, il est temps de laisser tomber ce que vous faites et de corriger votre approvisionnement en charbon. (Plan)

Un type d’alarme complètement différent est l’alarme de passage de train. Reliez un haut-parleur à un signal ferroviaire sur votre voie à l’endroit où vous avez l’intention de traverser, plus un signal supplémentaire dans chaque direction (assurez-vous que vous récupérez les signaux des deux côtés de la voie). Dites-lui de déclencher une sirène locale si l’un des signaux est jaune (nombre de signaux jaunes > 0). La prochaine fois que vous vous dirigerez vers ce rail et qu’un train arrivera, vous recevrez une belle sirène sonore vous disant d’attendre un moment avant de traverser !

Système d’alarme pour le passage des trains
Si seulement j’avais découvert ça il y a quelques centaines d’heures... (Plan)

Comme beaucoup d’autres choses dans Factorio, les utilisations du haut-parleur sont illimitées, tant en termes de fonctionnalité que de créativité. Les constructions vont du super simple montré ci-dessus, aux lecteurs midi super complexes et au-delà. J’espère que cela vous inspirera et vous évitera quelques maux de tête. D’ici la prochaine fois, on se verra à l’usine… et attention où vous mettez les pieds !

Décodeur Wireshark pour Factorio Hornwitser

Ce projet a débuté lors de l’événement Gridlock Cluster. J’enquêtais sur des problèmes où des clients étaient exclus de la partie de façon aléatoire, ce qui m’a amené à analyser les traces de paquets à l’aide de Wireshark. Ces traces de paquets sont essentiellement des rapports binaires des paquets envoyés et reçus par la carte réseau de l’ordinateur qui les a captés. Pour comprendre la signification de ces données binaires, Wireshark les décode à l’aide de décodeurs de protocole, il en possède pour les protocoles couvrant toutes les facettes des réseaux. Mais il n’y en a pas pour Factorio, donc lorsque j’ai utilisé Wireshark sur le trafic de Factorio, tout ce que j’ai pu voir était du charabia hexadécimal envoyé entre le serveur et le client.

Après avoir examiné les octets qui vont et viennent entre le serveur et le client, je me suis demandé : Serait-il difficile d’écrire un décodeur pour Wireshark afin de décoder ces données ? Je me suis penché sur la question et j’ai découvert que la manière la plus simple de l’écrire serait en Lua. Il peut ensuite être chargé comme un plugin par Wireshark, dans un système pas trop différent des mods de Factorio. C’est ainsi que j’ai commencé à étudier les octets en hexadécimal et à comprendre la structure de tout cela. C’est devenu un peu un défi personnel de comprendre la signification de chacun des octets et de les décoder dans Wireshark. Je pense avoir travaillé sur le décodeur pendant environ deux semaines avant de l’abandonner.

Ce n’est pas que je ne pouvais pas le faire. C’est juste que ça ne valait pas tous les efforts que j’y ai mis. Vous voyez, la sortie de mon décodeur n’était pas très utile pour dire ce qui se passait. Ça ressemblait à quelque chose comme ça :

Capture d’écran de l’ancien décodeur Wireshark

Bien sûr, il décode la trame et réassemble les paquets fragmentés, mais à moins que vous ne sachiez ce que signifient ces informations bizarres, curieuses, étranges ou colorées, il ne sert pas à grand-chose. C’est aussi une des raisons pour lesquelles je n’ai pas publié ce décodeur : c’est déjà mieux que de regarder les données hexadécimales, mais pas de beaucoup. Il ne vous donne pas le genre d’aperçu profond des rouages internes du protocole Factorio que vous attendriez de n’importe lequel des autres décodeurs de protocole dont dispose Wireshark. Et c’est ainsi que ce projet a été mis au placard, pour ne plus être étudié par la suite.

Dans le passé, le développeur de Factorio Twinsen avait parlé de la création d’un décodeur pour Wireshark dans le FFF n°196. Cet article contient un grand nombre d’informations internes sur le protocole que j’aurais pu utiliser pour créer mon décodeur, mais j’avais choisi de ne pas y regarder car je voulais créer le mien, sans me fier aux informations internes du code source du jeu. Une question évidente se pose cependant : Pourquoi ne pas utiliser le décodeur de Twinsen au lieu d’écrire le mien ? Eh bien, pour commencer, il n’est pas disponible publiquement, mais plus important encore, il ne peut pas être rendu public. La façon dont le décodeur de Twinsen fonctionnait était de construire Factorio comme une bibliothèque partagée, puis de construire une version personnalisée de Wireshark qui était liée à cette bibliothèque partagée. Or, Wireshark est sous licence GPL et il est interdit de diffuser du code GPL lié à du code propriétaire. Pour diffuser le décodeur, Wube devrait donc publier Factorio sous licence GPL, ce qui ne se produira évidemment pas.

Il y a quelques semaines cependant, j’ai découvert quelque chose. La version Windows de Factorio est livrée avec un fichier .pdb qui contient des symboles de débogage. Les développeurs l’utilisent pour générer des traces de pile symbolisées lorsque le jeu se plante, afin de pouvoir voir où, dans le code source, le crash s’est produit. Mais heureusement pour moi, ce fichier regorge aussi d’autres types de données de débogage, comme celles nécessaires pour attacher un débogueur à Factorio et inspecter les valeurs des variables stockées en mémoire. Cela signifie qu’il contient des informations de type, c’est-à-dire la structure des données telle que définie dans le code, ainsi que les noms des champs et des énumérations. Le nom des champs est très utile car c’est l’étiquette que les développeurs mettent sur un élément de données afin de le référencer dans le code. De même, les énumérations contiennent les correspondances entre les noms logiques et les valeurs numériques.

J’ai pu extraire ce type d’information du fichier .pdb en quelque chose de lisible en utilisant l’outil “cvdump.exe”. Une fois que j’ai eu cela, il a été assez facile de trouver les noms des structures du fichier .pdb et de renommer tous les champs dans mon décodeur pour pouvoir les utiliser. J’ai également compris que les définitions des énumérations traduisent les valeurs numériques en noms logiques pour les champs qui les utilisent. Après avoir fait un peu de ménage dans mon code et dans la présentation des données, j’ai pu faire en sorte que la sortie du décodeur ressemble à ceci :

Capture d’écran du nouveau décodeur Wireshark

On n’a plus besoin de deviner ce qu’est une valeur “Odd Blue” : C’est clairement l’id d’un InputActionSegment. Maintenant, le type est traduit du code machine 0xa2 en un nom beaucoup plus convivial, ServerCommand. Le seul problème que pose la création du décodeur à partir des données fournies avec le jeu est qu’il ne s’agit plus clairement de mon travail original, ce qui remet en question la légalité de sa diffusion. Plutôt que d’essayer de savoir si j’avais la loi sur les droits d’auteur de mon côté, j’ai demandé aux développeurs de Factorio et ils ont dit qu’ils étaient d’accord pour que je le rende public. Donc, si vous voulez l’essayer vous-même ou l’ajouter à votre boîte à outils, vous pouvez le trouver dans mon dépôt sur GitHub.

Personnellement, je l’ai utilisé pour étudier des problèmes de réseau dans Factorio, allant de la déconnexion de clients à la défaillance de la fonction de punching NAT. J’ai également rédigé quelques rapports de bug basés sur mes découvertes qui ont conduit à des corrections de bug dans le jeu. Avec le passage à l’utilisation des noms des symboles de débogage de Factorio, les données qu’il affiche sont devenues vraiment claires et informatives, du moins par rapport à ce qu’il affichait auparavant. Cependant, il s’agit toujours d’un outil destiné aux personnes expérimentées dans le domaine des réseaux informatiques et des aspects internes de Factorio, donc ne vous attendez pas à comprendre ce que tout cela signifie si vous n’êtes pas familier avec ces choses.

Contribuer

Comme toujours, nous attendons vos contributions pour les Alt-F4, que cela soit par la soumission d’un article ou en aidant pour les traductions. Si vous avez quelque chose d’intéressant en tête que vous souhaitez partager avec la communauté, vous êtes au bon endroit. Si vous n’êtes pas sûr, nous serons heureux de vous aider en discutant structure, contenu et idées. Donc si vous voulez vous impliquer dans les Alt-F4, rejoignez-le Discord pour ne rien rater !