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 :

Erreur shell a distance


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Neolex
    Homme Profil pro
    Recherche emploi Securité informatique
    Inscrit en
    Avril 2011
    Messages
    243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Recherche emploi Securité informatique

    Informations forums :
    Inscription : Avril 2011
    Messages : 243
    Par défaut Erreur shell a distance
    Bonjour à tous ,
    Je developpe un shell a distance , j'ai fais une fonction qui execute une commande et renvoie le resultat seulement quelque problemes se posent à moi :
    - lorsque tape une commande neccessitant le root , mon programme ne renvoie rien au serveur
    - lorsque je tape la commande su , le mot de passe est demandé sur la console du client au lieu d'etre dans la console du serveur.

    Voilà , merci d'avance pour votre aide, voici la fonction qui utilise my_popen et la fonction my_popen elle même :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    string getResponse(string buffer,int sock)
    {
    	string delimiter = ":";
    	string prefix = buffer.substr(0,buffer.find(delimiter));
    	char* command = (char*)(buffer.substr(buffer.find(delimiter)+1	,buffer.size()-1)).c_str();
    	string mystring;
    	if(prefix=="sh")
    	{	 	
    		FILE* myfile ;
            my_popen(command,mystring);
    		if(mystring.size()==0)
    		{
    			mystring= "Commande non verbeuse";
    		}    
    	    return mystring;
     
    	}
    	return "error";
     
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    bool my_popen (const std::string& cmd,std::string& out ) {
        bool            ret_boolValue = true;
        FILE*           fp;
        const int       SIZEBUF = 1234;
        char            buf [SIZEBUF];
     
        if ((fp = popen(cmd.c_str (), "r")) == NULL) {
        	perror("popen");
            return false;
        }
        std::string  cur_string = "";
        while (fgets(buf, sizeof (buf), fp)) {
            out += buf;
        }
        pclose(fp);
        return true;
    }

    Ainsi que l'envoie de la reponse dans la socket :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    string buf(buffer);
    		       	string rep(getResponse(buf,sock));
    		       	int size = rep.size();
    		        if(send(sock,rep.c_str(),size,0)!=size)
    		        {
    		        	perror("send");
    		        }

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Salut,

    juste sur la forme : c'est toi qui a écrit tout le code ? Et il est complet là ?
    Y'a des paramètres par copies, puis pas const&, des variables inutiles au milieu.
    Et ça char* command = (char*)(buffer.substr(buffer.find(delimiter)+1 ,buffer.size()-1)).c_str(); quelle horreur !!
    Un const cast sur une variable temporaire, t'as envie que ton programme plante toi non ?

    Je ne peux pas t'aider pour ton problème, que je ne comprends pas (console client, server ?), mais avec des trucs comme ça, ça va pas aider en tous cas.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Membre éclairé Avatar de Neolex
    Homme Profil pro
    Recherche emploi Securité informatique
    Inscrit en
    Avril 2011
    Messages
    243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Recherche emploi Securité informatique

    Informations forums :
    Inscription : Avril 2011
    Messages : 243
    Par défaut
    Oui j'ai ecris tout le code excepté la fonction my_popen que j'ai trouvée puis modifiée ...

    Je ne comprends pas le problème du cast ?

    mon serveur doit envoyer des commandes a executer aux clients et recevoir leur resultat .

  4. #4
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    tu ne peux pas juste faire une connexion ssh (via openssh ou putty)?

  5. #5
    Membre éclairé Avatar de Neolex
    Homme Profil pro
    Recherche emploi Securité informatique
    Inscrit en
    Avril 2011
    Messages
    243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Recherche emploi Securité informatique

    Informations forums :
    Inscription : Avril 2011
    Messages : 243
    Par défaut
    Non car les commandes dans le shell ne sont qu'une partie de ce que je veux faire .
    Je veux pouvoir ajouter des modules comme prendre une capture d'ecran du client etc...

    Je veux vraiment programmer ça....!

  6. #6
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Pourquoi accéder à l'écran à distance? Comment sais-tu qu'il y en a un?
    Normalement, un shell n'est pas une connexion graphique. C'est une autre connexion que celle d'un utilisateur graphique.

    Pourquoi ne pas utiliser un logiciel de prise de controle à distance (d'assistance à distance)?
    Quel intérêt de le programmer toi-même?

Discussions similaires

  1. Message d'erreur connexion bureau à distance.
    Par dimitri13 dans le forum Windows 7
    Réponses: 2
    Dernier message: 27/04/2017, 18h02
  2. Shell connexion à distance et commandes
    Par Invité dans le forum Shell et commandes GNU
    Réponses: 10
    Dernier message: 10/05/2013, 17h50
  3. Erreur au lancement à distance script VBS
    Par samworld dans le forum VBScript
    Réponses: 0
    Dernier message: 04/01/2013, 10h54
  4. Erreur shell - dernière ligne d'un fichier
    Par tiamat59 dans le forum Linux
    Réponses: 6
    Dernier message: 10/12/2008, 14h57

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