2017-09-29 126 views
2

我试图在网络中访问Cisco路由器,但使用phpseclib库phpseclib与路由器

$login = "guest"; 
$pw = "123456"; 
$ssh = new Net_SSH2("11.222.333.44"); 
if(!$ssh->login($login, $pw)){ exit("FAILED !!!!")} 
//That I am connected to the network 

$ssh->exec("telnet 555.66.77.8"); 
//Now I need to connect to the telnet router using the same network login and password 

echo $ssh->exec("$login"); 
$ssh->exec('cd /'); 
echo $ssh->exec("$pw"); 

echo $ssh->getLog(); 

已经尝试过,我没有得到它的SSH2和telnet命令:

echo $ssh->exec("$login"); 
$ssh->exec('cd /'); 
echo $ssh->exec("$pw"); 

echo $ssh->exec("$login"); 
$ssh->exec('\n'); 
echo $ssh->exec("$pw"); 

$ssh->read(Username:'); 
echo $ssh->write($login.'\r'); 
$ssh->read('Password:'); 
echo $ssh->write($pw.'\r'); 

我没有成功,想帮助,请遵循日志:

<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0936, network: 0.0936s) 
00000000 00:00:00:00:00:00:00:0c:0d:0a:55:73:65:72:6e:61 ..........Userna 
00000010 6d:65:3a:20          me: 

<- NET_SSH2_MSG_CHANNEL_DATA (since last: 30.6541, network: 30.6541s) 
00000000 00:00:00:00:00:00:00:1f:0d:0a:25:20:55:73:65:72 ..........% User 
00000010 6e:61:6d:65:3a:20:20:74:69:6d:65:6f:75:74:20:65 name: timeout e 
00000020 78:70:69:72:65:64:21        xpired! 

<- NET_SSH2_MSG_CHANNEL_REQUEST (since last: 2.0904, network: 2.0904s) 
00000000 00:00:00:00:00:00:00:0b:65:78:69:74:2d:73:74:61 ........exit-sta 
00000010 74:75:73:00:00:00:00:01       tus..... 

-> NET_SSH2_MSG_CHANNEL_EOF (since last: 0, network: 0s) 
00000000 00:00:00:00          .... 

-> NET_SSH2_MSG_CHANNEL_CLOSE (since last: 0, network: 0s) 
00000000 00:00:00:00          .... 

<- NET_SSH2_MSG_CHANNEL_EXTENDED_DATA (since last: 0, network: 0s) 
00000000 00:00:00:00:00:00:00:01:00:00:00:24:43:6f:6e:6e ...........$Conn 
00000010 65:63:74:69:6f:6e:20:63:6c:6f:73:65:64:20:62:79 ection closed by 
00000020 20:66:6f:72:65:69:67:6e:20:68:6f:73:74:2e:0d:0a foreign host... 

<- NET_SSH2_MSG_CHANNEL_EOF (since last: 0, network: 0s) 
00000000 00:00:00:00          .... 

<- NET_SSH2_MSG_CHANNEL_CLOSE (since last: 0, network: 0s) 
00000000 00:00:00:00          .... 

-> NET_SSH2_MSG_CHANNEL_OPEN (since last: 0, network: 0s) 
00000000 00:00:00:07:73:65:73:73:69:6f:6e:00:00:00:01:7f ....session..... 
00000010 ff:ff:ff:00:00:40:00        [email protected] 

<- NET_SSH2_MSG_CHANNEL_OPEN_CONFIRMATION (since last: 0.0624, network: 0.0624s) 
00000000 00:00:00:01:00:00:00:01:00:00:00:00:00:00:80:00 ................ 

-> NET_SSH2_MSG_CHANNEL_REQUEST (since last: 0, network: 0s) 
00000000 00:00:00:01:00:00:00:07:70:74:79:2d:72:65:71:01 ........pty-req. 
00000010 00:00:00:05:76:74:31:30:30:00:00:00:50:00:00:00 ....vt100...P... 
00000020 18:00:00:00:00:00:00:00:00:00:00:00:01:00  .............. 

