Русская Википедия: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
- ↑ Данные могут подвергаться изменениям (например, может быть сброшен старший бит) в случае, если на вход одного терминала поступили данные, допустимость приёма которых не была подтверждена вторым.
- ↑ Шаблон:Inet-note-ref — Telnet Charset Option