#php #shell #console #telnet
#php #оболочка #консоль #telnet
Вопрос:
У меня есть проект, который нужно выполнить, и он выглядит следующим образом:
Когда вы открываете консоль telnet и telnet на мой сервер, PHP должен ответить: «Здравствуйте, как вас зовут?»
И вы вводите свое имя и так далее. Как я могу сделать это на PHP? Возможно ли это вообще?
Комментарии:
1. php нет, с оболочкой, да. не стоит позволять людям обращаться к вашему серверу за чем-то тривиальным, почему бы не создать веб-сайт для «этого»?
2. Вы имеете в виду команду shell ()?
3. нет, я имею в виду оболочку tenet, которую вы, вероятно, не должны использовать в любом случае
4. Не вижу, я на x10hosting. Не моя собственная машина. Я использую его как проект для чего-то важного позже.
5. затем я бы вошел в систему и набрал ‘rm -r’, я не думаю, что вы понимаете последствия того, что вы спрашиваете. что плохого в создании веб-страницы формы приложения для этого?
Ответ №1:
См . http://php.net/manual/en/book.sockets.php
Это хороший учебник, который поможет вам начать. http://devzone.zend.com/article/1086
И Google здесь тоже ваш друг: http://www.google.ca/search?q=php socket server
Комментарии:
1. Можете ли вы привести мне пример? Я не уверен, как это использовать.
Ответ №2:
Фактический TELNET может быть немного сложным для корректной настройки; существует множество управляющих последовательностей, которые используются для влияния на то, как терминал отображает его содержимое.
Если вы просто хотите написать службу, которую люди могут использовать через TELNET, то, вероятно, лучше всего использовать существующий сервер TELNET (в Ubuntu доступно несколько пакетов: для простого TELNET: inetutils-telnetd
telnetd
, для зашифрованного TELNET: telnetd-ssl
, для TELNET с аутентификацией Kerberos: heimdal-servers
, krb5-telnetd
.) для обеспечения функциональности TELNET иустановите вашу PHP-программу в качестве оболочки входа для любого пользователя, от имени которого вы хотите, чтобы все входили в систему. (См passwd(5)
. Информацию о оболочке входа в систему.)
Если вы хотите выполнять все операции с сокетами самостоятельно, вам нужно будет использовать поддержку сокетов BSD; создайте сокет, привяжите имя сервера к сокету, прослушайте сокет, а когда появится новое соединение, запустите новый процесс для обработки нового клиента и примитеновое соединение.
Как только у вас появится новый процесс с подключенным клиентом, вы можете использовать стандартные операции чтения и записи для отправки и получения данных клиенту. Если вы действительно хотите поддерживать полную спецификацию TELNET, потребуется некоторое умное программирование. Если вы не возражаете против отсутствия доступа к расширенным функциям терминала (например, предоставляемым readline(3)
, ncurses(3)
, или slang
), то вам может потребоваться удалить символы с включенным восьмым битом, чтобы избавиться от управляющих символов TELNET у ваших клиентов. (Я не пробовал это, потому что я всегда использовал netcat
инструмент, когда хотел чистое незашифрованное и неаутентифицированное соединение между хостами.)
Комментарии:
1. Обратите внимание, что «fork a new process» не является строго необходимым, но это значительно упрощает обработку нескольких подключенных клиентов.