<- NET_SSH2_MSG_CHANNEL_SUCCESS (since last: 0.0156, network: 0.0156s) 
00000000 00:00:00:01          .... 

-> NET_SSH2_MSG_CHANNEL_REQUEST (since last: 0, network: 0s) 
00000000 00:00:00:01:00:00:00:05:73:68:65:6c:6c:01  ........shell. 

<- NET_SSH2_MSG_CHANNEL_WINDOW_ADJUST (since last: 0.0156, network: 0.0156s) 
00000000 00:00:00:01:00:20:00:00       ..... .. 

<- NET_SSH2_MSG_CHANNEL_SUCCESS (since last: 0, network: 0s) 
00000000 00:00:00:01          .... 

-> NET_SSH2_MSG_CHANNEL_DATA (since last: 0, network: 0s) 
00000000 00:00:00:01:00:00:00:09:6f:69:33:33:34:34:30:36 ........bss1991 
00000010 0a            . 

回答

1

你提供4X不同的代码段,这不是显而易见你用哪一个产生的日志文件。

代替知道我说的做这样的事情:

$login = "guest"; 
$pw = "123456"; 
$ssh = new Net_SSH2("11.222.333.44"); 
if(!$ssh->login($login, $pw)){ exit("FAILED !!!!")} 
//That I am connected to the network 

$ssh->read('[ssh prompt]'); 
$ssh->write("telnet 555.66.77.8\n"); 
//Now I need to connect to the telnet router using the same network login and password 

$ssh->read('Username:'); 
$ssh->write("$login\n"); 
$ssh->read('Password:'); 
$ssh->write("$pw\n"); 
echo $ssh->read(); 

在你最后的代码片断中,你正在做\r - 不\n。我想这是sometimes necessary,但我敢打赌,\n将是你想使用的时间。

你的日志是因为这个有点古怪:

<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0936, network: 0.0936s) 
00000000 00:00:00:00:00:00:00:0c:0d:0a:55:73:65:72:6e:61 ..........Userna 
00000010 6d:65:3a:20          me: 

<- NET_SSH2_MSG_CHANNEL_DATA (since last: 30.6541, network: 30.6541s) 
00000000 00:00:00:00:00:00:00:1f:0d:0a:25:20:55:73:65:72 ..........% User 
00000010 6e:61:6d:65:3a:20:20:74:69:6d:65:6f:75:74:20:65 name: timeout e 
00000020 78:70:69:72:65:64:21        xpired! 

这就像你得到“用户名:”回来,但你希望别的东西所以它需要30秒的下一条消息是发送。在你的第四个代码片段中,你正在做$ssh->read(Username:');(我注意到它有一个语法错误)。如果我正确地推断了你的完整代码可能在做什么,但是它似乎不是来自你的日志,我希望能够立即返回,这使我认为我的推断可能不完全正确。

+0

随着代码会更清晰?感谢收听 ! – user8540723

+0

'include(str_replace(“\\”,“/”,__DIR__)。/phpseclib/Net/SSH2.php'); define('NET_SSH2_LOGGING',NET_SSH2_LOG_COMPLEX); $ login = strtolower(“Bss182”); $ pw = strtolower(“pw1dEfalt”); ($ login,$ pw){ $ ssh = new Net_SSH2(“000.111.22.3”); if(!$ ssh-> login($ login,$ pw)){exit(“FAILED !!”); } $ ssh-> exec(“telnet 200.100.200.200”); echo $ ssh-> read(“Usernme:”); $ ssh-> write(“$ login”。'\ n'); echo $ ssh-> read(“Password:”); $ ssh-> write(“$ pw”。'\ n'); echo $ ssh-> getLog(); } $ conn = elementlan($ login,$ pw);' – user8540723

+0

@ user8540723 - 如果你将它添加到你的orig post但是因为你没有......'$ ssh-> exec(“ telnet 200.100.200.200“);''我认为用'$ ssh-> write(”telnet 200.100.200.200 \ n“);''会更好。或者''ssh-> enablePTY(); $ ssh-> exec(“telnet 200.100.200.200”);'。 – neubert