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

Langage PHP Discussion :

[Sécurité] session telnet via php


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mars 2006
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 140
    Par défaut [Sécurité] session telnet via php
    Bonjour,

    Je voudrais ouvrir une session TELNET via PHP, mais malheureusement ce cas n'est pas documenté, et je n'ai pas trouvé d'exemple.

    J'ai besoin de lancer à distance quelques commandes et récupérer le résultat.

    Apparemment il faut capter le prompt pour les login et pass, mais je vois pas du tout comment faire.

    J'arrive à ouvrir une session avec cette commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $id_de_la_socket=@fsockopen($routeur_ip,23,&$errno,&$errstr,2);
    çà c'est simple mais ensuite je ne sais pas comment et quand envoyer le login et le mot de passe
    Je sais qu'il est nécessaire d'utiliser des :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    fputs ($id_de_la_socket, "????????");
    et des 
    fgets($id_de_la_socket,?????);
    Ensuite une fois que l'on est connecté comment envoyer nos commandes et les recevoir ?

    Je sais qu'il existe une librairie pour cela, mais je ne peut pas installer de librairie supplémentaire sur le serveur qui accueil mon application.

    Est-ce que une bonne âme aurait l'amabilité de m'expliquer ou quelqu'un connait-il un script "prêt à l'emploi" ?

    Merci

  2. #2
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 348
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 348
    Billets dans le blog
    17
    Par défaut
    Quel est le protocle utilisé ?
    Tu dois remplacer les ??? par les commandes adéquates.
    Exemple : si je veux connaître les mails qui attendent sur un serveur POP j'utiliserai le protocol POP et les commandes suivantes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    USER <login>
    PASS <password>
    LIST

  3. #3
    Membre confirmé
    Inscrit en
    Mars 2006
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 140
    Par défaut
    En fait, j'ai besoin d'ouvrir une session telnet afin de faire par la suite des pings ou des commandes spécifiques sur les routeurs (sh ver, sh arp, ...) à partir de la machine jointe en telnet.

    Je voudrais donc savoir comment initialiser une connexion puis comment envoyer ma commande (un ping par exemple) et comment recevoir le résultat.

    Merci

  4. #4
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 698
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 698
    Par défaut
    pour envoyer des commande il suffit de faire ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fwrite($id_de_la_socket, 'ls -al /');
    et tu récupère le résultat avec "fgets"

  5. #5
    Membre émérite Avatar de Yobs
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    675
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2004
    Messages : 675
    Par défaut
    Ceci dit si tu en as la possibilité je te conseillerais l'utilisation de ssh car plus sécurisé.

  6. #6
    Membre confirmé
    Inscrit en
    Mars 2006
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 140
    Par défaut
    Qui dit plus sécurisé dit certainement bcp plus compliqué à mettre en oeuvre !!!
    Non ?

  7. #7
    Membre confirmé
    Inscrit en
    Mars 2006
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 140
    Par défaut
    Mais pour l'instant, j'arrive à ouvrir une socket mais le login et le mot de passe ne passe pas j'ai l'impression.

    Voici mon code :
    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
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
     
    <html>
    <pre>
    <?
     
    $cfgServer	= "125.689.25.23";
    $cfgPort	= 23;
    $cfgTimeOut = 10;
     
    // open a socket
    if(!$cfgTimeOut)
    	// without timeout
    	$usenet_handle = fsockopen($cfgServer, $cfgPort);
    else
    	// with timeout
    	$usenet_handle = fsockopen($cfgServer, $cfgPort, &$errno, &$errstr, $cfgTimeOut);
    	sleep (5);
    if(!$usenet_handle) {
    	echo "Connexion failed\\n";
    	exit();
    }	
    else {
    	echo "Connected\\n";
    	$tmp = fgets($usenet_handle, 1024);
    	sleep (5);
    	echo $tmp;
    }
     
    $cfgUser	= "login";
    $cfgPasswd = "pwd";
     
     
    // *****************************
    // Valide si l'ouverture de session TCP a eu lieu
    // *****************************
    if($usenet_handle)
          {
          // ********************************************
          // Présentation des résultats
          // ********************************************
          echo "
    	    <pre>
                <p align='center'>
                      <font size='4' color='#008000'>
                            <b>
                                Session Telnet :
    			    Socket Id : $usenet_handle
    			    Adresse IP : $cfgServer
                            </b>
                      </font>
                </p>
    	    </pre>
                ";
     
    	$tempo=@fgets($usenet_handle,1024);
    	echo "tempo :".$tempo;
     
    	// *****************************
    	// Indication au routeur que le buffer de reception est illimité
    	// *****************************
    	fputs ($usenet_handle, "terminal length 0\n");
    	// *****************************
    	// Reception
    	// *****************************
    	$tempo1=@fgets($usenet_handle,102400);
    	sleep (10);
            // *****************************
    	// Affichage du prompt
    	// *****************************
    	echo "tempo1 :".$tempo1;
     
     
    	// *****************************
    	// Indication au routeur du login
    	// *****************************
    	fputs ($usenet_handle, $cfgUser."\\n");
    	// *****************************
    	// Reception
    	// *****************************
    	$tempo2=@fgets($usenet_handle,1024);
    	sleep (10);
            // *****************************
    	// Affichage du prompt
    	// *****************************
    	echo "tempo2 :".$tempo2;
     
     
    	// *****************************
    	// Indication au routeur du password
    	// *****************************
    	fputs ($usenet_handle, $cfgPasswd."\\n");
    	// *****************************
    	// Reception
    	// *****************************
    	$tempo3=@fgets($usenet_handle,1024);
    	sleep (10);
            // *****************************
    	// Affichage du prompt
    	// *****************************
    	echo "tempo3 :".$tempo3;
     
    	// *****************************
    	// Indication au routeur de la commande ping
    	// *****************************
    	fputs ($usenet_handle, "ping 125.189.25.23");
    	// *****************************
    	// Reception
    	// *****************************
    	$tempo4=@fgets($usenet_handle,1024);
    	sleep (15);
            // *****************************
    	// Affichage du prompt
    	// *****************************
    	echo "tempo4 :".$tempo4;
     
     
     
    // close connexion
    fclose($usenet_handle);
     
     
    }
    ?>
    </pre>
    </html>
    Et voici mon 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
     
    Connected\nÿûÿûÿý
     
     
     
     
                                Session Telnet :
    			    Id.Resource id #2
    			    125.189.25.23
     
     
     
     
                tempo :
    tempo1 :Cisco Systems Console
    tempo2 :
    tempo3 :
    tempo4 :C

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 41
    Par défaut
    Citation Envoyé par winnie82
    Qui dit plus sécurisé dit certainement bcp plus compliqué à mettre en oeuvre !!!
    Non ?
    Il a raison ... et ce n'est pas du tout compliqué
    il suffit de crée un script d'interfaçage entre IHM et serveur qui va récupérer les argument passés depuis la page web .... ce script va t'aider si tu fait ds trucs évolutifs

    regarde la commande system() ...mais c'est pas du tout sécurisé

  9. #9
    Membre confirmé
    Inscrit en
    Mars 2006
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 140
    Par défaut
    Tu peux developper un peu ton propos.
    Tu veux dire que l'on peut passer les commandes comme telnet via la fonction system().
    Si c'est le cas, je n'aurais pas trop de problème de sécurrité puisque ce script se déroule en tache de fond au sein d'une fonction sans aucun affichage

    Un exemple de ce type pourrait-il fonctioner pour initier une session telnet ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <?
    system("telnet 1.1.1.1");
    system("login\\n");
    system("pwd\\n");
    ?>

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 41
    Par défaut
    Citation Envoyé par winnie82
    Tu peux developper un peu ton propos.
    Tu veux dire que l'on peut passer les commandes comme telnet via la fonction system().
    Si c'est le cas, je n'aurais pas trop de problème de sécurrité puisque ce script se déroule en tache de fond au sein d'une fonction sans aucun affichage

    Un exemple de ce type pourrait-il fonctioner pour initier une session telnet ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <?
    system("telnet 1.1.1.1");
    system("login\\n");
    system("pwd\\n");
    ?>
    essai cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    system("telnet | open | _host | _login | _PWD |_mestraitement", return);
    j'ai pas la plateform adéquate pour vérifier que cela marche
    normalement ça ne devera pas marcher car avec les pipes on ne peut que rester dans le système
    pas de basculement vers le protocole

  11. #11
    Membre confirmé
    Inscrit en
    Mars 2006
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 140
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $request = system("telnet | open | 1.1.1.1 | _login | _pwd | traceroute 2.2.2.2"); 
    echo "resultat : $request";
    J'obtiens bien une réponse de traceroute, mais la commande est exécutée sur ma machine et non sur la machine distante. Le telnet ne fonctionne donc pas !

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 41
    Par défaut
    Citation Envoyé par winnie82
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $request = system("telnet | open | 1.1.1.1 | _login | _pwd | traceroute 2.2.2.2"); 
    echo "resultat : $request";
    J'obtiens bien une réponse de traceroute, mais la commande est exécutée sur ma machine et non sur la machine distante. Le telnet ne fonctionne donc pas !
    effectivement c'est ce que je viens d'editer dans le message d'avant


    C'est vrai que c'est une question TARODE!!

    essai cela
    var $ret
    var $ret2
    system("telnet", $ret);
    if($ret)
    {
    system("open", $ret2);
    }

    normalement si $ret2 est bon tout va s'en découler
    open est compri par telnet normalement
    si ça marche pas c'est que ça ne marchera jamais
    à moins que tu fasse la travaille périeux d'installer ton client ......

  13. #13
    Membre confirmé
    Inscrit en
    Mars 2006
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 140
    Par défaut
    Cela ne fonctionne pas !!!
    Il va falloir que je résoud ce problème par une autre méthode !

  14. #14
    Membre confirmé
    Inscrit en
    Mars 2006
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 140
    Par défaut
    Personne ne connait un script qui permet de réaliser une session telnet en PHP ?

    Merci

  15. #15
    Membre confirmé
    Inscrit en
    Mars 2006
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 140
    Par défaut
    J'ai trouvé un script qui à l'air de tenir la route.
    Pour ceux que çà intéresse :
    http://www.geckotribe.com/php-telnet/

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. session telnet via java
    Par maymaoua dans le forum Développement
    Réponses: 2
    Dernier message: 21/06/2010, 18h56
  2. [Help] pb d'insertion via PHP ...
    Par romtrash dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 19/04/2005, 11h47
  3. Réponses: 2
    Dernier message: 05/10/2004, 22h43
  4. Réponses: 2
    Dernier message: 27/05/2004, 00h40
  5. Transformation xml + xsl -> HTML via PHP
    Par petit-ourson dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 19/10/2003, 22h42

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