Telnet

TELNET ( от ) — сетевой протокол для реализации текстового терминального интерфейса по сети (в современной форме — при помощи транспорта TCP). Название «telnet» имеют также некоторые утилиты, реализующие клиентскую часть протокола. Современный стандарт протокола описан в RFC 854.

Выполняет функции протокола прикладного уровня модели OSI. Протокол telnet использовался для удалённого администрирования различными сетевыми устройствами и программными серверами, но уступил SSH из-за безопасности. Тем не менее может являться единственной возможностью взаимодействовать через cli со встраиваемыми системами, например, с маршрутизаторами, так как на них отсутствует ssh.

Введение 
Назначение протокола TELNET — в предоставлении достаточно общего двунаправленного восьмибитного байт-ориентированного средства связи. Его основная задача заключается в том, чтобы позволить терминальным устройствам и терминальным процессам взаимодействовать друг с другом. Предполагается, что этот протокол может быть использован для связи вида терминал-терминал («связывание») или для связи процесс-процесс («распределенные вычисления»).

Устройство 
Хотя в сессии Telnet выделяют клиентскую и серверную стороны, протокол на самом деле полностью симметричен. После установления транспортного соединения (как правило, TCP) оба его конца играют роль «сетевых виртуальных терминалов» (, NVT), обменивающихся двумя типами данных:
 Прикладными данными (то есть данными, которые идут от пользователя к текстовому приложению на стороне сервера и обратно);
 Командами протокола Telnet, частным случаем которых являются опции, служащие для уяснения возможностей и предпочтений сторон.
Хотя Telnet-сессии, выполняющейся по TCP, свойственен полный дуплекс, NVT должен рассматриваться как полудуплексное устройство, работающее по умолчанию в буферизированном строковом режиме.

Прикладные данные проходят через протокол без изменений, то есть на выходе второго виртуального терминала мы видим именно то, что было введено на вход первого. С точки зрения протокола данные представляют просто последовательность байтов (октетов), по умолчанию принадлежащих набору ASCII, но при включённой опции Binary — любых.
Хотя были предложены расширения для идентификации набора символов, на практике ими не пользуются.

Все значения октетов прикладных данных, кроме 0xFF (десятичное: 255), передаются по транспорту как есть. Значение 0xFF передаётся последовательностью из двух октетов 0xFF. Это связано с тем, что октет 0xFF используется на транспортном уровне для кодирования опций.

Опции 
Протокол предоставляет по умолчанию минимальную функциональность и набор расширяющих её опций. Принцип оговорённых опций требует проводить переговоры при включении каждой из опций. Одна сторона инициирует запрос, а другая сторона может либо принять, либо отвергнуть предложение. Если запрос принимается, то опция немедленно вступает в силу. Опции описаны отдельно от протокола как такового, и их поддержка программным обеспечением произвольна. Клиенту протокола (сетевому терминалу) предписывается отвергать запросы на включение неподдерживаемых и неизвестных опций.

Принтер и клавиатура NVT 
Принтер NVT имеет неопределённую ширину каретки и длину страницы и должен иметь представление всех 95 печатных символов US-ASCII (коды с 32 по 126). Управляющие символы имеют следующие значения:

Поддержка действия символов, помеченных как *, обязательна. Прочие могут производить заданное действие или не производить никакого; одна сторона не обязана предполагать ничего определённого о поддержке конкретных необязательных управляющих символов другой стороной.

Последовательность «CR LF» должна обрабатываться как единый символ перевода строки и использоваться всякий раз, когда требуется их объединённое действие; последовательность «CR NUL» должна использоваться, где требуется только возврат каретки; использования символа CR следует избегать в других контекстах.

Структура команд Telnet 
Каждая команда TELNET является многобайтовой последовательностью, начинающейся с кода 0xFF (десятичное: 255) «Interpret as Command» (IAC) и кода команды. Команды, отвечающие за договорённости по опции, являются трёхбайтовыми последовательностями, где третий байт является кодом опции. Нижеперечисленные коды и кодовые последовательности имеют соответственный смысл, только когда следуют сразу за IAC.

Применения 
Исторически Telnet служил для удалённого доступа к интерфейсу командной строки операционных систем. Впоследствии его стали использовать для прочих текстовых интерфейсов, вплоть до игр MUD и анимированного ASCII-art. Теоретически даже обе стороны протокола могут являться не только людьми, но и программами.

Иногда клиенты telnet используются для доступа к другим протоколам на основе транспорта TCP, см. Telnet и другие протоколы.

Протокол telnet используется в управляющем соединении FTP, то есть заходить на сервер командой telnet ftp.example.net ftp для выполнения отладки и экспериментов не только возможно, но и правильно (в отличие от применения клиентов telnet для доступа к HTTP, IRC и большинству других протоколов).

Telnet, наряду с HTTP, является основным протоколом для удалённой работы с сетевым оборудованием (управляемые коммутаторы и маршрутизаторы) и, в отличие от веб-интерфейса, предоставляет полный доступ к функциональным возможностям устройства, но при этом требует от специалиста навыков работы с командной строкой.

Безопасность 
В протоколе не предусмотрено использование ни шифрования, ни проверки подлинности данных. Поэтому он уязвим для любого вида атак, к которым уязвим его транспорт, то есть протокол TCP. Для функциональности удалённого доступа к системе в настоящее время применяется сетевой протокол SSH (особенно его версия 2), при создании которого упор делался именно на вопросы безопасности. Так что следует иметь в виду, что сессия Telnet весьма беззащитна, если только не осуществляется в полностью контролируемой сети или с применением защиты на сетевом уровне (различные реализации виртуальных частных сетей). По причине ненадёжности от Telnet как средства управления операционными системами давно отказались.

Telnet и другие протоколы 
В среде специалистов по технологиям Интернета клиент Telnet иногда используется для осуществления ручного доступа (например, в целях отладки) к таким протоколам прикладного уровня, как HTTP, IRC, SMTP, POP3 и прочим текст-ориентированным протоколам на основе транспорта TCP.
Однако использование клиента telnet в качестве клиента TCP может вызывать следующие нежелательные эффекты:
 Клиент может передать данные, которые вы не вводили (опции Telnet);
 Клиент не будет принимать октет 0xFF;
 Клиент будет искажать октет 0xFF при передаче;
 Клиент вообще может отказаться передавать октеты со старшим битом 1.

Такие программы, как netcat, действительно обеспечивают чистый доступ к TCP, однако требуются специальные ухищрения (как-то stty -icrnl на UNIX-системе) для передачи перевода строки как CR LF (что требуется многими протоколами). Обычно клиент Telnet по умолчанию передаёт любой перевод строки как CR LF, независимо от его кодирования в системе клиента.
Также для отладочного доступа к прикладным протоколам (кроме FTP и, собственно, Telnet) можно использовать клиент PuTTY в режиме «Raw» (чистый доступ к TCP) — PuTTY преобразует переводы строки отдельно от поддержки протокола Telnet.

Ссылки 
 RFC 854 TELNET protocol specification
 RFC 855 TELNET option specifications
 RFC 856 TELNET binary transmission
 RFC 857 TELNET echo option
 RFC 858 TELNET suppress Go Ahead option
 RFC 859 TELNET status option
 RFC 860 TELNET timing mark option
 RFC 861 TELNET extended options — list option
 RFC 885 Telnet end of record option
 RFC 1041 Telnet 3270 regime option
 RFC 1073 Telnet Window Size Option
 RFC 1079 Telnet terminal speed option
 RFC 1091 Telnet terminal-type option
 RFC 1096 Telnet X display location option
 RFC 1184 Telnet linemode option
 RFC 1205 5250 Telnet interface
 RFC 1372 Telnet remote flow control option
 RFC 1408 Telnet Environment Option
 RFC 1572 Telnet Environment Option (NEW-ENVIRON)
 RFC 2217 Telnet Com Port Control Option
 RFC 2941 Telnet Authentication Option
 RFC 2942 Telnet Authentication: Kerberos Version 5
 RFC 2943 TELNET Authentication Using DSA
 RFC 2944 Telnet Authentication: SRP
 RFC 2946 Telnet Data Encryption Option
 RFC 4248 The telnet URI Scheme
 RFC 4777 IBM’s iSeries Telnet Enhancements

Примечания 

Протоколы прикладного уровня
Текстовый интерфейс
Интернет-протоколы
Сетевое программное обеспечение
Программы удалённого администрирования