Remote Steuerung eines Servers



  • Hallo,

    Folgender code:

    #include <iostream>
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <netdb.h>
    #include <netinet/in.h>
    #include <arpa/inet.h>
    #include <string>
    #include <pthread.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    #include <signal.h>
    
    #define BUFFER_SIZE 8192
    
    using namespace std;
    
    char* pipe_ (char *command)
    
    {
    	char buf	[90000];
    	char lese	[90000];
    
    	FILE *p = popen(command, "r");
    
            if(p==NULL)
            {
        		printf("not so good...");
    //    	    	exit(1);
            }
    
            while(feof(p)==0)
            {
           		memset(buf, 0, strlen(buf));
           	 	fgets(buf, 1000, p);
          	 	strcat(lese, buf);
            }
            pclose(p); 
    
      	return lese;   
    
    }
    
    bool handle_commands (int sock)
    {
            char buffer		[BUFFER_SIZE];
    	int bytes = 0;
    	char *p;
    
    	for (;;)
    	{
    		bytes = recv(sock, buffer, BUFFER_SIZE-1, 0);
    		buffer[bytes] = '\0';
    
    		memset (buffer2, '\0', strlen(buffer2));
    
    		p = strstr(buffer, " PRIVMSG ");
    		if (p) 
    		{
    			p = strchr(p, ':');
    			if (p) 
    			{
    				printf("Befehl ist: %s", (p+1));
    				pipe_ ((p+1));
    			}
    		}
    	}				
    }
    

    Ich hab die Möglichkeit ein paar HomeServer über meinen eigenen IRC Server zu kontrollieren, in dem ich dann im IRC Befehle eingebe. Die Befehle wreden dann ausgelesen und gecuttet (p=strstr ...) und dann wird der eingegebene Befehl an die Pipe () übergeben.

    Eine Eingabe wäre z.b. ls
    aussehen würde das so:

    Befehl ist: ls
    : not found

    Ich versteh das nicht, warum gibts bei der Pipe n Fehler?
    Das müsste doch alles so passen oder?

    Danke für die Hilfen.



  • Kann es sein, dass du ein newline im string hast?



  • char lese[] ist eine lokale Variable von pipe_(), die nach dem Verlassen von pipe_() nicht mehr existiert.



  • jencas schrieb:

    char lese[] ist eine lokale Variable von pipe_(), die nach dem Verlassen von pipe_() nicht mehr existiert.

    klappe du assi!
    am ende oder am anfang der variable ist ein \n da wett ich meinen hut drauf!



  • ??


Anmelden zum Antworten