2009-05-25 102 views
9

我需要编写一个PHP脚本来telnet到路由器,运行命令并获取结果。有谁知道PHP中的telnet连接库吗?使用PHP的telnet连接

更新:这个要求(很明显)是很久以前的。最后,我不得不编写我需要的客户端库。该库(以及更多模块)的代码是开源的,可在github上找到。 感谢大家的回答。

+0

为什么缺少用户名和密码选项? – dbndhjefj 2015-01-16 19:09:24

回答

2
<?php 

$file = 'somefile.txt'; 
$remote_file = 'readme.txt'; 
// set up basic connection 
$ftp_server = '127.0.0.1'; 
$ftp_user_name = 'Till'; 
$ftp_user_pass = 'Kcp05'; 
$conn_id = ftp_connect($ftp_server); 
// login with username and password 
ftp_login($conn_id, $ftp_user_name, $ftp_user_pass); 
// upload a file 
ftp_nb_put($conn_id, $remote_file, $file, FTP_ASCII); 
// close the connection 
echo "$file sent to $ftp_server as $remote_file\n<br/>"; 
ftp_close($conn_id); 


// finished copying the input.dat to the till now, just need to execute the print command. 
// That will copy somefile.txt in the same folder as this .php file to the ftp server root dir. 


$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(0x58).chr(0x54).chr(0x45).chr(0x52).chr(0x4D).chr(0xFF).chr(0xF0); 

$fp=pfsockopen("127.0.0.1",23); 

echo "Telnet session opening ..."; 

sleep(4); 

fputs($fp,$header1); 
sleep(4); 

fputs($fp,"Till\r"); 
sleep(2); 
fputs($fp,"Kcp05\r"); 

sleep(2); 
fputs($fp,"notepad\r"); 

sleep(3); 

echo "Telnet session closing ..."; 

fclose($fp); 

?> 

为我工作。第一部分将ftp文件上传到服务器,第二部分将挂载到telnet服务器上,然后执行一个程序,该程序可以使用您刚刚通过ftp上传的文件。刚刚测试过。

+0

你能详细说明$ header1字符串吗?这是否会发送某种类型的Telnet协议配置命令,或者我对你的例子看得太过分了? – dctucker 2013-06-17 14:16:29

4

使用标准输入/ stream_select &堵流为您提供了20条线的telnet类似客户

<? 

$socket = fsockopen("192.168.52.1", 8000); 

if(!$socket)return; 
stream_set_blocking($socket, 0); 
stream_set_blocking(STDIN, 0); 

do { 
    echo "$ "; 
    $read = array($socket, STDIN); $write = NULL; $except = NULL; 

    if(!is_resource($socket)) return; 
    $num_changed_streams = @stream_select($read, $write, $except, null); 
    if(feof($socket)) return ; 


    if($num_changed_streams === 0) continue; 
    if (false === $num_changed_streams) { 
     /* Error handling */ 
    var_dump($read); 
    echo "Continue\n"; 
    die; 
    } elseif ($num_changed_streams > 0) { 
    echo "\r"; 
    $data = fread($socket, 4096); 
    if($data !== "") 
     echo "<<< $data"; 

    $data2 = fread(STDIN, 4096); 

    if($data2 !== "") { 
     echo ">>> $data2"; 
     fwrite($socket, trim($data2)); 
    } 
    } 

} while(true);