Telnet zum cisco-switch mit php
Muss ich telnet zum cisco-switch mit php und ausführen show interface status
Befehl und die Ergebnisse erhalten. Ich habe versucht, einige php-Klassen, die ich gefunden über das internet, aber keiner von Ihnen konnte eine Verbindung zum Gerät. Also habe ich versucht, das Skript zu schreiben und mich, aber ich habe das gleiche problem, ich kann eine Verbindung zum Gerät.
Den host sendet mir banner-Nachricht und dann neue Zeile mit username:
.
Ich schicke meinen Benutzernamen mit \r\n
warten Sie einige Zeit und versucht, Daten zu Lesen, aber es sieht für mich wie der Gastgeber ist, einfach zu ignorieren, meine neue-Zeile-Zeichen. Dies ist die Antwort, die ich bekam (explode('\n') auf Antwort):
Array
(
[0] => %
[1] => User Access Verification
[2] => Username: timeout expired!
)
Warum habe ich nicht bekommen Eingabeaufforderung für das Passwort? Ich habe es versucht mit telnet senden Header, und ohne, keine änderung. Kann jemand mir bitte helfen?
Hier ist mein 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);
?>
UPDATE
Wenn ich senden Benutzernamen auf den ersten, und dann habe ich auch gelesen, bekomme ich die Passwortabfrage. Ich verstehe nicht, warum kann ich Erstens das Lesen von Nachrichten vom host und senden Sie dann meine Antwort. So funktioniert es für mich jetzt (Antwort senden und dann Lesen-Eingabeaufforderung) ist kein-Sinn! (und ich habe immer noch "% Authentifizierung ist fehlgeschlagen." message-Ereignis mit dem richtigen Passwort/name).
...
$connected = true;
stream_set_timeout($fw, $timeout);
send_string("name", true);
send_string("password", true);
print_r(read_string());
...
InformationsquelleAutor Buksy | 2012-05-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Okay, also ich weiß nicht, was das problem war, aber nach "einigen" tests, die ich in der Lage war, dies zu schreiben, Klasse, das funktioniert für mich. Ich weiß nicht, warum die anderen telnet-Klassen funktionieren nicht, obwohl Sie so ziemlich das gleiche. Wenn also jemand ähnliche Probleme haben, können Sie versuchen, diese:
PS: meine Geräte Eingabeaufforderung "hostname#", so dass Sie möglicherweise Bearbeiten müssen Login-Funktion, damit dieser code funktioniert mit der Aufforderung euer Gerät (so müssen Sie möglicherweise in GetOutputOf() )
InformationsquelleAutor Buksy