Фактический TELNET может быть немного трудно получить правильный;существует множество управляющих последовательностей, которые влияют на то, как терминал отображает свое содержимое.
Если вы просто хотите написать сервис, который люди могут использовать через TELNET, то, вероятно, лучше всего использовать существующий сервер TELNET (в Ubuntu доступно несколько пакетов для простого TELNET: inetutils-telnetd
, telnetd
; для зашифрованного TELNET: telnetd-ssl
; для аутентифицированного Kerberos TELNET: heimdal-servers
, krb5-telnetd
.)чтобы обеспечить функциональность TELNET, и установить вашу PHP-программу в качестве оболочки для входа для любого пользователя, для которого вы хотите, чтобы все входили в систему как.(См. passwd(5)
для получения информации о оболочке входа в систему.)
Если вы хотите выполнить все операции с сокетами самостоятельно , то вам необходимо использовать поддержку сокетов BSD; создать сокет , привязать имя сервера к сокету , прослушивать сокет , а когда приходит новое соединение, форкировать новый процессдля обработки нового клиента и примите новое соединение .
Как только у вас будет новый процесс с подключенным клиентом, вы можете использовать стандартные операции чтения и записи для отправки иполучать данные клиенту.Если вы действительно хотите поддерживать полную спецификацию TELNET, потребуется некоторое умное программирование.Если вы не возражаете против того, чтобы не иметь доступа к расширенным функциям терминала (например, предоставляемым readline(3)
, ncurses(3)
или slang
), то вам может понадобиться отбрасывать символы с включенным восьмым битом, чтобы избавиться от TELNET.управляйте персонажами ваших клиентов.(Я не пробовал этого, потому что я всегда использовал инструмент netcat
, когда хотел clean незашифрованное и неаутентифицированное соединение между хостами.)