PHP Telnet sur switchs CISCO

Signaler
Messages postés
3
Date d'inscription
vendredi 25 juillet 2003
Statut
Membre
Dernière intervention
18 janvier 2005
-
Messages postés
3
Date d'inscription
vendredi 25 juillet 2003
Statut
Membre
Dernière intervention
18 janvier 2005
-
Bonjour à tous :)

J'utilise PHP pour me connecter à des switchs cisco (via telnet) et récupérer le résultat d'une commande que j'exploite ensuite.
Mon problème est que sur certains type de switchs (3550), le telnet marche, mais impossible de valider le mot de passe, alors que sur des 2949G, la communication telnet se passe sans problème :
PS : J'ai chopé cette classe sur internet :
<?php
error_reporting(-1);
class Telnet {
var $sock = NULL;
function telnet($host,$port) {
$this->sock = fsockopen($host,$port);
}
function close() {
if ($this->sock)
fclose($this->sock);
$this->sock = NULL;
}
function write($buffer) {
$buffer = str_replace(chr(255),chr(255).chr(255),$buffer);
fwrite($this->sock,$buffer);
}
function getc() {
return fgetc($this->sock);
}
function read_till($what) {
$buf = '';
while (1) {
$IAC = chr(255);
$DONT = chr(254);
$DO = chr(253);
$WONT = chr(252);
$WILL = chr(251);
$theNULL = chr(0);
$c = $this->getc();
if ($c === false)
return $buf;
if ($c == $theNULL) {
continue;
}
if ($c == "\021") {
continue;
}
if ($c != $IAC) {
$buf .= $c;
if ($what == (substr($buf,strlen($buf)-strlen($what)))) {
return $buf;
} else {
continue;
}
}
$c = $this->getc();
if ($c == $IAC) {
$buf .= $c; } else if (($c $DO) || ($c $DONT)) {
$opt = $this->getc();
fwrite($this->sock,$IAC.$WONT.$opt); } elseif (($c $WILL) || ($c $WONT)) {
$opt = $this->getc();
fwrite($this->sock,$IAC.$DONT.$opt);
} else {
}
}



}
}

$hostname = "mon_host";
$tn = new telnet($hostname,23);
sleep(2);
echo $tn->read_till("word: ");
sleep(2);
//Mot de passe :
$tn->write("***");
sleep(2);
//$tn->write("\r\n");
echo $tn->read_till("> ");
//Pour les 2948G
$tn->write("sh port status\r\n");
//Pour les 3550
$tn->write("sh int status\r\n");
//On met dans $variable le résultat de la commande...
$variable = $tn->read_till("> ");
echo $tn->close();
//On affiche le tout pour l'exemple :
echo $variable;
?>

Voila, si quelqu'un pouvait m'aider

5 réponses

Messages postés
1662
Date d'inscription
lundi 16 septembre 2002
Statut
Membre
Dernière intervention
30 juillet 2008
1
PHP Guru
Écoutez les conseils d'un vieux sage ! Ils sont souvent très utiles.
http://www.lookstrike.com
Messages postés
1662
Date d'inscription
lundi 16 septembre 2002
Statut
Membre
Dernière intervention
30 juillet 2008
1
Un bug... je ne voulais pas envoyer de message ! :P

Mais tu devrais plutot t'informer sur le protocole de ton routeur... peut-etre le mot de passe doit être crypté ...



Bonne chance.

PHP Guru
Écoutez les conseils d'un vieux sage ! Ils sont souvent très utiles.
http://www.lookstrike.com
Messages postés
3
Date d'inscription
vendredi 25 juillet 2003
Statut
Membre
Dernière intervention
18 janvier 2005

Un telnet simple sans passer par php marche...
Je pense à un problème de buffer ou de temporisation, mais la je sèche...
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
42
->et si ton routeur n'accèptait que le ssh et non le telnet ??

In a dream, I saw me, drop dead... U was here, U cried... It was just a deam, if I die, U won't cry, maybe, U'll be happyhttp://coucou747.hopto.org
Messages postés
3
Date d'inscription
vendredi 25 juillet 2003
Statut
Membre
Dernière intervention
18 janvier 2005

Ne vous méprennez pas :) --> un telnet simple (sans passer par PHP) marche parfaitement.
Le problème se situe seulement lorsque j'utilise la classe telnet.