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 :

Comment s'initie une session telnet ?


Sujet :

Réseau C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    ingénieur calcul
    Inscrit en
    Décembre 2007
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur calcul
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 363
    Par défaut Comment s'initie une session telnet ?
    Bonjour,
    j'ai une application en C dont je voudrais qu'elle initie une connexion à un serveur et qu'elle me rende la main ensuite; j'ai créé convenablement le socket et la connection à la machine se fait, mais j'ai du mal au moment de l'envoi du username et password avant lesquels je ne sais pas s'il faut lire quelques lignes de bienvenue et combien.
    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
     
     
            sin.sin_addr = *(IN_ADDR *) hostinfo->h_addr;
            sin.sin_port = htons(PORT); // PORT=23 pour telnet.
            sin.sin_family = AF_INET;  // pour l'instant, AF_INET qui est le type vaut 2
            sin.sin_addr.s_addr=addrl; // sin est une struct sockaddr_in,
     
            hh=gethostbyaddr(&addrl, sizeof(addrl), 2);
            if(hh==NULL) {
            // struct hostent *gethostbyaddr(const void *addr, socklen_t len, int type);
                perror("un: gethostbyaddr()");
            }
            else{ // on ne passe pas ici, donc hh==NULL, donc gethostbyaddr n'a pas bien marché
                // gethostbyaddr a créé une struct hostent qui s'appelle hh et qui provoque une
                host = hh->h_name;                            // segmentation fault ci après...
                printf("host scruté=%s (hh->h_name)\n", host);
                printf("gethostbyaddr() Ok\n\n");
            }
     
            if (hostinfo == NULL){ // ça ne passe pas ici, donc hostinfo est Ok. (le gethostbyname)
                fprintf (stderr, " Unknown host %s.\n", buffer);
                exit(EXIT_FAILURE);
            }
     
     
            if(connect(sock,(SOCKADDR *) &sin, sizeof(SOCKADDR)) == SOCKET_ERROR)
            {
                perror("un: connect()");
                exit(errno);
            }
            else printf("un: connect() Ok\n\n");
            printf("un: try to log in, now :\n");
            //
            printf("envoi de ->%s%s", "guest", CRLF);
            sprintf(command, "%s%s", "guest", CRLF);
            write_server(sock, command);
            read_server(sock, line);
            puts(line);
            //
            printf("envoi de ->%s%s", "guest", CRLF);
            sprintf(command, "%s%s", "guest", CRLF);
            write_server(sock, command);
            read_server(sock, line);
            puts(line);
    Comment faire par la suite pour détecter que le login et passwd ont été acceptés, puis pour qu'il me rende la main ?
    Si quelqu'un a déjà fait des choses comme ça ou peut me donner des pistes, ça m'intéresse, merci,
    David

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par dva2tlse Voir le message
    Bonjour,
    j'ai une application en C dont je voudrais qu'elle initie une connexion à un serveur et qu'elle me rende la main ensuite; j'ai créé concenablement le socket et la connection à la machine se fait, mais j'ai du mal au moment de l'envoi du username et password avant lesquels je ne sais pas s'il faut lire quelques lignes de bienvenue et combien.
    As-tu compris qu'on ne pouvait pas réaliser un client Telnet en C standard ? En effet, c'est un terminal, c'est à dire que les caractères sont transmis en temps réel au serveur

    C'est le serveur qui envoie les écrans, demandes de mot de passe etc. C'est aussi lui qui gère l'echo des caractères tapés, la correction...

    Un terminal Telnet, c'est très bête...

    Maintenant, si tu veux réaliser un programme qui se comporte comme le couple 'humain + terminal Telnet', Ca ne va pas être vraiment simple, par ce que ce n'est pas du tout fait pour ça. En effet, chaque application a sa façon de présenter les données...

    Je te conseille de tester ton application serveur avec un terminal telnet comme ceux de Windows ou de Linux.

    Par exemple, quand je me connecte à mon routeur avec mon client Telnet, le serveur Telnet du routeur répond :
    Ensuite, je tape le mode de passe et le serveur répond :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    Password: ********
     
    emdel> _
    Mais ça peut être complètement différend sur une autre application.

  3. #3
    Membre éprouvé
    Inscrit en
    Août 2008
    Messages
    117
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Août 2008
    Messages : 117
    Par défaut
    Il n'y a pas de méthode pour vérifier si tu es connecté ou pas.

    Dans le protocole telnet si ta tentative de login echoue on te redemande ton log/pwd.

    Après quelques tentative déconnexion.

    La seule méthode pour vérifier si tu es connecté c'est une expression régulière comprenant ce que tu attends de l'hôte distant ( un ^user\$$ par exemple )

    si c'est pour batcher sur un hôte connu et sur lequel tu as la main, le mieux est d'aller lui mettre une balise dans le bashrc ou equivalent ...

    [EDIT :] OUP'S Messages croisés

    @Emmanuel c'est batchable du telnet mais en raw mode. enfin galère un peut. il vaut mieux ecrire son propre daemon sur son propre port.

  4. #4
    Membre éclairé
    Homme Profil pro
    ingénieur calcul
    Inscrit en
    Décembre 2007
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur calcul
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 363
    Par défaut
    Ok merci les gars; je vois que j'ai un bon morceau de pain sur la planche; mais en particulier je ne vois pas pouquoi le C ne saurait pas s'occuper de ça; on pourrait le laisser boucler bêtement en attendant les décisions que le protocole impose au serveur ? Trop simple ???
    Merci encore,
    David

  5. #5
    Membre éprouvé
    Inscrit en
    Août 2008
    Messages
    117
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Août 2008
    Messages : 117
    Par défaut
    En fait je vais utiliser une voie plus simple : que veux tu faire et quelles sont tes contraintes ?

  6. #6
    Membre éclairé
    Homme Profil pro
    ingénieur calcul
    Inscrit en
    Décembre 2007
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur calcul
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 363
    Par défaut
    Super ta question ! [lundi quatre heures et demie, je rentre du boulot où j'ai fait de l'unix toute la journée, mais pas pour moi !] D'ailleurs j'ai une ch'tite question rapide relative à une des machines sur lesquelles je bosse; le serveur de fichiers; c'est un ultra sparc chaipakombien, et son compilateur cc admet une option -xpentium; alors comme je crois que certaines machines SUN tournent avec des pentium ou des alpha (dont je ne sais pas très bien ce que c'est) je me suis dit que peut-être elle pourrait me compiler un "Hello world !" dont je pourrais trasferer l'exécutable sur un PC-pentium par ftp et j'aurais un "Hello world !" sur mon PC du boulot; ménon ça marche pas; par contre l'exécutable, même compilé en -xpentium, tourne sur la machine SUN; et son "uname -p" me répond "sparc", alors à quoi sert donc le -xpentium du compilo ? [fin de la ch'tite question]

    Alors pour la tienne, de question, ce que je veux c'est faire de mes mains un client telnet qui me permettrait de bosser depuis chez moi si jamais en pleine nuit j'avais une idée de génie qui rendrait ma boite ultra-dominante sur son marché, et donc j'en aurais des retombées financières considérables puique j'ai le même prénom que le fils du patron !

    Voila; et mes contraintes, c'est que je n'ai pas de serveur telnet sous la main; juste celui du boulot dont l'admin' va peut-être s'énerver un jour à force le trouver en rade tous les matins où je l'aurais fait planter la veille avec mon client pourri; alors pour éviter ça, est il possible d'en faire un avec ubuntu ? J'ai déjà essayé un sudo apt-get install inetd, (de mémoire, mais je crois bien que c'est ça) et ça se passe bien, par contre quand je fais un restart de ce démon pour démarrer le serveur, le PC me dit qu'il n'en trouve pas l'exécutable, non installé.

    Bon, c'est un peu du vrac cette réponse, mais ça fait plus d'une demi-heure que j'écris alors j'ai la flemme de reprendre et ordonner le tout, mais j'attends avec grande joie le plus de pistes possible.
    David

    [edit une demi-heure plus tard]
    pardon d'avoir redoublé le post, mais y'a eu une internal server error, que j'ai peut-être causée chaipakomment mais que je n'ai pas du tout maitrisée.
    Alors les pistes que j'attends avec joie, c'est :
    -le compilo; à quoi sert -xpentium sur une sparc ?
    -le serveur telnet; comment en installer un chez moi ?
    -et le client telnet, d'après les réponses que j'ai eues hier, mon code ne doit rien renvoyer au serveur puisque c'est lui qui fait l'echo; donc ça veut dire que je ne lui envoie que login et password, mais toujours pareil : comment sais-je que je suis loggé, et comment est-ce que ça peut se terminer en me laissant la main ?
    D.

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par dva2tlse Voir le message
    Super ta question ! [lundi quatre heures et demie, je rentre du boulot où j'ai fait de l'unix toute la journée, mais pas pour moi !] D'ailleurs j'ai une ch'tite question rapide relative à une des machines sur lesquelles je bosse; le serveur de fichiers; c'est un ultra sparc chaipakombien, et son compilateur cc admet une option -xpentium; alors comme je crois que certaines machines SUN tournent avec des pentium ou des alpha (dont je ne sais pas très bien ce que c'est) je me suis dit que peut-être elle pourrait me compiler un "Hello world !" dont je pourrais trasferer l'exécutable sur un PC-pentium par ftp et j'aurais un "Hello world !" sur mon PC du boulot; ménon ça marche pas; par contre l'exécutable, même compilé en -xpentium, tourne sur la machine SUN; et son "uname -p" me répond "sparc", alors à quoi sert donc le -xpentium du compilo ? [fin de la ch'tite question]
    Un exécutable est compilé pour une plateforme donnée (machine + système). Elle ne peut pas s'exécuter sur une autre plateforme, même si c'est le même processeur.

    - Le format de l'exécutable est différent
    - Les appels systèmes sont différents
    - Les bibliothèques partagées sont différentes.
    Alors pour la tienne, de question, ce que je veux c'est faire de mes mains un client telnet qui me permettrait de bosser depuis chez moi si jamais en pleine nuit j'avais une idée de génie qui rendrait ma boite ultra-dominante sur son marché, et donc j'en aurais des retombées financières considérables puique j'ai le même prénom que le fils du patron !
    Tu as un client Telnet sur ton PC / Windows :

    Démarrer > Exécuter > cmd

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    C:> telnet <adresse du serveur>
    Et voilà.

    Idem sur une machine Linux.

    Ouvrir une console :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    * telnet <adresse du serveur>
    -le compilo; à quoi sert -xpentium sur une sparc ?
    A générer du code pour pentium. Il y a des stations Sun qui tournent sur PC avec un Solaris spécial.

    -le serveur telnet; comment en installer un chez moi ?
    C'est assez dangereux. Tu y tiens ? En plus, j'ai pas compris à quoi ça te servirait... Tu as compris le fonctionnement d'une architecture client/serveur ?

    -et le client telnet, d'après les réponses que j'ai eues hier, mon code ne doit rien renvoyer au serveur puisque c'est lui qui fait l'echo; donc ça veut dire que je ne lui envoie que login et password, mais toujours pareil : comment sais-je que je suis loggé,
    Il t'envoie probablement une invite de commande. Tu n'as pas lu mon post ?
    et comment est-ce que ça peut se terminer en me laissant la main ?
    L'invite de commande, c'est ça "te donner la main". Tu n'as plus qu'à taper une commande et elle sera interprétée par le serveur.

Discussions similaires

  1. Ouvrir une session telnet
    Par numostro dans le forum Administration
    Réponses: 2
    Dernier message: 29/12/2006, 10h12
  2. Initier une session telnet dans une session telnet
    Par benbs dans le forum Modules
    Réponses: 3
    Dernier message: 18/11/2006, 13h05
  3. Comment détecter si une session Windows est ouverte?
    Par yosthegost dans le forum Delphi
    Réponses: 3
    Dernier message: 23/05/2006, 17h42
  4. Lancer une session telnet automatiquement
    Par Pragmateek dans le forum Windows
    Réponses: 2
    Dernier message: 23/05/2006, 16h37
  5. Réponses: 1
    Dernier message: 06/04/2006, 15h35

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