telnetlib.md
1> **Источник:** https://python-all.ru/3.11/library/telnetlib.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# [`telnetlib`](https://python-all.ru/3.11/library/telnetlib.html#module-telnetlib) – клиент Telnet89**Исходный код:** [Lib/telnetlib.py](https://python-all.ru/src/3.11/Lib/telnetlib.py)1011Устарело с версии 3.11, будет удалено в версии 3.13: Модуль [`telnetlib`](https://python-all.ru/3.11/library/telnetlib.html#module-telnetlib) устарел (см. [**PEP 594**](https://python-all.ru/3.11/library/telnetlib.html) для получения подробностей и альтернатив).1213---1415Модуль [`telnetlib`](https://python-all.ru/3.11/library/telnetlib.html#module-telnetlib) предоставляет класс [`Telnet`](https://python-all.ru/3.11/library/telnetlib.html#telnetlib.Telnet), реализующий протокол Telnet. Подробности протокола см. в [**RFC 854**](https://python-all.ru/3.11/library/telnetlib.html). Кроме того, он предоставляет символьные константы для символов протокола (см. ниже) и для параметров telnet. Символьные имена параметров telnet следуют определениям из `arpa/telnet.h`, с удалённым префиксом `TELOPT_`. Для символьных имён параметров, которые традиционно не включены в `arpa/telnet.h`, см. исходный код самого модуля.1617Символьные константы для команд telnet: IAC, DONT, DO, WONT, WILL, SE (конец поднегосиации), NOP (нет операции), DM (метка данных), BRK (прерывание), IP (прерывание процесса), AO (отмена вывода), AYT (вы здесь?), EC (стирание символа), EL (стирание строки), GA (продолжайте), SB (начало поднегосиации).1819[Доступность](https://python-all.ru/3.11/library/intro.html#availability): not Emscripten, not WASI.2021Этот модуль не работает или недоступен на платформах WebAssembly `wasm32-emscripten` и `wasm32-wasi`. См. [платформы WebAssembly](https://python-all.ru/3.11/library/intro.html#wasm-availability) для получения дополнительной информации.2223#### `class telnetlib.Telnet(host=None, port=0[, timeout])`2425[`Telnet`](https://python-all.ru/3.11/library/telnetlib.html#telnetlib.Telnet) представляет подключение к Telnet-серверу. По умолчанию экземпляр изначально не подключён; для установки соединения необходимо использовать метод [`open()`](https://python-all.ru/3.11/library/telnetlib.html#telnetlib.Telnet.open). Альтернативно, имя хоста и необязательный номер порта также можно передать конструктору, и в этом случае подключение к серверу будет установлено до возврата из конструктора. Необязательный параметр *timeout* задаёт тайм-аут в секундах для блокирующих операций, таких как попытка подключения (если не указан, будет использоваться глобальная настройка тайм-аута по умолчанию).2627Повторное открытие уже подключённого экземпляра не допускается.2829Этот класс имеет множество методов `read_*()`. Обратите внимание, что некоторые из них возбуждают [`EOFError`](https://python-all.ru/3.11/library/exceptions.html#EOFError) при достижении конца соединения, поскольку по другим причинам они могут вернуть пустую строку. См. отдельные описания ниже.3031Объект [`Telnet`](https://python-all.ru/3.11/library/telnetlib.html#telnetlib.Telnet) является контекстным менеджером и может использоваться в операторе [`with`](https://python-all.ru/3.11/reference/compound_stmts.html#with). Когда блок `with` завершается, вызывается метод [`close()`](https://python-all.ru/3.11/library/telnetlib.html#telnetlib.Telnet.close):3233```python34>>> from telnetlib import Telnet35>>> with Telnet('localhost', 23) as tn:36... tn.interact()37...38```3940Изменено в версии 3.6: Добавлена поддержка контекстного менеджера4142> **См. также**43>44> **[**RFC 854**](https://python-all.ru/3.11/library/telnetlib.html) – Спецификация протокола Telnet**45>46> Определение протокола Telnet.4748## Объекты Telnet4950Экземпляры [`Telnet`](https://python-all.ru/3.11/library/telnetlib.html#telnetlib.Telnet) имеют следующие методы:5152#### `Telnet.read_until(expected, timeout=None)`5354Читать до тех пор, пока не встретится заданная байтовая строка *expected* или не истечёт *timeout* секунд.5556Если совпадение не найдено, вернуть всё, что доступно, возможно, пустые байты. Возбуждать [`EOFError`](https://python-all.ru/3.11/library/exceptions.html#EOFError), если соединение закрыто и обработанные данные недоступны.5758#### `Telnet.read_all()`5960Читать все данные до конца файла (EOF) как байты; блокироваться до закрытия соединения.6162#### `Telnet.read_some()`6364Прочитать хотя бы один байт обработанных данных, если не достигнут EOF. Вернуть `b''` при достижении EOF. Блокироваться, если данные недоступны немедленно.6566#### `Telnet.read_very_eager()`6768Прочитать всё, что возможно без блокировки ввода-вывода (нетерпеливо).6970Возбуждать [`EOFError`](https://python-all.ru/3.11/library/exceptions.html#EOFError), если соединение закрыто и обработанные данные недоступны. В противном случае вернуть `b''`, если обработанные данные недоступны. Не блокироваться, если только не находитесь в середине последовательности IAC.7172#### `Telnet.read_eager()`7374Прочитать легко доступные данные.7576Возбуждать [`EOFError`](https://python-all.ru/3.11/library/exceptions.html#EOFError), если соединение закрыто и обработанные данные недоступны. В противном случае вернуть `b''`, если обработанные данные недоступны. Не блокироваться, если только не находитесь в середине последовательности IAC.7778#### `Telnet.read_lazy()`7980Обработать и вернуть данные, уже находящиеся в очередях (лениво).8182Возбуждать [`EOFError`](https://python-all.ru/3.11/library/exceptions.html#EOFError), если соединение закрыто и данные недоступны. В противном случае вернуть `b''`, если обработанные данные недоступны. Не блокироваться, если только не находитесь в середине последовательности IAC.8384#### `Telnet.read_very_lazy()`8586Вернуть любые данные, доступные в очереди обработанных данных (очень лениво).8788Возбуждать [`EOFError`](https://python-all.ru/3.11/library/exceptions.html#EOFError), если соединение закрыто и данные недоступны. В противном случае вернуть `b''`, если обработанные данные недоступны. Этот метод никогда не блокируется.8990#### `Telnet.read_sb_data()`9192Возвращает данные, собранные между парой SB/SE (начало/конец субопции). Колбэк должен обращаться к этим данным, когда вызывается с командой `SE`. Этот метод никогда не блокируется.9394#### `Telnet.open(host, port=0[, timeout])`9596Подключается к хосту. Второй необязательный аргумент – номер порта, по умолчанию равный стандартному порту Telnet (23). Необязательный параметр *timeout* задает тайм-аут в секундах для блокирующих операций, например попытки подключения (если не указан, используется глобальная настройка тайм-аута по умолчанию).9798Не пытайтесь переоткрыть уже подключенный экземпляр.99100Вызывает [событие аудита](https://python-all.ru/3.11/library/sys.html#auditing) `telnetlib.Telnet.open` с аргументами `self`, `host`, `port`.101102#### `Telnet.msg(msg, *args)`103104Выводит отладочное сообщение, когда уровень отладки равен `>` 0. Если присутствуют дополнительные аргументы, они подставляются в сообщение с помощью стандартного оператора форматирования строк.105106#### `Telnet.set_debuglevel(debuglevel)`107108Устанавливает уровень отладки. Чем выше значение *debuglevel*, тем больше отладочного вывода выводится (на `sys.stdout`).109110#### `Telnet.close()`111112Закрывает подключение.113114#### `Telnet.get_socket()`115116Возвращает объект сокета, используемый внутри.117118#### `Telnet.fileno()`119120Возвращает файловый дескриптор объекта сокета, используемого внутри.121122#### `Telnet.write(buffer)`123124Записывает байтовую строку в сокет, удваивая любые IAC-символы. Это может блокироваться, если соединение заблокировано. Может вызвать [`OSError`](https://python-all.ru/3.11/library/exceptions.html#OSError), если соединение закрыто.125126Возбуждает [событие аудита](https://python-all.ru/3.11/library/sys.html#auditing) `telnetlib.Telnet.write` с аргументами `self`, `buffer`.127128Изменено в версии 3.3: Раньше этот метод вызывал [`socket.error`](https://python-all.ru/3.11/library/socket.html#socket.error), который теперь является псевдонимом [`OSError`](https://python-all.ru/3.11/library/exceptions.html#OSError).129130#### `Telnet.interact()`131132Функция взаимодействия, эмулирующая очень простой Telnet-клиент.133134#### `Telnet.mt_interact()`135136Многопоточная версия [`interact()`](https://python-all.ru/3.11/library/telnetlib.html#telnetlib.Telnet.interact).137138#### `Telnet.expect(list, timeout=None)`139140Читает до совпадения с одним из списка регулярных выражений.141142Первый аргумент – список регулярных выражений, либо скомпилированных ([объекты regex](https://python-all.ru/3.11/library/re.html#re-objects)), либо нет (байтовые строки). Второй необязательный аргумент – тайм-аут в секундах; по умолчанию блокировка бесконечна.143144Возвращает кортеж из трех элементов: индекс в списке первого регулярного выражения, которое совпало; возвращаемый объект совпадения; и байты, прочитанные до совпадения включительно.145146Если достигнут конец файла и не прочитано ни одного байта, вызывается [`EOFError`](https://python-all.ru/3.11/library/exceptions.html#EOFError). В противном случае, когда ничего не совпало, возвращается `(-1, None, data)`, где *data* – полученные на данный момент байты (может быть пустыми байтами, если произошел тайм-аут).147148Если регулярное выражение заканчивается жадным совпадением (например, `.*`) или если более одного выражения могут совпадать с одними и теми же входными данными, результаты недетерминированы и могут зависеть от времени ввода-вывода.149150#### `Telnet.set_option_negotiation_callback(callback)`151152Каждый раз, когда во входном потоке читается опция telnet, этот *колбэк* (если установлен) вызывается со следующими параметрами: колбэк(telnet socket, command (DO/DONT/WILL/WONT), option). После этого telnetlib не выполняет никаких других действий.153154## Пример Telnet155156Простой пример, иллюстрирующий типичное использование:157158```python159import getpass160import telnetlib161162HOST = "localhost"163user = input("Enter your remote account: ")164password = getpass.getpass()165166tn = telnetlib.Telnet(HOST)167168tn.read_until(b"login: ")169tn.write(user.encode('ascii') + b"\n")170if password:171 tn.read_until(b"Password: ")172 tn.write(password.encode('ascii') + b"\n")173174tn.write(b"ls\n")175tn.write(b"exit\n")176177print(tn.read_all().decode('ascii'))178```179