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

Réseau C Discussion :

Shell controlable à distance - Socket


Sujet :

Réseau C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2013
    Messages : 18
    Points : 10
    Points
    10
    Par défaut Shell controlable à distance - Socket
    Bonjour,
    cela fait quelques jours maintenant que j'essaie de faire un shell controlable à distance sans succès. Il m'est demandé de "créer un shell simple controlable à distance, avec redirection de stdout et stderr ", donc je dois créer un serveur possédant un shell .
    Je ne peux malheureusement pas poster mon code (car il s'agit d'un projet pour l'école et je suis pas le seul à l'avoir), donc je vous expose mon problème le plus clairement possible
    Après de multiples essais j'ai quelque chose qui tourne, mis à part que j'ai un souci vraiment vraiment embêtant : Lorsque je fais une requête qui ne produit aucun affichage ( chmod 700 monFichier par exemple), mon client attend une réponse du serveur qui n'arrive jamais !
    Je pense donc que le problème vient du client, voilà ce qu'il fait :
    1.Il se connecte au serveur
    2.fgets sur stdin pour obtenir la requête a envoyer au serveur ("echo salut" par exemple).
    3.entre dans une boucle ,pour envoyer plusieurs requête si je le désire.
    4.Write vers le serveur de la requete précédemment demandée (voir point 2).
    5.Read depuis le serveur. (etant donné que stdout est redirigé, le serveur m'envoie le resultat du exec)
    6. Affichage de la réponse.



    Donc voilà, ca marche avec "echo salut" "ls -l" , mais dès que je veux faire une requête n'affichant pas de résultat (comme chmod ) mon client ne réagit plus (étant donné qu'il attend une réponse qui ne viendra jamais !).
    Je ne vois pas comment m'y prendre, comme puis-je dire a mon programme " bon si t'as pas de réponse tu continues."
    Merci de bien vouloir m'aider, ( et désolé de pas pouvoir poster tout mon code)

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 858
    Points : 218 577
    Points
    218 577
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    Après de multiples essais j'ai quelque chose qui tourne, mis à part que j'ai un souci vraiment vraiment embêtant : Lorsque je fais une requête qui ne produit aucun affichage ( chmod 700 monFichier par exemple), mon client attend une réponse du serveur qui n'arrive jamais !
    Sauf que chaque commande retourne une chose : "un code d'erreur" (qui est 0 en cas de réussite). Dans le shell, cela ne se voit pas, mais vous pouvez l'afficher avec echo $?. Donc au final, vous pouvez faire en sorte que votre serveur retourne toujours quelque chose au client, pour continuer.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2013
    Messages : 18
    Points : 10
    Points
    10
    Par défaut
    Merci pour la réponse
    Malheureusement, dans le cas d'un chmod (par exemple), le code de retour est 0 alors qu'il n'affiche rien :/
    Lorsqu'il y a une erreur mon shell affiche bien le "commande invalide" , pour ca je n'ai pas de problème.Si j'affiche le code de retour pour chaque requete ca ne résout malheureusement aucun problème, car dans le cas du chmod, le serveur n'enverra que "RC 0" , alors que dans le cas d'un "echo salut" j'aurai deux messages de retour : "RC 0"
    "salut"


    Merci d'avance

  4. #4
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 858
    Points : 218 577
    Points
    218 577
    Billets dans le blog
    120
    Par défaut
    Il faut envoyer les code d'erreurs (un int, ou un short int) et s'il y a, les messages
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2013
    Messages : 18
    Points : 10
    Points
    10
    Par défaut
    Merci,
    Malheureusement rien ne peut me dire lorsqu'il y a des affichages et lorsqu'il n'y en a pas donc le message d'erreur ne m'aide pas :/
    Etant donné que stdout est redirigé vers le client, l'execvp affiche bien le resultat chez le client , c'est vraiment lorsqu'il n'y a pas d'affichage au niveau du execvp que ca foire :/ .
    Si je pouvais choper le stdout de la fonction exec dans une variable String ca serait vraiment top, malheureusement en c ca a pas l'air possible .

  6. #6
    Membre émérite
    Avatar de skeud
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 1 091
    Points : 2 724
    Points
    2 724
    Billets dans le blog
    1
    Par défaut
    je te conseil de regarder cette discution.

    Pour pouvoir récupéré la sortie standard de execvp, tu peux utilisé les pipe (expèce de tunnel qui redirige un fd vers un autre). Cela te permets de récupéré la sortie standard de tes commandes dans une string. Lorsque la commande se termine, le fd sera close, et tu pourras donc determiné la fin avec un simple read.
    Ensuite, pourquoi utilisé execvp? C'est pas juste des commande que tu dois lancé? Si tu dois recodé un shell complet, il faut recodé les built-in et non pas les executé. J'avais un projet de ce type pendant mes études, je pourrais te donné un coup de main en mp si tu veux .

    [pastapé]
    sinon dans le client tu lances un ssh, et c'est réglé
    [/pastapé]
    Pas de solution, pas de probleme

    Une réponse utile (ou +1) ->
    Une réponse inutile ou pas d'accord -> et expliquer pourquoi
    Une réponse à votre question


+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Controle à distance sous active directory
    Par alex_m94 dans le forum Windows Serveur
    Réponses: 11
    Dernier message: 16/11/2007, 16h59
  2. programme de controle à distance
    Par ghost emperor dans le forum Windows Forms
    Réponses: 7
    Dernier message: 24/10/2007, 08h20
  3. Prise de controle à distance
    Par krfa1 dans le forum Internet
    Réponses: 2
    Dernier message: 07/10/2007, 13h07
  4. Controle à distance
    Par Tyrus dans le forum Administration
    Réponses: 3
    Dernier message: 26/03/2007, 16h07
  5. executer une application a distance : Sockets ? RPC ? CORBA?
    Par a_hic dans le forum Développement
    Réponses: 5
    Dernier message: 30/05/2006, 13h02

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