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"); }
Partager