Telnet

Telnet ( англ. TErminaL NETwork ) - сетевой протокол для реализации текстового интерфейса по сети (в современной форме - посредством транспорта TCP). Название "telnet" имеют также некоторые утилиты, реализующие клиентскую часть протокола.


1. Введение

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

2. Устройство

Хотя в сессии Telnet выделяют клиентскую и серверную сторону, протокол самом деле полностью симметричен. После установки транспортного соединения (как правило, TCP) оба его конца играют роль "сетевых виртуальных терминалов" (Network Virtual Terminal, NVT), которые обмениваются двумя типами данных:

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

Хотя Telnet-сессии, выполняемой по TCP, свойственный полный дуплекс, NVT должен рассматриваться как полудуплексный устройство, работающее по умолчанию буферизуемых строчном режиме. Прикладные данные проходят через протокол без изменений Данные могут меняться (например может быть сброшен старший бит) в случае, если на вход одного терминала поступили данные, допустимость приема которых не была подтверждена другим. , То есть на выходе второго виртуального терминала мы видим именно то, что было введено на вход первого. С точки зрения протокола данные представляют просто последовательность байтов ( октетов), по умолчанию относятся набора ASCII, но при включенной опции Binary - любых. Хотя были предложены расширения для идентификации набора символов Telnet Charset Option, но на практике ими не пользуются. Все значения октетов прикладных данных кроме \ 377 (десятичное 255) передаются по транспорту как есть. Октет \ 377 передается последовательностью \ 377 \ 377 из двух октетов. Это связано с тем, что октет \ 377 используется на транспортном уровне для кодирования опций.


2.1. Опции

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


2.2. Принтер и клавиатура 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 следует избегать в других контекстах.


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

Каждая команда TELNET является многобайтовых последовательность, начинается с кода \ 377 (десятичное: 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.

3. Применение

Исторически Telnet служил для удаленного доступа к интерфейса командной строки операционных систем. Впоследствии его стали использовать для других текстовых интерфейсов, вплоть до игр MUD и анимированного ASCII-art. Теоретически, даже обе стороны протокола могут быть программами, а не человеком. Иногда клиенты telnet используются для доступа к другим протоколов на основе транспорта TCP. Протокол telnet используется в управляющем соединении FTP, то есть заходить на сервер командой telnet ftp.example.net ftp для выполнения отладки и экспериментов не только возможно, но и правильно (в отличие от применения клиентов telnet для доступа к HTTP, IRC и большинства других протоколов).


4. Безопасность

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


5. Telnet и другие протоколы

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

  • Клиент может передать данные, которые Вы не вводили (опции Telnet);
  • Клиент не будет принимать октет \ 377;
  • Клиент будет искажать октет \ 377 при передаче;
  • Клиент вообще может отказаться передавать октета со старшим битом 1.

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