";
echo STARTTIME - time();
echo "";
}
function readBuffer($telnet) {
$str = "";
while(true) {
$result = fgets($telnet,2);
if(ord($result) != 8) //backspace
$str .= $result;
// $lasttowChars = $str[strlen($str)-2].$str[strlen($str)-1];
if(substr($str,-8) == "--More--" /*&& preg_match("/[\-]{2}More[\-]{2}/i",$str)*/ ) {
$str = preg_replace("/[\-]{2}More[\-]{2}/i","",$str);
fputs($telnet," ");
//$result = fgets($telnet, 2);
//if(ord($result) != 8) //backspace
// $str .= $result;
}
if( ($result == "#" || $result == ">" || $result == ":") &&preg_match("/[a-z0-9_\(\)\-]+[#>]$/i",$str) || preg_match("/Password:\s$/i",$str))
break;
}
//$str = preg_replace("/([^a-zA-Z0-9\.#<>=\-_!\s\n()%\/,:])/ei","ord('\\1').' '",$str);
return $str;
}
function sendCommand($telnet,$c) {
fputs($telnet,"{$c}\r\n");
return readBuffer($telnet);
}
set_time_limit ( 30 );
function login($telnet,$username,$password) {
$response = readBuffer($telnet);
if($username != null)
fputs($telnet,"{$username}\r\n");
fputs($telnet,"{$password}\r\n");
//sleep("5");
$response .= readBuffer($telnet);
if(preg_match("/[a-z0-9_\(\)\-]+>$/i",$response) ) { // user mode
$response .= sendCommand($telnet,"en");
$response .= sendCommand($telnet,$password);
}
debug($response);
//exit;
preg_match("/[a-z0-9_\(\)\-]+[#>]$/i",$response,$out);
return str_replace("#","",$out[0]);
}
function fullname($shortname) {
switch($shortname) {
case "fa":
return "FastEthernet";
case "gi":
return "GigabitEthernet";
}
return $shortname;
}
function findMAC($switch,$mac) {
//$mac = "0001.6c8f.2e81";
$telnet = fsockopen($switch,"23",$errno,$errstr,60*30);
$hostname = login($telnet,null,"PASSWORD");
$result = sendCommand($telnet,"sh mac-address-table | include ".$mac);
debug($result);
preg_match("/\s([A-Z]+([0-9]+\/)+[0-9]+)\s/i",$result,$out);
$interface = $out[1];
$interface = preg_replace("/^([a-z]{2})([0-9])/ie","fullname(strtolower('\\1')).'\\2'",$interface);
execTime();
$result = sendCommand($telnet,"sh cdp ne de");
execTime();
debug($result);
// get all neighbors
$deviceid = "\sDevice\sID:\s+?([a-z0-9_\(\)\-]+)";
$ipaddress = "IP\saddress:\s+?([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)";
$port = "Interface:\s+?([A-Z]+([0-9]+\/)+[0-9]+)";
$neighbors_count = preg_match_all("/{$deviceid}(.|\s)*?{$ipaddress}(.|\s)*?{$port}/i",$result,$out);
// $neighbors_count = preg_match_all("/\sDevice\sID:\s+?([a-z0-9_\(\)\-]+)(.|\s)*?IP\saddress:\s+?([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)(.|\s)*?Interface:\s+?([A-Z]+([0-9]+\/)+[0-9]+)/i",$result,$out);
//var_dump($out);
for($i=0;$i<$neighbors_count;$i++) {
if(strcasecmp ($out[5][$i],$interface) == 0) {
echo "Device ID: ".$hostname."
";
echo "IP Address: ".$switch."
";
echo "Interface: ".$interface."
";
echo "Next Device: ".$out[1][$i]."