Мне нужно написать PHP-скрипт для telnet для маршрутизатора, запустить команду и получить результаты. Кто-нибудь знает библиотеку подключений telnet в PHP?
Обновление: этот запрос (как это очевидно) был давным-давно. В итоге мне пришлось написать клиентскую библиотеку, в которой я нуждался. Код для этой библиотеки (и многих других модулей) является открытым исходным кодом и доступен на github . Спасибо всем за ваши ответы.
используя stdin / 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);
Pear :: Net_Socket: http://pear.php.net/package/Net_Socket Расширьте этот класс для простого PHP-тестера или сеанса phnet.
<?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. испытал его только сейчас.
Существует прекрасный класс, доступный для подключения PHP telnet в Github от Nicholas Hall: https://github.com/ngharo/Random-PHP-Classes/blob/master/Telnet.class.php