Как использовать fsockopen (), чтобы открыть соединение Telnet с паролем? - PullRequest
1 голос
/ 08 июня 2011

Я хотел бы получить доступ к камере с помощью функции Telnet. Проблема в том, что у него есть защита паролем. Это не проблема при работе через Терминал, так как я просто использую telnet 10.30.blah.blah, а затем при появлении запроса введите свой пароль. Но в php я не вижу возможности ввести пароль.

$con = fsockopen("10.30.blah.blah", 25);
$msg = "camera move left";
fwrite($con, $msg);

У кого-нибудь есть идеи?

ОБНОВЛЕНИЕ : Я пытался просто использовать fputs для вывода пароля, как сказал @Cfreak, но безрезультатно. Если я делаю именно то, что скрипт пытается в терминале, он работает. Вот код сейчас:

$con = fsockopen("10.30.blah.blah", 23, $errno, $errstr, 30);
$pass = "admin";
sleep(5);
fputs($con, $pass);
sleep(5);
$msg = "camera move left";
fputs($con, $msg);

ОБНОВЛЕНИЕ : обнаружил, что мне нужен \r в конце моей переменной $msg. Спасибо за помощь!

Ответы [ 3 ]

1 голос
/ 08 июня 2011

Лучше было бы использовать proc_open для запуска telnet, а не пытаться реализовать собственный стек протоколов (для telnet есть нечто большее, чем просто чтение и запись из сокетов). Действительно, telnet по своей природе небезопасен и его следует избегать, если это вообще возможно. (обычная http-аутентификация без SSL так же плоха).

Однако, в отличие от SMTP или HTTP, это не очень сложный протокол - и он должен быть достаточно простым для реализации простого клиента с использованием сокетов. Код, который вы предоставили, не читает приглашение имени пользователя / пароля и не записывает ответы в сокет - так что либо у вас есть очень странные идеи о том, как войти в систему через telnet, либо фрагмент кода не имеет значения.

Cfreak сказал: «Возможно, вам придется поспать секунду, чтобы убедиться, что приглашение появляется» - это не правильно - вы должны дождаться запроса имени пользователя, пароля и первоначального запроса CLI. перед отправкой ответа с помощью telnet. Действительно, существует целый язык программирования ( ожидаемый ), написанный для обхода такого странного поведения в telnet.

и BTW, telnet работает на порту 23 - порт 25 используется для SMTP

1 голос
/ 08 июня 2011

Вы просто выводите это. Некоторые примеры, которые я видел, используют fputs. Возможно, вам придется поспать секунду, чтобы убедиться, что подсказка появляется. На самом деле в комментариях на странице руководства fsockopen есть пример: http://php.net/manual/en/function.fsockopen.php

Действительно, хотя я бы порекомендовал поискать модуль, который делает это. Быстрый Google показывает, что есть несколько там. Я не хочу рекомендовать конкретный, потому что я не использовал ни одного из них.

0 голосов
/ 08 июня 2011

Здесь есть класс, реализующий логин через telnet: http://www.dali.net.nz/Telnet.class.php.txt

См. Функцию входа в систему ($ username, $ password).

...