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 :

pb de lancer telnet depuis du code c


Sujet :

Réseau C

  1. #1
    Membre actif
    Inscrit en
    Juillet 2003
    Messages
    407
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 407
    Points : 252
    Points
    252
    Par défaut pb de lancer telnet depuis du code c
    bonjour ,
    je suis sur linux
    je n'arrive pas à me connecter en telnet via un code c ,


    voilà le code que j'ai tésté
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
     
    #include <stdio.h>
    #include <errno.h> 
    #include <signal.h> 
    #include <stdio.h> 
    #include <unistd.h> 
    #include <sys/types.h> 
    #include <sys/socket.h> 
    #include <sys/wait.h> 
    #include <netinet/in.h> 
    #include <netdb.h>
     
    void main()
    {    
     
        int tmp_taille;
     
     
        SOCKET sock;
        SOCKADDR_IN sin; 
        sin.sin_addr.s_addr            = x.x.x.x;   
        sin.sin_family                = AF_INET;        
        sin.sin_port                = htons(23);  
        sock = socket(AF_INET,SOCK_STREAM,0);        
        bind(sock, (SOCKADDR *)&sin, sizeof(sin)); 
     
        listen(sock, 5);  
        int val = 0;
        while(1)
        {
     
            tmp_taille = sizeof(sin);
            val = accept(sock, (SOCKADDR *)&sin, &tmp_taille);
            if(val != INVALID_SOCKET)
            {
            // Fonctions à éxécuter sur le socket.
                printf("yyyhhhhaaaaaa le socket fonctione \n");
            }
            else
                printf("ca marche pas\n");
     
        }
    }
    ;-) cordialement

  2. #2
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par peppena
    je suis sur linux
    je n'arrive pas à me connecter en telnet via un code c ,
    Ca ressemble à un serveur. C'est ce que tu voulais faire ? Te connecter à ce serveur par un client telnet ?
    voilà le code que j'ai tésté
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        sin.sin_addr.s_addr            = x.x.x.x;
    Faut pas raconter d'histoires. Ce code ne compile pas, tu n'as pas pu le tester...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
             /* automatic IP address */
             sin.sin_addr.s_addr = htonl (INADDR_ANY);
    http://emmanuel-delahaye.developpez.com/reseaux.htm
    http://emmanuel-delahaye.developpez....s.htm#typemain
    Pas de Wi-Fi à la maison : CPL

  3. #3
    Membre actif
    Inscrit en
    Juillet 2003
    Messages
    407
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 407
    Points : 252
    Points
    252
    Par défaut
    merci pour la réponse ,

    j'ai essayé le code 05
    en le compilant , je reçois les messages d'erreurs suivants :

    s05.c: In function `app':
    s05.c:54: erreur: « SOCKADDR_IN » non déclaré (première utilisation dans cette fonction)
    s05.c:54: erreur: (Chaque identificateur non déclaré est rapporté une seule fois
    s05.c:54: erreur: pour chaque fonction dans laquelle il apparaît.)
    s05.c:54: erreur: erreur de syntaxe avant « sin »
    s05.c:56: erreur: « sin » non déclaré (première utilisation dans cette fonction)
    s05.c:56: erreur: « INADDR_ANY » non déclaré (première utilisation dans cette fonction)
    s05.c:65: erreur: « SOCKADDR » non déclaré (première utilisation dans cette fonction)
    s05.c:65: erreur: erreur de syntaxe avant un élément lexical « ) »
    s05.c:67: erreur: « SOCKET_ERROR » non déclaré (première utilisation dans cette fonction)
    s05.c:80: erreur: erreur de syntaxe avant « csin »
    s05.c:82: erreur: « csin » non déclaré (première utilisation dans cette fonction)
    s05.c:83: erreur: erreur de syntaxe avant un élément lexical « ) »
    s05.c:134: erreur: erreur de syntaxe avant « else »
    s05.c:143: erreur: « sock_err » non déclaré (première utilisation dans cette fonction)
    s05.c: At top level:
    s05.c:153: erreur: erreur de syntaxe avant un élément lexical « } »
    s05.c:157: attention : la définition de données n'a pas de type ni de classe de stockage
    s05.c:158: erreur: erreur de syntaxe avant un élément lexical « } »
    s05.c:195:2: attention : no newline at end of file
    ;-) cordialement

  4. #4
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par peppena
    j'ai essayé le code 05
    en le compilant , je reçois les messages d'erreurs suivants :
    J'ai bien précisé que je n'avais pas fait les essais sous Linux.
    Citation Envoyé par reseaux.htm
    Environnement de développement

    Le code est écrit et validé sous Windows avec Dev-C++ et les blibiothèques -lpthreadGC[1] et -lws2_32. Il n'est pas validé sous Linux pour le moment. (Si quelqu'un veut le faire, il est le bienvenu)
    Quel est ton système ?
    Est-ce que la macro 'linux' est définie globalement ?

    EDIT: J'ai corrigé 05.c. Il compile sous linux.
    Pas de Wi-Fi à la maison : CPL

  5. #5
    Membre actif
    Inscrit en
    Juillet 2003
    Messages
    407
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 407
    Points : 252
    Points
    252
    Par défaut
    je suis sous linux (Advanced Server4)
    et je plante à me connecter en telnet
    ;-) cordialement

  6. #6
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par peppena
    je suis sous linux (Advanced Server4)
    et je plante à me connecter en telnet
    N'oublie pas que sur unixoïde, un serveur Telnet (port 23, donc < 1024) doit être lancé en mode root...

    J'ai corrigé mon code et je l'ai compilé sous Linux (2.6/Mandriva)
    Pas de Wi-Fi à la maison : CPL

  7. #7
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Emmanuel:
    Est-ce que le programme SAIT que ça foire ?
    Exemple typique, est-ce que le bind() échoue ?

    Ou bien est-ce programme ET utilisateur sont laissés dans l'ignorance, sans le moindre message ?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  8. #8
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Médinoc
    Emmanuel:
    Est-ce que le programme SAIT que ça foire ?
    Exemple typique, est-ce que le bind() échoue ?

    Ou bien est-ce programme ET utilisateur sont laissés dans l'ignorance, sans le moindre message ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    [edelahaye@edtux ~]$ mc
    [edelahaye@edtux srv]$ ./serv
    socket 4 is now opened in TCP/IP mode
    socket.bind: Permission denied
    closing socket 4...
    the socket is now closed
    [edelahaye@edtux srv]$ su
    Password:
    [root@edtux srv]# ./serv
    socket 4 is now opened in TCP/IP mode
    listening on port 23...
    waiting for a client connection on port 23...
    Pas de Wi-Fi à la maison : CPL

  9. #9
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    OK. C'est donc bien une réelle restriction, plutôt qu'un firewall "trou noir" interne.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  10. #10
    Membre actif
    Inscrit en
    Juillet 2003
    Messages
    407
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 407
    Points : 252
    Points
    252
    Par défaut
    merci pour l'aide
    Citation Envoyé par Emmanuel Delahaye
    J'ai corrigé mon code et je l'ai compilé sous Linux (2.6/Mandriva)
    qu'est ce qu'il faut changer ds le code ?
    est ce que depuis linux et c , tu as réussi à te connecter en telnet sur une autre machine?
    ;-) cordialement

  11. #11
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par peppena
    qu'est ce qu'il faut changer ds le code ?
    Tout ce qu'il y a dans #if defined (linux) et une ligne dans le main() (définition de err).

    Sinon, tu remplaces intégralement l'ancien code par le nouveau et c'est tout...
    est ce que depuis linux et c , tu as réussi à te connecter en telnet sur une autre machine?
    J'ai testé qu'en mode root, le serveur se mettait en écoute. Je n'ai pas eu le temps de tester de connection Telnet depuis un client distant. Je le ferais lundi matin au boulot.
    Pas de Wi-Fi à la maison : CPL

  12. #12
    Membre actif
    Inscrit en
    Juillet 2003
    Messages
    407
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 407
    Points : 252
    Points
    252
    Par défaut
    merci !

    ca avance

    pas d'erreur mais ca plante
    voilà le résultat qui s'affiche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    socket 3 is now opened in TCP/IP mode
    listening on port 23...
    waiting for a client connection on port 23...
    ca ne bouge plus !!
    ;-) cordialement

  13. #13
    Membre actif
    Inscrit en
    Juillet 2003
    Messages
    407
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 407
    Points : 252
    Points
    252
    Par défaut
    re

    j'ai essayé de faire des affichage pour voire ou ça plante et voila le résultat :

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
     
    ......
                printf ("waiting for a client connection on port %d...\n", TELNET);
     
                   {
                      SOCKADDR_IN csin =
                      {0};
                      printf ("waiting ...1\n");
                      int recsize = (int) sizeof csin;
                      printf ("waiting ...2\n");
     
                      SOCKET csock = accept (sock, (SOCKADDR *) & csin, &recsize);
                      printf ("waiting ...3\n");
     
                       if (csock != INVALID_SOCKET)
                      {
                         printf ("client connected with socket %d from %s:%d\n"
                                 ,csock
                                 ,inet_ntoa (csin.sin_addr)
                                 ,htons (csin.sin_port));
     
                         {
                            /* wait for the receive of a data block (string expected, hence + 1) */
                            unsigned char data[128 + 1];
                            sock_err = recv (csock, data, (int) sizeof data - 1, 0);
     
                            if (sock_err != SOCKET_ERROR)
                            {
                               size_t nb_rec = (size_t) sock_err;
                               /* convert to string */
                               data[nb_rec] = 0;
                               printf ("%u byte%s received:\n%s\n"
                                       ,(unsigned) nb_rec
                                       ,nb_rec > 1 ? "s" : ""
                                       ,data);
                               fflush (stdout);
     
                               /* to be continued ... */
                            }
                            else
                            {
                               perror ("socket.recv");
                               err = 1;
                            }
                         }
                         shutdown (csock, 2);
                         printf ("closing client socket %d...\n", csock);
                         closesocket (csock), csock = INVALID_SOCKET;
     
                      }
                      else
                      {
                         perror ("socket.accept");
                         err = 1;
                      }
                   }
                }
    ....
    voilà le résultat :
    socket 3 is now opened in TCP/IP mode
    listening on port 23...
    waiting for a client connection on port 23...
    waiting ...1
    waiting ...2
    ;-) cordialement

  14. #14
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par peppena
    ca ne bouge plus !!
    Normal. C'est un serveur, il attend qu'un client se connecte.

    Tu es sous quel système ?
    Pas de Wi-Fi à la maison : CPL

  15. #15
    Membre actif
    Inscrit en
    Juillet 2003
    Messages
    407
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 407
    Points : 252
    Points
    252
    Par défaut
    bonjour
    alors ,
    je suis sous linux(A) , et j'ai une autre machine linux distante(B),
    je veux depuis la machine A me connecter à la machine B en telnet et lancer des commandes (et bien sure recevoir des réponses)

    est ce bien possible avec des sockets et C ??
    ;-) cordialement

  16. #16
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par peppena
    bonjour
    alors ,
    je suis sous linux(A) , et j'ai une autre machine linux distante(B),
    je veux depuis la machine A me connecter à la machine B en telnet et lancer des commandes (et bien sure recevoir des réponses)

    est ce bien possible avec des sockets et C ??
    Mettons que sur la machine A tu ais lancé le serveur.

    Sur la même machine, tu lances le client telnet avec l'adresse IP 127.0.0.1.
    Tu dois voir la trace évoluer sur le serveur.

    Maintenant, sur le client, tu tapes a (la touche A, OK ? Pas de 'enter').
    Le serveur doit alors s'arréter et le client se déconnecter.

    Verifie ça et tiens moi au courant.
    Pas de Wi-Fi à la maison : CPL

  17. #17
    Membre actif
    Inscrit en
    Juillet 2003
    Messages
    407
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 407
    Points : 252
    Points
    252
    Par défaut
    je vois la trace
    mais je ne comprends plus rien ( c compliqué !?)

    (rq : j'ai lancé le client telnet en console telnet 127.0.0.1)

    voilà la trace :
    socket 3 is now opened in TCP/IP mode
    listening on port 23...
    waiting for a client connection on port 23...
    waiting ...1
    waiting ...2
    waiting ...3
    client connected with socket 4 from 127.0.0.1:33381
    33 bytes received:
    &&▒ !"'#
    closing client socket 4...
    closing socket 3...
    the socket is now closed


    est ce que je veux faire est faisable ?!
    ;-) cordialement

  18. #18
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par peppena
    je vois la trace
    mais je ne comprends plus rien ( c compliqué !?)

    (rq : j'ai lancé le client telnet en console telnet 127.0.0.1)

    voilà la trace :
    La trace est tout à fait conforme. Elle te dit qu'un client 127.0.0.1 s'est connecté et que son numéro de port d'émission est 33381. Cette indication est purement informative et n'a pas d'implication fonctionnelle.

    Ensuite, le serveur indique qu'il a reçu 33 bytes du client, ce qui indique que le client a envoyé automatiquement une information au démarrage (probalement une information d'identification, peu importe). Comme actuellement, le serveur se deconnecte dès qu'il a reçu un byte, il fait son travail et c'est tout.
    est ce que je veux faire est faisable ?!
    Oui, mais il faut maintenant modifier le serveur pour qu'il reçoive complètement les données et puisse les passer à une unité de traitement.
    Dans un premier temps, il suffit de boucler sur receive().
    Fichiers attachés Fichiers attachés
    • Type de fichier : c 06.c (5,9 Ko, 77 affichages)
    Pas de Wi-Fi à la maison : CPL

Discussions similaires

  1. Lancer un programme Java depuis du code C++
    Par K-you dans le forum Langage
    Réponses: 7
    Dernier message: 23/04/2010, 18h49
  2. Lancer une application depuis un code fortran
    Par news4teab dans le forum Fortran
    Réponses: 2
    Dernier message: 22/04/2010, 09h38
  3. lancer l'action d'un JButton depuis le code.
    Par beny1700 dans le forum Composants
    Réponses: 9
    Dernier message: 18/06/2008, 22h33
  4. Réponses: 4
    Dernier message: 21/11/2007, 18h21
  5. [VBA] Lancer un document depuis le code VBA
    Par strike57 dans le forum VBA Access
    Réponses: 2
    Dernier message: 24/04/2007, 12h43

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