Я хотел бы получить доступ к камере через ее возможности Telnet. Проблема в том, что у нее есть защита паролем. Это не проблема, когда вы делаете это через терминал, так как я просто использую telnet 10.30.blah.blah
затем введите свой пароль при появлении запроса. Но в php я не вижу возможности ввести пароль.
$con = fsockopen("10.30.blah.blah", 25); $msg = "camera move left"; fwrite($con, $msg);
У кого-нибудь есть идеи?
UPDATE : я попробовал просто использовать 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);
UPDATE : нашел, что мне нужно было \r
в конце моей переменной $msg
. Спасибо за помощь!
Вы просто выводите его. Некоторые примеры, которые я видел, используют fputs
. Возможно, вам придется спать на секунду, чтобы убедиться, что приглашение появляется. В комментариях на fsockopen
руководства fsockopen
: http://php.net/manual/en/function.fsockopen.php
На самом деле, хотя я бы рекомендовал искать модуль, который это делает. Быстрое шоу Google показывает, что есть несколько. Я не хочу рекомендовать конкретный, потому что я не использовал ни одного из них.
Было бы лучше использовать proc_open для запуска telnet, а не для реализации собственного стека протоколов (для telnet больше, чем для чтения и записи из сокетов). Действительно, telnet по своей сути небезопасен и его следует избегать, если это вообще возможно. (базовая HTTP-аутентификация без SSL так же плохо).
Однако, в отличие от SMTP или HTTP, это не очень сложный протокол – и довольно просто реализовать простой клиент, используя сокеты. Код, который вы предоставили, не читает приглашение имени пользователя и пароля и не записывает ответы в сокет, поэтому у вас есть некоторые очень странные идеи о том, как войти в систему через telnet или фрагмент кода, не имеет значения.
Cfreak сказал: «Возможно, вам понадобится спать на секунду, чтобы убедиться, что приглашение появилось» – это неверно – вы должны дождаться приглашения имени пользователя, приглашения пароля и начального приглашения CLI перед отправкой ответа с помощью telnet. Действительно, существует целый язык программирования ( ожидание ), написанный для работы с таким нечетным поведением в telnet.
и BTW, telnet работает на порте 23 – порт 25 используется для SMTP
Существует класс, реализующий логин по telnet прямо здесь: http://www.dali.net.nz/Telnet.class.php.txt
См. Функцию login ($ username, $ password).