подключение по Telnet с использованием PHP - PullRequest
10 голосов
/ 25 мая 2009

Мне нужно написать PHP-скрипт для telnet к роутеру, запустить команду и получить результаты. кто-нибудь знает библиотеку соединений telnet в PHP?

Обновление: Этот запрос (как очевидно) был давно. В конце концов мне пришлось написать клиентскую библиотеку, в которой я нуждался. Код для этой библиотеки (и многих других модулей) имеет открытый исходный код и доступен на github . Спасибо всем за ваши ответы.

Ответы [ 4 ]

4 голосов
/ 14 апреля 2013

использование stdin / stream_select и блокировка потоков дает вам 20-тилетний телнет как клиент

<?

$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);
3 голосов
/ 18 февраля 2013

Груша :: Net_Socket: http://pear.php.net/package/Net_Socket Расширьте этот класс для простого бота или сеанса PHP telnet.

2 голосов
/ 06 ноября 2013

На Github Николаса Холла есть прекрасный класс для подключения через telnet PHP: https://github.com/ngharo/Random-PHP-Classes/blob/master/Telnet.class.php

2 голосов
/ 24 июня 2009
<?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. только что проверил.

...