J'ai besoin de telnet à Cisco commutateur en utilisant php et exécuter show interface status
commande et obtenir des résultats. J'ai essayé quelques classes php trouvées sur internet mais aucune d'entre elles ne pouvait se connecter à un périphérique. J'ai donc essayé d'écrire le script moi-même, mais j'ai le même problème, je ne peux pas me connecter à l'appareil.Telnet à Cisco passer en utilisant php
L'hôte envoie un message de bannière, puis une nouvelle ligne avec username:
. J'envoie mon nom d'utilisateur avec \r\n
, attendez un certain temps et essaie de lire les données, mais il me semble que l'hôte ignore simplement mes nouveaux caractères de ligne. C'est la réponse que je suis arrivé (explode ('\ n') sur la réponse):
Array
(
[0] => %
[1] => User Access Verification
[2] => Username: timeout expired!
)
Pourquoi ne pas que je RECEVEZ mot de passe? Je l'ai essayé avec l'envoi d'en-têtes telnet, et sans, pas de changement. Est-ce que quelqu'un peut m'aider s'il vous plait?
Voici mon code
<?
$host = "switchName";
$name = "name";
$pass = "pass";
$port = 23;
$timeOut = 15;
$connected = false;
$skipNullLines = true;
$timeout = 125000;
$header1=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(0x41).chr(0x4E).chr(0x53).chr(0x49).chr(0xFF).chr(0xF0);
$header2=chr(0xFF).chr(0xFC).chr(0x01).chr(0xFF).chr(0xFC).chr(0x22).chr(0xFF).chr(0xFE).chr(0x05).chr(0xFF).chr(0xFC).chr(0x21);
function read_string()
{
global $fw,$host,$skipNullLines;
$string = "";
while(!feof($fw))
{
$read = fgets($fw);
$string .= $read;
// Probably prompt, stop reading
if(strpos($read, ':') !== FALSE || strpos($read, '> (enable)') !== FALSE || strpos($read, $host.'#') !== FALSE)
{ break; }
}
$string = explode("\n", $string);
// Get rid of null lines
$ret = array();
for($i = 0; $i<count($string); $i++)
{
if(trim($string[$i]) == '' && $skipNullLines) continue;
$ret[] = $string[$i];
}
return $ret;
}
function send_string($string, $force=false)
{
GLOBAL $timeout,$fw;
$string = trim($string);
// execute only strings that are preceded by "show" (if not forced)
if(!$force && strpos($string, 'show ') !== 0)
{
return 1;
}
fputs($fw, $string."\r\n");
echo("SEND:".$string."\r\n");
usleep($timeout);
}
$fw = fsockopen($host, $port, $errno, $errorstr, $timeOut);
if($fw == false)
{
echo("Cant connect");
}
else
{
echo("Connected<br>");
$connected = true;
stream_set_timeout($fw, $timeout);
// fputs($fw, $header1);
// usleep($timeout);
// fputs($fw, $header2);
// usleep($timeout);
print_r(read_string());
send_string("test", true);
print_r(read_string());
}
fclose($fw);
?>
MISE À JOUR Si je vous envoie le nom d'utilisateur d'abord, puis je lis, je reçois l'invite de mot de passe. Je ne comprends pas, pourquoi je ne peux pas lire d'abord les messages de l'hôte, puis envoyer ma réponse. La façon dont cela fonctionne pour moi maintenant (envoyer la réponse, puis lire pour invite) est aucun sens! (et j'ai toujours l'événement de message "% Authentication failed." avec le mot de passe/nom de droite).
...
$connected = true;
stream_set_timeout($fw, $timeout);
send_string("name", true);
send_string("password", true);
print_r(read_string());
...