telnetlib.md
1> **Источник:** https://python-all.ru/3.3/library/telnetlib.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 21.19. [`telnetlib`](https://python-all.ru/3.3/library/telnetlib.html#module-telnetlib) – Telnet-клиент89**Исходный код:** [Lib/telnetlib.py](https://python-all.ru/src/3.3/Lib/telnetlib.py)1011---1213Модуль [`telnetlib`](https://python-all.ru/3.3/library/telnetlib.html#module-telnetlib) предоставляет класс [`Telnet`](https://python-all.ru/3.3/library/telnetlib.html#telnetlib.Telnet), реализующий протокол Telnet. Подробности о протоколе описаны в [**RFC 854**](https://python-all.ru/3.3/library/telnetlib.html). Кроме того, модуль предоставляет символические константы для символов протокола (см. ниже) и для опций Telnet. Символические имена опций Telnet соответствуют определениям в `arpa/telnet.h`, без префикса `TELOPT_`. Символические имена опций, которые традиционно не включены в `arpa/telnet.h`, можно найти в исходном коде модуля.1415Символьные константы для команд telnet: IAC, DONT, DO, WONT, WILL, SE (конец поднегосиации), NOP (нет операции), DM (метка данных), BRK (прерывание), IP (прерывание процесса), AO (отмена вывода), AYT (вы здесь?), EC (стирание символа), EL (стирание строки), GA (продолжайте), SB (начало поднегосиации).1617#### `class telnetlib.Telnet(host=None, port=0[, timeout])`1819[`Telnet`](https://python-all.ru/3.3/library/telnetlib.html#telnetlib.Telnet) представляет подключение к Telnet-серверу. По умолчанию экземпляр изначально не подключён; для установки соединения необходимо использовать метод [`open()`](https://python-all.ru/3.3/library/functions.html#open) для установки соединения. Альтернативно, имя хоста и номер порта (необязательно) можно передать конструктору, и в этом случае соединение с сервером будет установлено до возврата из конструктора. Необязательный параметр *timeout* задаёт тайм-аут в секундах для блокирующих операций , таких как попытка подключения (если он не указан, используется глобальный тайм-аут по умолчанию).2021Повторное открытие уже подключённого экземпляра не допускается.2223Этот класс имеет множество методов `read_*()`. Обратите внимание, что некоторые из них возбуждают [`EOFError`](https://python-all.ru/3.3/library/exceptions.html#EOFError) при достижении конца соединения, поскольку в других случаях они могут возвращать пустую строку. См. описания ниже.2425> **См. также**26>27> **[**RFC 854**](https://python-all.ru/3.3/library/telnetlib.html) – Спецификация протокола Telnet**28>29> Определение протокола Telnet.3031## 21.19.1. Объекты Telnet3233Экземпляры [`Telnet`](https://python-all.ru/3.3/library/telnetlib.html#telnetlib.Telnet) имеют следующие методы:3435#### `Telnet.read_until(expected, timeout=None)`3637Читать до тех пор, пока не встретится заданная байтовая строка *expected* или не истечёт *timeout* секунд.3839Если совпадение не найдено, вернуть то, что доступно, возможно, пустые байты. Возбуждать [`EOFError`](https://python-all.ru/3.3/library/exceptions.html#EOFError), если соединение закрыто и обработанные данные недоступны.4041#### `Telnet.read_all()`4243Читать все данные до конца файла (EOF) как байты; блокироваться до закрытия соединения.4445#### `Telnet.read_some()`4647Читать как минимум один байт обработанных данных, если только не достигнут EOF. Возвращать `b''`, если достигнут EOF. Блокироваться, если данные недоступны немедленно.4849#### `Telnet.read_very_eager()`5051Прочитать всё, что возможно без блокировки ввода-вывода (нетерпеливо).5253Возбуждать [`EOFError`](https://python-all.ru/3.3/library/exceptions.html#EOFError), если соединение закрыто и обработанные данные недоступны. Иначе возвращать `b''`, если обработанные данные недоступны. Не блокироваться, если только не находитесь в середине последовательности IAC.5455#### `Telnet.read_eager()`5657Прочитать легко доступные данные.5859Возбуждать [`EOFError`](https://python-all.ru/3.3/library/exceptions.html#EOFError), если соединение закрыто и обработанные данные недоступны. Иначе возвращать `b''`, если обработанные данные недоступны. Не блокироваться, если только не находитесь в середине последовательности IAC.6061#### `Telnet.read_lazy()`6263Обработать и вернуть данные, уже находящиеся в очередях (лениво).6465Возбуждать [`EOFError`](https://python-all.ru/3.3/library/exceptions.html#EOFError), если соединение закрыто и нет доступных данных. Иначе возвращать `b''`, если обработанные данные недоступны. Не блокироваться, если только не находитесь в середине последовательности IAC.6667#### `Telnet.read_very_lazy()`6869Вернуть любые данные, доступные в очереди обработанных данных (очень лениво).7071Возбуждать [`EOFError`](https://python-all.ru/3.3/library/exceptions.html#EOFError), если соединение закрыто и нет доступных данных. Иначе возвращать `b''`, если обработанные данные недоступны. Этот метод никогда не блокируется.7273#### `Telnet.read_sb_data()`7475Возвращать данные, собранные между парой SB/SE (начало/конец подопции). Колбэк должен обращаться к этим данным, когда он был вызван с командой `SE`. Этот метод никогда не блокируется.7677#### `Telnet.open(host, port=0[, timeout])`7879Подключается к хосту. Второй необязательный аргумент – номер порта, по умолчанию равный стандартному порту Telnet (23). Необязательный параметр *timeout* задает тайм-аут в секундах для блокирующих операций, например попытки подключения (если не указан, используется глобальная настройка тайм-аута по умолчанию).8081Не пытайтесь переоткрыть уже подключенный экземпляр.8283#### `Telnet.msg(msg, *args)`8485Выводит отладочное сообщение, когда уровень отладки равен `>` 0. Если присутствуют дополнительные аргументы, они подставляются в сообщение с помощью стандартного оператора форматирования строк.8687#### `Telnet.set_debuglevel(debuglevel)`8889Установить уровень отладки. Чем выше значение *debuglevel*, тем больше отладочного вывода вы получаете (на `sys.stdout`).9091#### `Telnet.close()`9293Закрывает подключение.9495#### `Telnet.get_socket()`9697Возвращает объект сокета, используемый внутри.9899#### `Telnet.fileno()`100101Возвращает файловый дескриптор объекта сокета, используемого внутри.102103#### `Telnet.write(buffer)`104105Записать байтовую строку в сокет, удваивая все символы IAC. Эта операция может блокироваться, если соединение заблокировано. Может возбуждать [`OSError`](https://python-all.ru/3.3/library/exceptions.html#OSError), если соединение закрыто.106107Изменено в версии 3.3: Ранее этот метод возбуждал [`socket.error`](https://python-all.ru/3.3/library/socket.html#socket.error), который теперь является псевдонимом [`OSError`](https://python-all.ru/3.3/library/exceptions.html#OSError).108109#### `Telnet.interact()`110111Функция взаимодействия, эмулирующая очень простой Telnet-клиент.112113#### `Telnet.mt_interact()`114115Многопоточная версия [`interact()`](https://python-all.ru/3.3/library/telnetlib.html#telnetlib.Telnet.interact).116117#### `Telnet.expect(list, timeout=None)`118119Читает до совпадения с одним из списка регулярных выражений.120121Первый аргумент – список регулярных выражений, либо скомпилированных ([*объекты regex*](https://python-all.ru/3.3/library/re.html#re-objects)), либо нет (байтовые строки). Второй необязательный аргумент – тайм-аут в секундах; по умолчанию блокировка бесконечна.122123Возвращает кортеж из трех элементов: индекс в списке первого регулярного выражения, которое совпало; возвращаемый объект совпадения; и байты, прочитанные до совпадения включительно.124125Если обнаружен конец файла и не было прочитано ни одного байта, возбуждается [`EOFError`](https://python-all.ru/3.3/library/exceptions.html#EOFError). В противном случае, если ничего не совпало, возвращается `(-1, None, data)`, где *data* – это байты, полученные на данный момент (может быть пустым набором байтов, если произошёл тайм-аут).126127Если регулярное выражение заканчивается жадным совпадением (например, `.*`) или если более одного выражения могут совпадать с одними и теми же входными данными, результаты недетерминированы и могут зависеть от времени ввода-вывода.128129#### `Telnet.set_option_negotiation_callback(callback)`130131Каждый раз, когда во входном потоке читается опция telnet, этот *колбэк* (если установлен) вызывается со следующими параметрами: колбэк(telnet socket, command (DO/DONT/WILL/WONT), option). После этого telnetlib не выполняет никаких других действий.132133## 21.19.2. Пример Telnet134135Простой пример, иллюстрирующий типичное использование:136137```python138import getpass139import telnetlib140141HOST = "localhost"142user = input("Enter your remote account: ")143password = getpass.getpass()144145tn = telnetlib.Telnet(HOST)146147tn.read_until(b"login: ")148tn.write(user.encode('ascii') + b"\n")149if password:150 tn.read_until(b"Password: ")151 tn.write(password.encode('ascii') + b"\n")152153tn.write(b"ls\n")154tn.write(b"exit\n")155156print(tn.read_all().decode('ascii'))157```158