Русская Википедия:Telnet

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

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

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

Введение

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

Устройство

Хотя в сессии Telnet выделяют клиентскую и серверную стороны, протокол на самом деле полностью симметричен. После установления транспортного соединения (как правило, TCP) оба его конца играют роль «сетевых виртуальных терминалов» (Шаблон:Lang-en, NVT), обменивающихся двумя типами данных:

  • Прикладными данными (то есть данными, которые идут от пользователя к текстовому приложению на стороне сервера и обратно);
  • Командами протокола Telnet, частным случаем которых являются опции, служащие для уяснения возможностей и предпочтений сторон.

Хотя Telnet-сессии, выполняющейся по TCP, свойственен полный дуплекс, NVT должен рассматриваться как полудуплексное устройство, работающее по умолчанию в буферизированном строковом режиме.

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

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

Опции

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

Принтер и клавиатура NVT

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

Название Код (десятичный/шестнадцатеричный) Описание
NULL (NUL) * 0/0x00 Нет операции.
Line Feed (LF) * 10/0x0A Переводит принтер на следующую строку печати, оставаясь на той же горизонтальной позиции.
Carriage Return (CR) * 13/0x0D Перемещает принтер к левой границе текущей строки.
BELL (BEL) 7/0x07 Производит аудио или видеосигнал (но НЕ перемещает головку принтера).
Back Space (BS) 8/0x08 Перемещает головку принтера на один символ по направлению к левой границе.
Horizontal Tab (HT) 9/0x09 Перемещает принтер на следующую остановку горизонтальной табуляции. Остаётся неопределённым, как сторона определяет и устанавливает эти остановки табуляции.
Vertical Tab (VT) 11/0x0B Перемещает принтер на следующую остановку вертикальной табуляции. Остаётся неопределённым, как сторона определяет и устанавливает эти остановки табуляции.
Form Feed (FF) 12/0x0C Перемещает принтер к верхней части следующей страницы, оставаясь на той же горизонтальной позиции.

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

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

Структура команд Telnet

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

Название Код (десятичный/шестнадцатеричный) Описание
SE 240/0xF0 Завершает согласование, начатое командой SB.
NOP 241/0xF1 Нет операции.
Data Mark 242/0xF2 Синхронизация (Synch) обмена данными. Эта команда всегда сопровождается TCP Urgent notification.
Break 243/0xF3 Нажата кнопка «Break» или «Attention».
Interrupt Process 244/0xF4 Приостанавливает, прерывает, аварийно прекращает или завершает процесс.
Abort output 245/0xF5 Подавление вывода текущего процесса. Также отправляет сигнал Synch пользователю.
Are You There 246/0xF6 Отправляет обратно ответ терминала, состоящий из печатных символов.
Erase character 247/0xF7 Получатель должен удалить предыдущий символ, если это возможно.
Erase Line 248/0xF8 Стереть последнюю введённую строку, то есть все данные, полученные после последнего перевода строки.
Go ahead 249/0xF9 Ожидается передача данных.
SB 250/0xFA Начало согласования опции, требующего передачи параметров.
WILL опция 251/0xFB Указывает на желание исполнять или подтверждает, что сейчас исполняется указанная опция.
WON’T опция 252/0xFC Указывает на отказ начать или продолжить исполнять указанную опцию.
DO опция 253/0xFD Запрос на то, чтобы другая сторона исполнила или подтвердила исполнение указанной опции.
DON’T опция 254/0xFE Требование на то, чтобы другая сторона остановила исполнение или подтвердила то, что указанная опция более не исполняется.
IAC 255/0XFF Байт данных 255.

Применения

Исторически 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

Примечания

Шаблон:Примечания Шаблон:URI scheme Шаблон:IPstack

  1. Данные могут подвергаться изменениям (например, может быть сброшен старший бит) в случае, если на вход одного терминала поступили данные, допустимость приёма которых не была подтверждена вторым.
  2. Шаблон:Inet-note-ref — Telnet Charset Option