Précédent   Forum des professionnels en informatique > PHP > Langage > Sessions
Sessions Forum d'entraide sur les sessions avec PHP. Avant de poster -> FAQ sessions, Cours sessions et Sources sécurité
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 23/03/2006, 18h35   #1
Nouveau Membre du Club
 
Inscription : mars 2006
Messages : 134
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 134
Points : 36
Points : 36
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 :
$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 :
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
winnie82 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/03/2006, 18h50   #2
Expert Confirmé
 
Avatar de Séb.
 
Inscription : mars 2005
Messages : 2 823
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

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

Informations forums :
Inscription : mars 2005
Messages : 2 823
Points : 3 454
Points : 3 454
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 :
1
2
3
USER <login>
PASS <password>
LIST
__________________
Un problème exposé clairement est déjà à moitié résolu
Keep It Smart and Simple
Séb. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/03/2006, 09h25   #3
Nouveau Membre du Club
 
Inscription : mars 2006
Messages : 134
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 134
Points : 36
Points : 36
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
winnie82 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/03/2006, 10h42   #4
Modérateur
 
Avatar de mathieu
 
Inscription : juin 2003
Messages : 4 893
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 4 893
Points : 4 466
Points : 4 466
pour envoyer des commande il suffit de faire ça
Code :
fwrite($id_de_la_socket, 'ls -al /');
et tu récupère le résultat avec "fgets"
__________________
Modérateur PHP
mathieu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/03/2006, 10h54   #5
Membre émérite
 
Avatar de Yobs
 
Inscription : avril 2004
Messages : 675
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : avril 2004
Messages : 675
Points : 808
Points : 808
Envoyer un message via MSN à Yobs
Ceci dit si tu en as la possibilité je te conseillerais l'utilisation de ssh car plus sécurisé.
__________________
Chaque problème a une solution, mais il est plus facile de répondre si le problème est correctement renseignés
Yobs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/03/2006, 11h08   #6
Nouveau Membre du Club
 
Inscription : mars 2006
Messages : 134
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 134
Points : 36
Points : 36
Qui dit plus sécurisé dit certainement bcp plus compliqué à mettre en oeuvre !!!
Non ?
winnie82 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/03/2006, 11h20   #7
Nouveau Membre du Club
 
Inscription : mars 2006
Messages : 134
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 134
Points : 36
Points : 36
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 :
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 :
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
winnie82 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/03/2006, 13h21   #8
Nouveau Membre du Club
 
Inscription : mars 2006
Messages : 41
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 41
Points : 26
Points : 26
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é
bouda27 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/03/2006, 13h56   #9
Nouveau Membre du Club
 
Inscription : mars 2006
Messages : 134
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 134
Points : 36
Points : 36
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 :
1
2
3
4
5
6
 
<?
system("telnet 1.1.1.1");
system("login\\n");
system("pwd\\n");
?>
winnie82 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/03/2006, 15h26   #10
Nouveau Membre du Club
 
Inscription : mars 2006
Messages : 41
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 41
Points : 26
Points : 26
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 :
1
2
3
4
5
6
 
<?
system("telnet 1.1.1.1");
system("login\\n");
system("pwd\\n");
?>
essai cela :
Code :
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
bouda27 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/03/2006, 15h45   #11
Nouveau Membre du Club
 
Inscription : mars 2006
Messages : 134
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 134
Points : 36
Points : 36
Code :
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 !
winnie82 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/03/2006, 15h50   #12
Nouveau Membre du Club
 
Inscription : mars 2006
Messages : 41
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 41
Points : 26
Points : 26
Citation:
Envoyé par winnie82
Code :
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 ......
bouda27 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/03/2006, 16h05   #13
Nouveau Membre du Club
 
Inscription : mars 2006
Messages : 134
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 134
Points : 36
Points : 36
Cela ne fonctionne pas !!!
Il va falloir que je résoud ce problème par une autre méthode !
winnie82 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/03/2006, 17h56   #14
Nouveau Membre du Club
 
Inscription : mars 2006
Messages : 134
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 134
Points : 36
Points : 36
Personne ne connait un script qui permet de réaliser une session telnet en PHP ?

Merci
winnie82 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/03/2006, 09h23   #15
Nouveau Membre du Club
 
Inscription : mars 2006
Messages : 134
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 134
Points : 36
Points : 36
J'ai trouvé un script qui à l'air de tenir la route.
Pour ceux que çà intéresse :
http://www.geckotribe.com/php-telnet/
winnie82 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h38.


 
 
 
 
Partenaires

Hébergement Web