Comment utiliser Lua Dissector dans Wireshark
En tant que l’un des meilleurs outils de capture de paquets réseau au monde, Wireshark vous permet d’atteindre des paquets de données spécifiques afin que vous puissiez les analyser à la fois hors ligne et en temps réel. Considérez l’application comme un moyen d’examiner de près les données circulant sur votre réseau, ce qui vous permet de détecter les problèmes et les irrégularités.
Vous pouvez utiliser des dissecteurs si vous souhaitez analyser une partie spécifique des données d’un paquet. Comme son nom l’indique, ce processus”dissèque”le code, vous permettant de supprimer certains aspects qui nécessitent votre attention. Ce didacticiel explique comment créer et utiliser des dissecteurs dans Wireshark à l’aide du langage de script Lua.
Avant Vous commencez-Ce que vous devez savoir sur les dissecteurs
Bien que les dissecteurs offrent un moyen rapide d’analyser des parties d’un paquet de données dans Wireshark, ils doivent suivre certains protocoles pour fonctionner efficacement. Ces protocoles incluent les suivants :
Chaque dissecteur que vous créez doit être enregistré pour gérer un type défini de charge utile à partir d’un protocole différent. Pour terminer cet enregistrement, vous devez attribuer un objet”Proto”à votre dissecteur, que vous verrez ci-dessous. Lorsque vous appelez un dissecteur via Wireshark, il reçoit trois choses de l’application : Objet TVB-Un tampon TVB du paquet de données. Objet TreeItem-Une racine d’arbre qui représente un seul nœud dans un arbre de données.Objet Pinfo-Un enregistrement d’informations sur les paquets.Vous ne pouvez appeler un dissecteur que si votre paquet de données correspond au DissectorTable que vous avez défini sur votre objet”Proto”.Vous pouvez contourner cette exigence en forçant l’utilisation d’un dissecteur via le Fonction”Décoder comme”. Mais même dans ce cas, vous ne pouvez forcer le dissecteur que si le DissectorTable que vous avez défini sur votre objet”Proto”est du type correct.
Configuration de votre dissecteur à l’aide de LUA
Comme Wireshark est à la fois écrit en et utilise le langage de programmation C, la plupart des dissecteurs sont écrits de la même manière en C. Cependant, vous pouvez utiliser Lua. Ce langage de script est plus simple que C et donc plus accessible aux débutants en codage ou à ceux qui veulent simplement créer un dissecteur en utilisant un langage plus léger. langage.
Bien que votre code soit plus simple, le dissecteur que vous obtenez en utilisant Lua est généralement plus lent que celui que vous créeriez en utilisant C. Néanmoins, voici les étapes à suivre si vous souhaitez créer un Dissecteur Wireshark utilisant Lua.
Étape 1 – Configurer Lua dans Wireshark
Vous devrez configurer Lua si vous ne l’avez jamais utilisé dans Wireshark :
Cliquez sur”Aide”, suivi de”À propos de Wireshark”.
Cliquez sur”Dossiers”.
Choisissez l’une des options suivantes pour créer un script Lua actif :
Global Lua PluginsPersonal Lua PluginsPersonal
Une fois activé, votre script sera soyez prêt chaque fois que vous démarrez Wireshark. Chaque fois que vous apportez une modification à ce script, vous devez soit redémarrer Wireshark pour enregistrer la modification, soit appuyer sur”Ctrl + Maj + L”pour recharger tous vos scripts Lua afin d’activer vos modifications.
Étape 2-Les étapes de base pour créer votre dissecteur
Si vous connaissez déjà Lua, vous pouvez utiliser les étapes suivantes pour créer votre propre script de dissecteur qui fonctionnera dans Wireshark :
Déclarez le protocole pour votre dissecteur, ce qui vous oblige à définir à la fois un nom long à utiliser dans l’arborescence de protocole et un nom court qui sert de nom de filtre d’affichage du dissecteur.Créez les trois champs suivants, avec leurs types appropriés:Question – Affiche le type de question. Answer – Affiche le type de réponse.MessageType – Démontre si votre paquet demande une question ou une réponse.Enregistrez vos champs afin que Wireshark sache comment les afficher. que votre Tree Item ProtoField est invalide.Créez une fonction de dissection qui inclut le Pinfo mentionné précédemment (contenant des données sur votre paquet) et Tree Item (créant l’arbre que vous ajouterez à un sous-arbre). Vous devez également créer un”tampon”, qui se trouve au-dessus de votre TCP. Spécifiez à la fois le protocole et le port pour lesquels Wireshark doit utiliser le dissecteur. Par exemple, vous pouvez définir le protocole sur”TCP”et le numéro de port sur celui que vous que vous souhaitez utiliser.
Étape 3-Ajoutez votre dissecteur à Wireshark
Pour le moment, votre dissecteur est comme une ampoule sans électricité. Il existe, mais il ne vous est d’aucune utilité tant que vous ne pouvez pas y faire passer de l’énergie. En d’autres termes, votre dissecteur n’est pas encore ajouté à Wireshark, vous devez donc l’ajouter manuellement pour le faire fonctionner en suivant ces étapes :
Cliquez sur”Aide”et accédez au menu”À propos de Wireshark”.
Sélectionnez l’onglet”Dossier”pour trouver une liste de chemins pour votre fichier Lua.
Choisissez « Plug-ins Lua personnels ». Créez un répertoire si nécessaire.
Copiez et collez le fichier Lua que vous avez créé dans le répertoire”Personal Lua Plugins”. Rechargez Wireshark pour activer le dissecteur.
C’est une bonne idée d’effectuer un test sur votre nouveau dissecteur en ouvrant certains des paquets que vous avez capturés. Wireshark devrait fournir un message indiquant le nom long que vous avez choisi pour votre dissecteur, ainsi que des informations sur le type de message ( question ou réponse) et le résultat de votre vérification.
Quelques exemples de code
Si vous n’avez jamais créé de dissecteur auparavant (ou si vous êtes nouveau sur Lua),
local p_multi=Proto (“multi”,”MultiProto”); local vs_protos={ [2]=”mtp2″, [3]=”mtp3″, [4]=”alcap”, [5]=”h248″, [6]=”ranap”, [7]=”rnsap”, [8]=”nbap”} local f_proto=ProtoField.uint8(“multi.protocol”,”Protocol”, base.DEC, vs_protos) local f_dir=ProtoField.uint8(“multi.direction”,”Direction”, base.DEC, { [1]=”incoming”, [0]=”outgoing”}) local f_text=ProtoField.string(“multi.text”,”Text”) p_multi.fields={ f_proto, f_dir, f_text } local data_dis=Dissector.get(“data”) local protos={ [2]=Dissector.get(“mtp2”), [3]=Dissector.get(“mtp3”) , [4]=Dissector.get(“alcap”), [5]=Dissector.get(“h248”), [6]=Dissector.get(“ranap”), [7]=Dissector.get(“rnsap”), [8]=Dissector.get(“nbap”), [9]=Dissector.get(“rrc”), [10]=DissectorTable.get(“sctp.ppi”):get_dissector(3),–m3ua [11]=DissectorTable.get(“ip.proto”):get_dissector(132),–sctp } fonction p_multi.dissector(buf, pkt, tree) local subtree=tree:add(p_multi, buf(0, 2)) subtree:add(f_proto, buf(0,1)) subtree:add(f_dir, buf(1,1)) local proto_id=buf(0,1):uint() dissecteur local=protos[proto_id] if dissector ~=nil then–Un dissecteur a été trouvé, invoque un sous-dissecteur avec un nouveau Tvb,–créé à partir du tampon courant (en sautant les deux premiers octets). dissecteur:call(buf(2):tvb(), pkt, tree) elseif proto_id <2 then subtree:add(f_text, buf(2))--pkt.cols.info:set(buf(2, buf:len ()-3):string()) else--dissecteur de secours qui affiche uniquement les données brutes. data_dis:call(buf(2):tvb(), pkt, tree) end local wtap_encap_table =DissectorTable.get("wtap_encap") udp_encap_table=DissectorTable.get("udp.port") wtap_encap_table:add(wtap.user15 , p_multi) wtap_encap_table:add(wtap.user12, udp_encap_table:add(7555,
Postdissecteurs et dissecteurs chaînés
Vous voudrez peut-être approfondir un peu l’utilisation de votre dissecteur une fois que vous avez maîtrisé leur création en Lua. Wireshark propose deux types supplémentaires de dissecteurs-les postdissecteurs et les dissecteurs enchaînés-qui offrent plus de fonctionnalités.
Un postdissecteur ressemble beaucoup à une vérification finale de tous les dissecteurs que vous avez exécutés pour un paquet. Vous l’enregistrez pour être averti une fois que Wireshark a appelé tous les autres dissecteurs que vous souhaitez utiliser, et vous pouvez l’utiliser pour filtrer les colonnes”Protocole”et”Info”. Cette fonctionnalité est particulièrement utile si vous souhaitez filtrer plusieurs paquets dans une session où vous avez eu un long écart entre les ensembles de données et que vous ne pouvez pas rappeler chacun individuellement.
Le chaînage des dissecteurs remplit une fonction similaire ( au moins en termes de filtrage à travers les dissecteurs précédemment utilisés) en vous donnant accès aux données d’un seul dissecteur. Le principal avantage ici est que le dissecteur chaîné n’a pas à parcourir à nouveau chaque paquet, vous donnant un résultat sans vous obliger à attendre que le dissecteur d’origine s’exécute à nouveau.
Disséquez en Lua
Étant donné que Wireshark offre déjà la possibilité de créer des dissecteurs en C (son langage naturel), vous ne verrez peut-être pas la nécessité de les créer également en Lua. Pourtant, ceux qui ne sont pas à l’aise avec C, ainsi que ceux qui maîtrisent déjà Lua, peuvent trouver que le script léger de Lua facilite la création de leurs dissecteurs. Certes, vous devez échanger un temps de chargement plus long lorsque vous exécutez le processus par rapport aux dissecteurs basés sur C, mais il est utile d’avoir l’option malgré tout.
Cela dit, nous voulons avoir de vos nouvelles. À quelle fréquence utilisez-vous des dissecteurs dans Wireshark ? Avez-vous déjà essayé de les créer en C, et quels avantages pensez-vous que la création de dissecteurs en Lua apporte ? Faites-le nous savoir dans la section des commentaires ci-dessous.
Avertissement : certaines pages de ce site peuvent inclure un lien d’affiliation. Cela n’affecte en rien notre rédaction.