telnetlib.md
1> **Источник:** https://python-all.ru/3.0/library/telnetlib.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# `telnetlib` – Telnet-клиент89Модуль `telnetlib` предоставляет класс [`Telnet`](https://python-all.ru/3.0/library/telnetlib.html#telnetlib.Telnet), реализующий протокол Telnet. Подробнее о протоколе см. [**RFC 854**](https://python-all.ru/3.0/library/telnetlib.html). Кроме того, модуль предоставляет символьные константы для символов протокола (см. ниже) и для опций telnet. Символьные имена опций telnet следуют определениям из `arpa/telnet.h`, с удалённым префиксом `TELOPT_`. Для символьных имён опций, которые традиционно не включены в `arpa/telnet.h`, обратитесь к исходному коду модуля.1011Символьные константы для команд telnet: IAC, DONT, DO, WONT, WILL, SE (конец поднегосиации), NOP (нет операции), DM (метка данных), BRK (прерывание), IP (прерывание процесса), AO (отмена вывода), AYT (вы здесь?), EC (стирание символа), EL (стирание строки), GA (продолжайте), SB (начало поднегосиации).1213#### `[telnetlib.Telnet]class telnetlib.Telnet([host[, port[, timeout]]])`1415[`Telnet`](https://python-all.ru/3.0/library/telnetlib.html#telnetlib.Telnet) представляет собой соединение с Telnet-сервером. По умолчанию экземпляр изначально не подключён; для установки соединения необходимо использовать метод [`open()`](https://python-all.ru/3.0/library/functions.html#open). В качестве альтернативы в конструктор можно передать имя хоста, а также необязательные порт и тайм-аут; в этом случае соединение с сервером будет установлено до возврата из конструктора. Необязательный параметр *timeout* задаёт тайм-аут в секундах для попытки подключения (если он не указан, будет использовано глобальное значение тайм-аута по умолчанию).1617В конструктор можно передать число; в этом случае соединение с сервером будет установлено до возврата из конструктора. Необязательный параметр *timeout* задаёт тайм-аут в секундах для блокирующих операций, таких как попытка подключения (если он не указан или передан как None, будет использовано глобальное значение тайм-аута по умолчанию).1819Повторное открытие уже подключённого экземпляра не допускается.2021Этот класс имеет множество методов `read_*()`. Обратите внимание, что некоторые из них возбуждают [`EOFError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.EOFError) при достижении конца соединения, поскольку в других случаях они могут возвращать пустую строку. См. описания ниже.2223> **См. также**24>25> **[**RFC 854**](https://python-all.ru/3.0/library/telnetlib.html) – Спецификация протокола Telnet**26>27> Определение протокола Telnet.2829## Объекты Telnet3031Экземпляры [`Telnet`](https://python-all.ru/3.0/library/telnetlib.html#telnetlib.Telnet) имеют следующие методы:3233#### `[telnetlib.Telnet.read_until]Telnet.read_until(expected[, timeout])`3435Читать до тех пор, пока не встретится заданная байтовая строка *expected* или не истечёт *timeout* секунд.3637Если совпадение не найдено, вернуть то, что доступно, возможно, пустые байты. Возбуждать [`EOFError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.EOFError), если соединение закрыто и обработанные данные недоступны.3839#### `[telnetlib.Telnet.read_all]Telnet.read_all()`4041Читать все данные до конца файла (EOF) как байты; блокироваться до закрытия соединения.4243#### `[telnetlib.Telnet.read_some]Telnet.read_some()`4445Читать как минимум один байт обработанных данных, если только не достигнут EOF. Возвращать4647`b''`4849, если достигнут EOF. Блокироваться, если данные недоступны немедленно.5051#### `[telnetlib.Telnet.read_very_eager]Telnet.read_very_eager()`5253Прочитать всё, что возможно без блокировки ввода-вывода (нетерпеливо).5455Возбуждать [`EOFError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.EOFError), если соединение закрыто и обработанные данные недоступны. Иначе возвращать `b''`, если обработанные данные недоступны. Не блокироваться, если только не находитесь в середине последовательности IAC.5657#### `[telnetlib.Telnet.read_eager]Telnet.read_eager()`5859Прочитать легко доступные данные.6061Возбуждать [`EOFError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.EOFError), если соединение закрыто и обработанные данные недоступны. Иначе возвращать `b''`, если обработанные данные недоступны. Не блокироваться, если только не находитесь в середине последовательности IAC.6263#### `[telnetlib.Telnet.read_lazy]Telnet.read_lazy()`6465Обработать и вернуть данные, уже находящиеся в очередях (лениво).6667Возбуждать [`EOFError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.EOFError), если соединение закрыто и нет доступных данных. Иначе возвращать `b''`, если обработанные данные недоступны. Не блокироваться, если только не находитесь в середине последовательности IAC.6869#### `[telnetlib.Telnet.read_very_lazy]Telnet.read_very_lazy()`7071Вернуть любые данные, доступные в очереди обработанных данных (очень лениво).7273Возбуждать [`EOFError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.EOFError), если соединение закрыто и нет доступных данных. Иначе возвращать `b''`, если обработанные данные недоступны. Этот метод никогда не блокируется.7475#### `[telnetlib.Telnet.read_sb_data]Telnet.read_sb_data()`7677Возвращать данные, собранные между парой SB/SE (начало/конец подопции). Колбэк должен обращаться к этим данным, когда он был вызван с командой7879`SE`8081. Этот метод никогда не блокируется.8283#### `[telnetlib.Telnet.open]Telnet.open(host[, port[, timeout]])`8485Подключается к хосту. Второй необязательный аргумент – номер порта, по умолчанию равный стандартному порту Telnet (23). Необязательный параметр *timeout* задает тайм-аут в секундах для блокирующих операций, например попытки подключения (если не указан, используется глобальная настройка тайм-аута по умолчанию).8687Не пытайтесь переоткрыть уже подключенный экземпляр.8889#### `[telnetlib.Telnet.msg]Telnet.msg(msg[, *args])`9091Выводит отладочное сообщение, когда уровень отладки равен9293`>`94950. Если присутствуют дополнительные аргументы, они подставляются в сообщение с помощью стандартного оператора форматирования строк.9697#### `[telnetlib.Telnet.set_debuglevel]Telnet.set_debuglevel(debuglevel)`9899Установить уровень отладки. Чем выше значение100101*debuglevel*102103, тем больше отладочного вывода вы получаете (на104105`sys.stdout`106107).108109#### `[telnetlib.Telnet.close]Telnet.close()`110111Закрывает подключение.112113#### `[telnetlib.Telnet.get_socket]Telnet.get_socket()`114115Возвращает объект сокета, используемый внутри.116117#### `[telnetlib.Telnet.fileno]Telnet.fileno()`118119Возвращает файловый дескриптор объекта сокета, используемого внутри.120121#### `[telnetlib.Telnet.write]Telnet.write(buffer)`122123Записывает байтовую строку в сокет, дублируя любые IAC-символы. Это может заблокировать выполнение, если соединение заблокировано. Может возбудить124125[`socket.error`](https://python-all.ru/3.0/library/socket.html#socket.error)126127, если соединение закрыто.128129#### `[telnetlib.Telnet.interact]Telnet.interact()`130131Функция взаимодействия, эмулирующая очень простой Telnet-клиент.132133#### `[telnetlib.Telnet.mt_interact]Telnet.mt_interact()`134135Многопоточная версия136137[`interact()`](https://python-all.ru/3.0/library/telnetlib.html#telnetlib.Telnet.interact)138139.140141#### `[telnetlib.Telnet.expect]Telnet.expect(list[, timeout])`142143Читает до совпадения с одним из списка регулярных выражений.144145Первым аргументом является список регулярных выражений, либо скомпилированных (экземпляры `re.RegexObject`), либо нескомпилированных (байтовые строки). Второй необязательный аргумент – тайм-аут в секундах; по умолчанию ожидание блокируется на неопределённое время.146147Возвращает кортеж из трех элементов: индекс в списке первого регулярного выражения, которое совпало; возвращаемый объект совпадения; и байты, прочитанные до совпадения включительно.148149Если обнаружен конец файла и не было прочитано ни одного байта, возбуждается [`EOFError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.EOFError). В противном случае, если ничего не совпало, возвращается `(-1, None, data)`, где *data* – это байты, полученные на данный момент (может быть пустым набором байтов, если произошёл тайм-аут).150151Если регулярное выражение заканчивается жадным совпадением (например, `.*`) или если более одного выражения могут соответствовать одним и тем же входным данным, результаты будут недетерминированными и могут зависеть от таймингов ввода-вывода.152153#### `[telnetlib.Telnet.set_option_negotiation_callback]Telnet.set_option_negotiation_callback(callback)`154155Каждый раз, когда в потоке ввода считывается опция telnet, этот156157*колбэк*158159(если задан) вызывается со следующими параметрами: callback(telnet socket, command (DO/DONT/WILL/WONT), option). После этого telnetlib не выполняет никаких других действий.160161## Пример Telnet162163Простой пример, иллюстрирующий типичное использование:164165```python166import getpass167import telnetlib168169HOST = "localhost"170user = input("Enter your remote account: ")171password = getpass.getpass()172173tn = telnetlib.Telnet(HOST)174175tn.read_until(b"login: ")176tn.write(user.encode('ascii') + b"\n")177if password:178 tn.read_until(b"Password: ")179 tn.write(password.encode('ascii') + b"\n")180181tn.write(b"ls\n")182tn.write(b"exit\n")183184print(tn.read_all().decode('ascii'))185```186