Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1530 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Shell controlable à distance avec socket

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Shell controlable à distance avec socket

n°2225056
yves9393
Posté le 14-04-2014 à 21:36:27  profilanswer
 

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.

Code :
  1. fgets(requete,250,stdin);
  2. while (strcmp(requete,"exit\n" )){
  3.   write(sd,requete,250);
  4.   read(sd,ligne,taille);
  5. printf(ligne);
  6. fgets(requete,250,stdin);
  7. }


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)
 
Coté serveur :

Code :
  1. while(condition) {
  2. i=0;
  3.  tokens[i]=strtok(ligne," \n" );
  4.  while (tokens[i] != NULL) tokens[++i]=strtok(NULL," \n" );
  5.  if (fork()==0)
  6.  {
  7.   fflush(stdout);
  8.   execvp(tokens[0],tokens);
  9.   fflush(stdout);
  10.   printf("Commande invalide\n" );
  11.   exit(1);
  12.  }
  13.  wait(0);
  14.  read(h, ligne, strlen(ligne));
  15.   }
  16.  }


 
 
 

mood
Publicité
Posté le 14-04-2014 à 21:36:27  profilanswer
 

n°2225080
dreameddea​th
Posté le 15-04-2014 à 09:21:59  profilanswer
 

Il faut regarder du coté de la fonction select de tête, qui permet de savoir s'il y a qqchose sur un read (avec un timeout)
 
Un bon vieux "man select" devrait te donner un exemple intéressant...
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Shell controlable à distance avec socket

 

Sujets relatifs
Script shell pour comparaison de 2 fichier et récupération du résultatla distance de levenshtein pour calculer le nombre d'apparition dans u
Distance entre deux objetsScript Dos à transformer en SHELL
Script multijoueur par Socket TCPprobleme de communication client server (socket)
[VBS] nslookup via shell[Shell/Batch] Recherche d'une chaîne de caractère dans un fichier
[Shell/Batch] Propriétaire d'une videoJe n'arrive lancer mon script shell via crontab
Plus de sujets relatifs à : Shell controlable à distance avec socket


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR