par
anthony hesnaux » 09 août 2012, 10:58
bonjour je bosse actuelement sur un projet universitaire qui est de recuperer un chaine de carractère d'une requette TELNET en PHP sur un cisco Catalyst 2960 24 ports et Catalyst 5500 series.
voici mon programme.
PHPCiscoTelnet.php
Code : Tout sélectionner
<?php
class PHPCiscoTelnet
{
var $fp=NULL;
var $loginprompt;
var $buffer = array();
var $dump = 0;
var $endPrompt = ">";
/*
0 = success
1 = couldn't open network connection
2 = unknown host
3 = login failed
4 = PHP version too low
*/
function Connect($server,$user,$pass)
{
$rv=0;
//$vers=explode('.',PHP_VERSION);
$needvers=array(4,3,0);
//$j=count($vers);
//$k=count($needvers);
//if ($k<$j) $j=$k;
//for ($i=0;$i<$j;$i++)
//{
// if (($vers[$i]+0)>$needvers[$i]) break;
// if (($vers[$i]+0)<$needvers[$i]) return 4;
//}
// $this->Disconnect();
if (strlen($server))
{
if (preg_match('/[^0-9.]/',$server))
{
$ip=gethostbyname($server);
if ($ip==$server)
{
$ip='';
$rv=2;
}
} else $ip=$server;
} else $ip='127.0.0.1';
if (strlen($ip))
{
if ($this->fp=fsockopen($ip,23))
{
fputs($this->fp,chr(0xFF).chr(0xFB).chr(0x1F).chr(0xFF).chr(0xFB).
chr(0x20).chr(0xFF).chr(0xFB).chr(0x18).chr(0xFF).chr(0xFB).
chr(0x27).chr(0xFF).chr(0xFD).chr(0x01).chr(0xFF).chr(0xFB).
chr(0x03).chr(0xFF).chr(0xFD).chr(0x03).chr(0xFF).chr(0xFC).
chr(0x23).chr(0xFF).chr(0xFC).chr(0x24).chr(0xFF).chr(0xFA).
chr(0x1F).chr(0x00).chr(0x50).chr(0x00).chr(0x18).chr(0xFF).
chr(0xF0).chr(0xFF).chr(0xFA).chr(0x20).chr(0x00).chr(0x33).
chr(0x38).chr(0x34).chr(0x30).chr(0x30).chr(0x2C).chr(0x33).
chr(0x38).chr(0x34).chr(0x30).chr(0x30).chr(0xFF).chr(0xF0).
chr(0xFF).chr(0xFA).chr(0x27).chr(0x00).chr(0xFF).chr(0xF0).
chr(0xFF).chr(0xFA).chr(0x18).chr(0x00).chr(0x58).chr(0x54).
chr(0x45).chr(0x52).chr(0x4D).chr(0xFF).chr(0xF0));
fputs($this->fp,chr(0xFF).chr(0xFC).chr(0x01).chr(0xFF).chr(0xFC).
chr(0x22).chr(0xFF).chr(0xFE).chr(0x05).chr(0xFF).chr(0xFC).chr(0x21));
$this->GetResponse($r);
$r=explode("\n",$r);
$this->loginprompt=$r[count($r)-1];
fputs($this->fp,"$user\r");
fputs($this->fp,"$pass\r");
$this->GetResponse($r);
$r=explode("\n",$r);
/* if (($r[count($r)-1]=='')||($this->loginprompt==$r[count($r)-1])) {
$rv=3;
$this->Disconnect();
}*/
} else $rv=1;
}
$this->GetResponseUntilPrompt($tmp);
return $rv;
}
/*function Disconnect($exit=1)
{
if ($this->fp) {
if ($exit) fputs($this->fp, "\nexit");
fclose($this->fp);
$this->fp=NULL;
}
}*/
function DoCommand($c)
{
if ($this->fp)
{
fputs($this->fp,"$c\n");
$this->GetResponseUntilPrompt($r);
$r=preg_replace("/\r/", "", $r);
$r=preg_replace("/".$c."/", "", $r);
$tab = explode("\n", $r);
$this->buffer = array_slice($tab, 1, count($tab) - 2);
return 1;
}
return 0;
}
function enable($pwd)
{
fputs($this->fp, "enable\n");
fputs($this->fp, $pwd . "\n");
$this->endPrompt="#";
$this->GetResponseUntilPrompt($tmp);
}
function GetResponse(&$r)
{
$r='';
do {
$r.=fread($this->fp,1000);
$s=socket_get_status($this->fp);
} while ($s['unread_bytes']) ;
if ($this->dump)
print $r."\n";
}
function GetResponseUntilPrompt(&$r)
{
$r='';
do
{
$r.=fread($this->fp,10000);
$s=socket_get_status($this->fp);
if (preg_match("/ --More-- /", $r))
{
$r = preg_replace("/ --More-- /", "MORE", $r);
fputs($this->fp, " ");
}
} while (! preg_match("/".$this->endPrompt."$/", $r));
$r=preg_replace("/".chr(8)."/", "", $r);
$r=preg_replace("/MORE /", "", $r);
if ($this->dump)
print $r."\n";
}
function display()
{
$out='';
foreach ($this->buffer as $line)
{
$out.= $line."\n\n";
}
return $out;
}
}
?>
et la page de test
test.php
Code : Tout sélectionner
<?php
include ("PHPCiscoTelnet.php");
$telnet = new PHPCiscoTelnet();
$result = $telnet->Connect('IP SWITCH, '', 'PASSWORD_1_ER_NIVEAU');
switch ($result)
{
case 0:
$telnet->DoCommand("show mac-address-table");
$string = $telnet->display();
$telnet->enable('$ijc-fjc');
$telnet->DoCommand("show mac-address-table");
$telnet->Disconnect();
$telnet->display();
break;
case 1:
echo '[PHP Telnet] Connect failed: Unable to open network connection';
break;
case 2:
echo '[PHP Telnet] Connect failed: Unknown host';
break;
case 3:
echo '[PHP Telnet] Connect failed: Login failed';
break;
case 4:
echo '[PHP Telnet] Connect failed: Your PHP version does not support PHP Telnet';
break;
}
echo" la chaine EST: ";
echo"<br/>";
echo $string;
echo"<br/>";
echo"<br/>";
?>
alors voila pour les IOS j'ai bien un affichage de la requete "show mac-address-table"
mais quand je passe sur un CATOS comme le Catalyst 5500 avec la requete "show cam dynamic"
la je n'ai rien qui s'affiche
pouvez vous m'aider????
merci d'avance
bonjour je bosse actuelement sur un projet universitaire qui est de recuperer un chaine de carractère d'une requette TELNET en PHP sur un cisco Catalyst 2960 24 ports et Catalyst 5500 series.
voici mon programme.
PHPCiscoTelnet.php
[code]<?php
class PHPCiscoTelnet
{
var $fp=NULL;
var $loginprompt;
var $buffer = array();
var $dump = 0;
var $endPrompt = ">";
/*
0 = success
1 = couldn't open network connection
2 = unknown host
3 = login failed
4 = PHP version too low
*/
function Connect($server,$user,$pass)
{
$rv=0;
//$vers=explode('.',PHP_VERSION);
$needvers=array(4,3,0);
//$j=count($vers);
//$k=count($needvers);
//if ($k<$j) $j=$k;
//for ($i=0;$i<$j;$i++)
//{
// if (($vers[$i]+0)>$needvers[$i]) break;
// if (($vers[$i]+0)<$needvers[$i]) return 4;
//}
// $this->Disconnect();
if (strlen($server))
{
if (preg_match('/[^0-9.]/',$server))
{
$ip=gethostbyname($server);
if ($ip==$server)
{
$ip='';
$rv=2;
}
} else $ip=$server;
} else $ip='127.0.0.1';
if (strlen($ip))
{
if ($this->fp=fsockopen($ip,23))
{
fputs($this->fp,chr(0xFF).chr(0xFB).chr(0x1F).chr(0xFF).chr(0xFB).
chr(0x20).chr(0xFF).chr(0xFB).chr(0x18).chr(0xFF).chr(0xFB).
chr(0x27).chr(0xFF).chr(0xFD).chr(0x01).chr(0xFF).chr(0xFB).
chr(0x03).chr(0xFF).chr(0xFD).chr(0x03).chr(0xFF).chr(0xFC).
chr(0x23).chr(0xFF).chr(0xFC).chr(0x24).chr(0xFF).chr(0xFA).
chr(0x1F).chr(0x00).chr(0x50).chr(0x00).chr(0x18).chr(0xFF).
chr(0xF0).chr(0xFF).chr(0xFA).chr(0x20).chr(0x00).chr(0x33).
chr(0x38).chr(0x34).chr(0x30).chr(0x30).chr(0x2C).chr(0x33).
chr(0x38).chr(0x34).chr(0x30).chr(0x30).chr(0xFF).chr(0xF0).
chr(0xFF).chr(0xFA).chr(0x27).chr(0x00).chr(0xFF).chr(0xF0).
chr(0xFF).chr(0xFA).chr(0x18).chr(0x00).chr(0x58).chr(0x54).
chr(0x45).chr(0x52).chr(0x4D).chr(0xFF).chr(0xF0));
fputs($this->fp,chr(0xFF).chr(0xFC).chr(0x01).chr(0xFF).chr(0xFC).
chr(0x22).chr(0xFF).chr(0xFE).chr(0x05).chr(0xFF).chr(0xFC).chr(0x21));
$this->GetResponse($r);
$r=explode("\n",$r);
$this->loginprompt=$r[count($r)-1];
fputs($this->fp,"$user\r");
fputs($this->fp,"$pass\r");
$this->GetResponse($r);
$r=explode("\n",$r);
/* if (($r[count($r)-1]=='')||($this->loginprompt==$r[count($r)-1])) {
$rv=3;
$this->Disconnect();
}*/
} else $rv=1;
}
$this->GetResponseUntilPrompt($tmp);
return $rv;
}
/*function Disconnect($exit=1)
{
if ($this->fp) {
if ($exit) fputs($this->fp, "\nexit");
fclose($this->fp);
$this->fp=NULL;
}
}*/
function DoCommand($c)
{
if ($this->fp)
{
fputs($this->fp,"$c\n");
$this->GetResponseUntilPrompt($r);
$r=preg_replace("/\r/", "", $r);
$r=preg_replace("/".$c."/", "", $r);
$tab = explode("\n", $r);
$this->buffer = array_slice($tab, 1, count($tab) - 2);
return 1;
}
return 0;
}
function enable($pwd)
{
fputs($this->fp, "enable\n");
fputs($this->fp, $pwd . "\n");
$this->endPrompt="#";
$this->GetResponseUntilPrompt($tmp);
}
function GetResponse(&$r)
{
$r='';
do {
$r.=fread($this->fp,1000);
$s=socket_get_status($this->fp);
} while ($s['unread_bytes']) ;
if ($this->dump)
print $r."\n";
}
function GetResponseUntilPrompt(&$r)
{
$r='';
do
{
$r.=fread($this->fp,10000);
$s=socket_get_status($this->fp);
if (preg_match("/ --More-- /", $r))
{
$r = preg_replace("/ --More-- /", "MORE", $r);
fputs($this->fp, " ");
}
} while (! preg_match("/".$this->endPrompt."$/", $r));
$r=preg_replace("/".chr(8)."/", "", $r);
$r=preg_replace("/MORE /", "", $r);
if ($this->dump)
print $r."\n";
}
function display()
{
$out='';
foreach ($this->buffer as $line)
{
$out.= $line."\n\n";
}
return $out;
}
}
?>
[/code]
et la page de test
test.php
[code]
<?php
include ("PHPCiscoTelnet.php");
$telnet = new PHPCiscoTelnet();
$result = $telnet->Connect('IP SWITCH, '', 'PASSWORD_1_ER_NIVEAU');
switch ($result)
{
case 0:
$telnet->DoCommand("show mac-address-table");
$string = $telnet->display();
$telnet->enable('$ijc-fjc');
$telnet->DoCommand("show mac-address-table");
$telnet->Disconnect();
$telnet->display();
break;
case 1:
echo '[PHP Telnet] Connect failed: Unable to open network connection';
break;
case 2:
echo '[PHP Telnet] Connect failed: Unknown host';
break;
case 3:
echo '[PHP Telnet] Connect failed: Login failed';
break;
case 4:
echo '[PHP Telnet] Connect failed: Your PHP version does not support PHP Telnet';
break;
}
echo" la chaine EST: ";
echo"<br/>";
echo $string;
echo"<br/>";
echo"<br/>";
?>
[/code]
alors voila pour les IOS j'ai bien un affichage de la requete "show mac-address-table"
mais quand je passe sur un CATOS comme le Catalyst 5500 avec la requete "show cam dynamic"
la je n'ai rien qui s'affiche
pouvez vous m'aider????
merci d'avance