IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Transferts de variables entre programmes?


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juin 2009
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 52
    Par défaut Transferts de variables entre programmes?
    Bonjour,

    avant de vous poser toutes mes questions, je fais une petite mise en contexte: je suis en école d'ingénieur, et actuellement en stage. J'ai commencé la programmation cette année avec le Java, mais bon sans aller très loin.
    Cet été je fais un stage, où on me demande d'écrire des plugins pour Wireshark, le célèbre sniffer, en C donc, où je n'ai aucune connaissance...

    Je n'avais aussi strictement aucune connaissance en réseau (j'ai du donc apprendre toute la base de la théorie des réseaux en 2 jours, c'est sympa comme stage!), mais j'ai quand même réussi à développer un premier plugin, le décryptage des headers étant simple dans le premier cas.

    Cependant, on me demande maintenant de décoder une couche réseau un peu plus "corsée". Pour cela, j'ai développé un petit programme console décryptant des fichiers textes écrits "à la main". C'est parfait, tout fonctionne, tout le monde est content! Sauf que maintenant je dois l'intégrer dans Wireshark, et c'est là que ca se gâte:

    - Mon chef de stage m'a dit qu'il aimerait garder tout plein de fonctionnalité de mon programme lors de l'intégration dans Wireshark: toujours pouvoir mettre des fichiers textes "écrits à la main" en entrée voir si ca fonctionne, pouvoir enregistrer les résultats dans un fichier texte, pouvoir changer le type de cryptage des données transmises...
    En gros, si j'arrivais directement à récupérer les données depuis Wireshark, je n'aurais rien à changer dans mon programme, donc ca serait génial. Et puis ce qu'il me demande est un peu impossible à faire comme simple plugin Wireshark... et il ne veut qu'un seul programme à l'arrivée!
    Donc j'en arrive là pour vous demander s'il existe un moyen de transférer une variable C d'un programme à un autre sans l'enregistrer dans un fichier texte?
    Par exemple, on ouvre mon programme, on clique sur un bouton "acquisition Wireshark", ca lance Wireshark, et ca envoie à mon programme toutes les données directement, et dans mon programme tout est décodé et affiché super bien!
    Possible, ou totalement irréalisable? Si oui, est ce que vous auriez des tutoriaux en rapport sous la main?

    - Sinon, si je dois créer une fenêtre pour mon programme, que me conseillez vous pour le faire? Ca sera plus simple, plus propre, mais je n'ai aucune connaissance... mais si vous pouviez me conseiller un tutoriel (pour le C, parce que pour le C++ j'en trouve des tonnes, mais c'est pas ce que je cherche...)

    Voilà, ba c'est tout pour l'instant!
    Je vous remercie d'avance pour vos réponses!

  2. #2
    Membre Expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Par défaut
    en bouquin sur le C il y'a le bon vieux "C ansi kernighan et ritchie" qui contiens toute la base et qui est en vente dans toutes les fnacs.

    autrement tu as
    http://c.developpez.com/cours/

  3. #3
    Membre averti
    Inscrit en
    Juin 2009
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 52
    Par défaut
    Je veux bien, mais je cherche un tutoriel spécifique, pas des tutoriels pour tout apprendre... Et je ne sais même pas comment s'appelle ce que je cherche!
    Quand je tape "C transfert de variable", je tombe sur du PHP et non sur ce qui m'intéresse...

  4. #4
    Membre Expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Par défaut
    Donc j'en arrive là pour vous demander s'il existe un moyen de transférer une variable C d'un programme à un autre sans l'enregistrer dans un fichier texte?
    il y'a plein de méthodes pour transférer des données d'un programme à a un autre avec des niveaux de sophistication plus ou moins élevées du coté des IPC pipe/fifo/mémoire partagé du coté des protocole TCP / socket/ ....

    Par exemple, on ouvre mon programme, on clique sur un bouton "acquisition Wireshark", ca lance Wireshark, et ca envoie à mon programme toutes les données directement, et dans mon programme tout est décodé et affiché super bien!
    Possible, ou totalement irréalisable? Si oui, est ce que vous auriez des tutoriaux en rapport sous la main?
    j'ai l'impression que ton prog fait un partie du boulot que sais faire wireshark.

    tu as la possibilité d'ajouter un protocole dans wireshark sous forme de dictionnaire et ensuite wireshark saura faire le boulot tout seul.

    Autrement tu trouvera peu etre des infos ici
    http://www.codeproject.com/KB/IP/custom_dissector.aspx

  5. #5
    Membre averti
    Inscrit en
    Juin 2009
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 52
    Par défaut
    Merci!

    La première partie de ton post m'intéresse beaucoup!
    Si je veux transférer simplement un tableau de caractère de longueur initialement non connue, quelle est la meilleure méthode? (d'après l'avis de quelqu'un qui s'y connait, je vais voir de quoi il s'agit, mais un débutant ne peut pas savoir directement quelle est la méthode la plus adaptée)

    Le transfert se ferait sur la même machine, qui fait tourner les deux programmes. Donc l'utilisation de protocoles tels que TCP... me semble un peu de trop (à moins que je me trompe!)

    Par contre, je sais que mon programme pourrait être directement intégrer en tant que bibliothèque. J'avais bien évidemment déjà trouvé ce lien. Mais on me demande d'intégrer des fonctionnalités dont je doute quelles soient intégrables dans Wireshark directement (ouverture de fichier textes avec le code écrit "à la main", enregistrer sous fichier texte le résultat...)

  6. #6
    Membre Expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Par défaut
    je crois que tu peux enregistrer des dump avec wireshark que tu peux relire plus tard, non?

    ensuite quelque chose qui sera assez determinant dans ton choix sera le type de plate forme windows/linux/ ...

  7. #7
    Membre averti
    Inscrit en
    Juin 2009
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 52
    Par défaut
    Techniquement, on travaille sous Windows, et je fais tous les tests sous XP/Vista. Par contre une fois finalisé, je pense que ca devra fonctionner sur un peu tous les systèmes.

    D'ailleurs au passage j'ai une petite question: quand je compile un plugin pour Wireshark .dll sous Windows, celui-ci ne fonctionnera que sous Windows? .dll sont bien des librairies réservées à Windows non?

    Sinon, oui, on peut enregistrer des dump avec Wireshark, mais le problème, c'est qu'on ne peut pas lire des fichiers "écrits à la main" avec Wireshark. Et comme le protocole utilisé est amené à évoluer être modifier, il faudra que quelqu'un reprenne mon travail, donc dans tous les cas il faudra que je livre une version sachant lire de tels fichiers... (sinon c'est clairement impossible à réaliser). Et je n'ai pas le droit de livrer deux versions différentes... d'où mon idée de créer un programme séparé qui récupère les données!

  8. #8
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par funtim78 Voir le message
    Donc j'en arrive là pour vous demander s'il existe un moyen de transférer une variable C d'un programme à un autre sans l'enregistrer dans un fichier texte?
    Pour une variable, la seule possibilité est la mémoire partagée (shmem) , qui ne marche que sur la même machine.



    Citation Envoyé par funtim78 Voir le message
    Par exemple, on ouvre mon programme, on clique sur un bouton "acquisition Wireshark", ca lance Wireshark, et ca envoie à mon programme toutes les données directement, et dans mon programme tout est décodé et affiché super bien!
    Possible, ou totalement irréalisable? Si oui, est ce que vous auriez des tutoriaux en rapport sous la main?
    Tout dépend de ce qu'attend / génère WireShark..

    Tu peux le faire via une redirection de stdin / stdout si l'un des 2 programmes utilise stdin ou stdout..


    A moins qu'il ne puisse y avoir une option de lancement "-f Filename" ou quelque chose comme ça..



    Citation Envoyé par funtim78 Voir le message
    - Sinon, si je dois créer une fenêtre pour mon programme, que me conseillez vous pour le faire? Ca sera plus simple, plus propre, mais je n'ai aucune connaissance... mais si vous pouviez me conseiller un tutoriel (pour le C, parce que pour le C++ j'en trouve des tonnes, mais c'est pas ce que je cherche...)
    Le C n'est pas un langage graphique..

    Si tu veux coder une IHM, il te faut y ajouter un langage/ une bilbiothèque adatpé(e). SDL , les Win API, ...



    Citation Envoyé par funtim78 Voir le message
    Si je veux transférer simplement un tableau de caractère de longueur initialement non connue, quelle est la meilleure méthode?
    Comme j'ai dit, soit un fichier texte, soit un paramètre d'appel (-f filename) soit une redirection de stdin / stdout..



    Citation Envoyé par funtim78 Voir le message
    D'ailleurs au passage j'ai une petite question: quand je compile un plugin pour Wireshark .dll sous Windows, celui-ci ne fonctionnera que sous Windows? .dll sont bien des librairies réservées à Windows non?
    Absolument

  9. #9
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    WireShark est open source.

    Le GUI est développé avec GTK+ et on peut étendre ses fonctionnalités en ajoutant un dissector.

    L'ajout de dissector est plus tordu qu'une DLL puisqu'il y a une API spécifique à prendre en compte: WireShark appelle le dissector en plusieurs endroits pour qu'il effectue des opérations bien définies.

    Vu le nombre de composants U*X utilisés par WireShark, je vous recommanderais de faire vos développement sous Linux puis de les porter sous Windows ensuite. Empiler trop de difficultés n'est pas une bonne chose.

    Le bouquin "Jay Beale's Open Source Security Series: Wireshark & Ethereal Network Protocol Analyzer Toolkit" pourra vous être fort utile pour débroussailler tout çà.
    Bon courage
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  10. #10
    Membre averti
    Inscrit en
    Juin 2009
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 52
    Par défaut
    Merci pour toutes vos réponses!

    Finalement en cherchant mieux dans les discussions développeurs Wireshark, j'ai trouvé un petit programme nommé text2pcap livré avec Wireshark qui transforme les fichiers faits-mains en fichiers lisibles par Wireshark.

    Donc au final, le plus simple sera de créer un plugin directement intégré dans Wireshark, comme ca, pas besoin de faire de transfert de variables ou autre choses trop compliquées!

    Vu le nombre de composants U*X utilisés par WireShark, je vous recommanderais de faire vos développement sous Linux puis de les porter sous Windows ensuite. Empiler trop de difficultés n'est pas une bonne chose.
    Qu'entendez vous par U*X? Unix? ou...
    Sinon l'installation d'un environnement de développement sous Windows est en effet assez long, mais très bien expliqué! Pour preuve, un débutant comme moi a réussi à l'installer (presque) du premier coup. Et puis le problème est que là où je travaille, les ordinateurs de développement ne tournent que sous Windows XP. Donc il me sera de toute façon difficile de faire quelque chose pour Linux...

    Sinon je ne vais pas m'arrêter en si bon chemin de vous poser des questions !
    Je suis tombé sur le fichier readme pour les développeurs: http://anonsvn.wireshark.org/wiresha...ADME.developer
    Et ils donnent des recommandations un peu drastiques au niveau du code. Par exemple pour initialiser une variable:

    Don't initialize variables in their declaration with non-constant
    values. Not all compilers support this. E.g. don't use
    guint32 i = somearray[2];
    use
    guint32 i;
    i = somearray[2];
    instead.
    Est-ce vraiment important à respecter?
    Parce que dans mon code pour l'instant je n'ai utilisé que la première solution et jamais la deuxième... Et vu le nombre de variables utilisées du fait de la complexité des données à décoder, ca signifie que j'aurais beaucoup de choses à changer!

  11. #11
    Membre Expert
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    952
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 952
    Par défaut
    Salut,

    Citation Envoyé par souviron34 Voir le message
    Pour une variable, la seule possibilité est la mémoire partagée (shmem) , qui ne marche que sur la même machine.
    Il y a moyen d'en savoir plus? shmem, c'est quoi, une librairie standard? Multiplateformes?

    A+

    Pfeuh

  12. #12
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par pfeuh Voir le message
    Salut,


    Il y a moyen d'en savoir plus? shmem, c'est quoi, une librairie standard? Multiplateformes?

    A+

    Pfeuh
    http://en.wikipedia.org/wiki/Shared_memory

    sous unixoides :

    Shared memory under Linux

    sous Win par exemple :


    Shared memory with PHP

    (Google te donne ce qu'il faut)

  13. #13
    Membre Expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Par défaut
    a l'origine dll est juste un terme à la base qui veux dire 'dynamic link libraries' c'est le nom qui est utilisé pour les librairies sous windows.

    Tu retrouve le même concept sous linux et de nombreux unix avec l'extension '.so' qui veux dire shared object ou '.sl' pour shared libraries. (le .sl est chez hp-ux)


    Au final un programme compilé pour windows ne se lance pas sous unix directement et vice et versa (sauf en utilisant une émulation par exemple wine)

    Si tu dois pouvoir tourner sur plusieurs plate formes il faudra bien faire attention au fait que ton code soit portable c'est a dire qu'il doit pouvoir se compiler facilement sur toutes les plateformes cibles. et la cela va te poser pas mal de contraintes.

  14. #14
    Membre Expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Par défaut
    Qu'entendez vous par U*X? Unix? ou...
    Sinon l'installation d'un environnement de développement sous Windows est en effet assez long, mais très bien expliqué! Pour preuve, un débutant comme moi a réussi à l'installer (presque) du premier coup. Et puis le problème est que là où je travaille, les ordinateurs de développement ne tournent que sous Windows XP. Donc il me sera de toute façon difficile de faire quelque chose pour Linux...
    je pense que cela te donnera un idée de ce que l'on peux entendre par U*x

    http://www.levenez.com/unix/redirect_unix_a4_pdf.html

    En fait unix est plus un standard décrivant un os que plein de sociétés ont utilisés pour ecrire leur version d'unix.

Discussions similaires

  1. Transfert de variables entre callbacks
    Par lfournie dans le forum Interfaces Graphiques
    Réponses: 2
    Dernier message: 11/08/2008, 21h07
  2. Problème de transfert de variable entre Flash et PHP
    Par megartaud dans le forum Intégration
    Réponses: 3
    Dernier message: 06/04/2008, 01h25
  3. Transfert de variables entre 2 sessions
    Par Lenezir dans le forum Langage
    Réponses: 5
    Dernier message: 20/12/2007, 15h34
  4. Réponses: 9
    Dernier message: 07/08/2007, 22h46
  5. Réponses: 8
    Dernier message: 19/07/2007, 10h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo