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 :

Commande System() via socket


Sujet :

Réseau C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Inscrit en
    Mars 2009
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 11
    Par défaut Commande System() via socket
    Bonjour à tous, est-il possible via une socket d'effectuer des commandes system() ?
    Je m'explique: je cherche à envoyer une commande via un client, que le serveur recupererai dans une variable pour ensuite l'exectuer via la fonction system() puis renvoyer le resultat au client ?

    Merci d'avance

  2. #2
    Membre Expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Par défaut
    si j'ai bien compris tu veux lancer des commandes à distance.

    Tu peux utiliser une librairie comme libssh par exemple.

    Cependant, il n'est pas obligatoire de programmer un client et un serveur spécifique (surtout le serveur), Avec ssh tu peux utiliser par exemple exécuter une commande distante de la façon suivante:

    ssh -l <user> <machine> "<commande distante>"

    http://www.linuxhowtos.org/Tips%20an...e_commands.htm

  3. #3
    Membre régulier
    Inscrit en
    Mars 2009
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 11
    Par défaut
    Pour être un peu plus précis, je cherche à rajouter à mon serveur d'authentification déjà créer, quelques fonctions simple qui permettrai de pouvoir récupérer des informations sur le serveur.

    A ce stade le client envoi un login et un mot de passe au serveur, qui vérifient dans son annuaire, puis renvoi au client si l'authent est ok ou non. Le client s'arrète ensuite.

    J'aimerai que si l'authentification soit ok, le client puisse envoyer une commande au serveur qui puissent etre géré via system() puis renvoyé au client.

  4. #4
    Membre Expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Par défaut
    Par quel protocole passe tu, difficile de devenir précis sans cette info?

    Dans le principe pour la suite tu devra envoyer une requête contenant :
    - un moyen pour le serveur d'identifier que tu veux exécuter une commande distante
    - la commande a exécuter.

    la réponse devra contenir le resultat.

    le call-flow devrai ressembler a ceci.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Client                            Serveur
     |<---- connexion de la socket ---->|
     |                                  |
     |-- Requete Authent (login,mdp) -->| 
     |<-- Réponse Authent Ok -----------|
     |                                  |
     |-- Requete CMD (commande)-------->|
     |<-- Réponse CMD (resultat)--------|
     |
    Cela nécessitera de modifier le code du serveur/client pour gérer cette nouvelle requête.
    quelque part dans le code du client/serveur tu as l'exemple avec la requête d'authent, il te suffit de t'en inspirer pour créer et gérer la nouvelle requête.

  5. #5
    Membre régulier
    Inscrit en
    Mars 2009
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 11
    Par défaut
    Merci pour ton aide,

    J'utilise TCP dans un tunnel SSL.

    Apres tes conseils voici le détails fonctionnel :

    1/ Lorsque le client reçoi du serveur "Login OK" on propose à l'utilisateur de taper une commande : printf("veuillez taper une command: ");

    2/ On stock ce que l'utilisateur entre dans une variable : char command[12]
    Puis on l'envoi au serveur : SSL_write(ssl,command,strlen(command)); si j'ai bien compris

    3/ Le serveur la récupère, la stck dans une variable : char command[12]

    4/ Puis à l'aide de la commande system("command") on l'execute

    5/ Il ne reste plus qu'à mettre le résultat de la commande dans une variable que l'on envoi au client : char retourcommand[8096]

    Peux-tu me dire ce que tu en penses ?

    Est-il possible avec system() de rediriger la sortie standard directement vers une variable ou dois-je passer par la création d'un fichier ?


    J'ai trouvé ces paramètres là avec la commande system() :
    A > fichier Exécute la commande A et redirige sa sortie standard (stdout) dans fichier en écrasant son contenu ou en créant fichier si celui-ci n'existe pas
    A | B Exécute A et envoie le contenu de sa sortie standard dans l'entrée standard de B

  6. #6
    Membre régulier
    Inscrit en
    Mars 2009
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 11
    Par défaut
    petit programme pour tester est-ce que cela pourrait marcher comme ceci ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    char mavariable[12]
    File * fichier
     
    int main ()
    File * fichier
    fichier=fopen("command.txt","w")
    printf("entrez une commande :");
    scanf("%s,mavariable")
    system("mavariable > command.txt");
    fclose (fichier);
     
    return 0;

  7. #7
    Membre Expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Par défaut
    je ne suis pas certain que ce soit très saint comme façon de faire....
    Citation Envoyé par pedrolastiko Voir le message
    ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    char mavariable[12]
    File * fichier
     
    int main ()
    File * fichier
    fichier=fopen("command.txt","w") /* Tu ouvre un fichier en écriture */
    printf("entrez une commande :");
    scanf("%s,mavariable")
    system("mavariable > command.txt"); /* tu écrase le fichier ouvert en écriture */
    fclose (fichier);
     
    return 0;

  8. #8
    Membre régulier
    Inscrit en
    Mars 2009
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 11
    Par défaut
    Re-Salut !!
    J'ai trouvé un exemple de fonction popen :
    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
     
    #include <stdio.h>
     
    main()
    {
      FILE *fp;
      char line[130];			/* line of data from unix command*/
     
      fp = popen("ls -l", "r");		/* Issue the command.		*/
     
    					/* Read a line			*/
      while ( fgets( line, sizeof line, fp))
      {
        printf("%s", line);
      }
      pclose(fp);
    }
    J'ai du coup plusieur question:

    1/ Ou se crée le fichier (son nom ?) qui va recevoir le resultat de la fonction popen ? Ne dois-je pas rajouter un FP = fichier.txt quelque part ?

    2/ Est-il possible d'envoyer la commande directement via la socket ? ou dois-je lire le fichier , puis envoyer le contenu du fichier par la socket ??

  9. #9
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Citation Envoyé par pedrolastiko Voir le message
    2/ On stock ce que l'utilisateur entre dans une variable : char command[12]
    11 caractères pour une commande, cela ne laisse pas beaucoup de place ...
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  10. #10
    Membre régulier
    Inscrit en
    Mars 2009
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 11
    Par défaut
    Citation Envoyé par ram-0000 Voir le message
    11 caractères pour une commande, cela ne laisse pas beaucoup de place ...
    Je pensait à des petites commandes du type

    uname, ps, ...

    mais je vais effectivement agrandir un peu

    Merci !

  11. #11
    Membre Expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Par défaut
    a la place d'utiliser system() je te conseille de jeter un oeil sur popen()/pclose() pour récupérer directement l'exécution de ta commande dans ton programme.

    http://www.linux-kheops.com/doc/man/...3/popen.3.html

    Exemple exécutant la commande ls récupéré de
    http://www.opengroup.org/onlinepubs/...ons/popen.html
    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
    21
    22
    23
    24
    25
    26
     
    #include <stdio.h>
    ...
     
    FILE *fp;
    int status;
    char path[PATH_MAX];
     
    fp = popen("ls *", "r"); 
    if (fp == NULL)
        /* Handle error */;
     
     
    while (fgets(path, PATH_MAX, fp) != NULL)
        printf("%s", path);
     
     
    status = pclose(fp);
    if (status == -1) {
        /* Error reported by pclose() */
        ...
    } else {
        /* Use macros described under wait() to inspect `status' in order
           to determine success/failure of command executed by popen() */
        ...
    }

  12. #12
    Membre Expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Par défaut
    je pense qu'il te faut autant de SSSL_read coté client que de SSL_write coté serveur

    Tu as un boucle du coté de ton serveur que l'on ne retrouve pas coté client.
    le tout sera de savoir quand s'arrête la boucle coté client.

Discussions similaires

  1. Réponses: 1
    Dernier message: 26/04/2011, 14h36
  2. [System.Net.Sockets] Connexion via un proxy
    Par kendras dans le forum Développement
    Réponses: 15
    Dernier message: 17/02/2009, 14h52
  3. Réponses: 7
    Dernier message: 11/07/2007, 20h10
  4. Prblème avec la commande system
    Par AnneOlga dans le forum C++Builder
    Réponses: 8
    Dernier message: 04/03/2004, 16h05
  5. La commande systeme
    Par sunshine33 dans le forum MFC
    Réponses: 11
    Dernier message: 13/01/2004, 11h34

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