Документация Python неофициальный перевод
Содержание страницы

telnetlib – Telnet-клиентtelnetlib – Telnet client

Модуль telnetlib предоставляет класс Telnet, реализующий протокол Telnet. Подробнее о протоколе см. RFC 854. Кроме того, модуль предоставляет символьные константы для символов протокола (см. ниже) и для опций telnet. Символьные имена опций telnet следуют определениям из arpa/telnet.h, с удалённым префиксом TELOPT_. Для символьных имён опций, которые традиционно не включены в arpa/telnet.h, обратитесь к исходному коду модуля.

Символьные константы для команд telnet: IAC, DONT, DO, WONT, WILL, SE (конец поднегосиации), NOP (нет операции), DM (метка данных), BRK (прерывание), IP (прерывание процесса), AO (отмена вывода), AYT (вы здесь?), EC (стирание символа), EL (стирание строки), GA (продолжайте), SB (начало поднегосиации).

class telnetlib.Telnet([host[, port[, timeout]]])

Telnet представляет собой соединение с Telnet-сервером. По умолчанию экземпляр изначально не подключён; для установки соединения необходимо использовать метод open(). В качестве альтернативы в конструктор можно передать имя хоста, а также необязательные порт и тайм-аут; в этом случае соединение с сервером будет установлено до возврата из конструктора. Необязательный параметр timeout задаёт тайм-аут в секундах для попытки подключения (если он не указан, будет использовано глобальное значение тайм-аута по умолчанию).

В конструктор можно передать число; в этом случае соединение с сервером будет установлено до возврата из конструктора. Необязательный параметр timeout задаёт тайм-аут в секундах для блокирующих операций, таких как попытка подключения (если он не указан или передан как None, будет использовано глобальное значение тайм-аута по умолчанию).

Повторное открытие уже подключённого экземпляра не допускается.

Этот класс имеет множество методов read_*(). Обратите внимание, что некоторые из них возбуждают EOFError при достижении конца соединения, поскольку в других случаях они могут возвращать пустую строку. См. описания ниже.

См. также

RFC 854 – Спецификация протокола Telnet
Определение протокола Telnet.

Объекты TelnetTelnet Objects

Экземпляры Telnet имеют следующие методы:

Telnet.read_until(expected[, timeout])

Читать до тех пор, пока не встретится заданная байтовая строка expected или не истечёт timeout секунд.

Если совпадение не найдено, вернуть то, что доступно, возможно, пустые байты. Возбуждать EOFError, если соединение закрыто и обработанные данные недоступны.

Telnet.read_all()
Читать все данные до конца файла (EOF) как байты; блокироваться до закрытия соединения.
Telnet.read_some()
Читать как минимум один байт обработанных данных, если только не достигнут EOF. Возвращать b'', если достигнут EOF. Блокироваться, если данные недоступны немедленно.
Telnet.read_very_eager()

Прочитать всё, что возможно без блокировки ввода-вывода (нетерпеливо).

Возбуждать EOFError, если соединение закрыто и обработанные данные недоступны. Иначе возвращать b'', если обработанные данные недоступны. Не блокироваться, если только не находитесь в середине последовательности IAC.

Telnet.read_eager()

Прочитать легко доступные данные.

Возбуждать EOFError, если соединение закрыто и обработанные данные недоступны. Иначе возвращать b'', если обработанные данные недоступны. Не блокироваться, если только не находитесь в середине последовательности IAC.

Telnet.read_lazy()

Обработать и вернуть данные, уже находящиеся в очередях (лениво).

Возбуждать EOFError, если соединение закрыто и нет доступных данных. Иначе возвращать b'', если обработанные данные недоступны. Не блокироваться, если только не находитесь в середине последовательности IAC.

Telnet.read_very_lazy()

Вернуть любые данные, доступные в очереди обработанных данных (очень лениво).

Возбуждать EOFError, если соединение закрыто и нет доступных данных. Иначе возвращать b'', если обработанные данные недоступны. Этот метод никогда не блокируется.

Telnet.read_sb_data()
Возвращать данные, собранные между парой SB/SE (начало/конец подопции). Колбэк должен обращаться к этим данным, когда он был вызван с командой SE. Этот метод никогда не блокируется.
Telnet.open(host[, port[, timeout]])

Подключается к хосту. Второй необязательный аргумент – номер порта, по умолчанию равный стандартному порту Telnet (23). Необязательный параметр timeout задает тайм-аут в секундах для блокирующих операций, например попытки подключения (если не указан, используется глобальная настройка тайм-аута по умолчанию).

Не пытайтесь переоткрыть уже подключенный экземпляр.

Telnet.msg(msg[, *args])
Выводит отладочное сообщение, когда уровень отладки равен > 0. Если присутствуют дополнительные аргументы, они подставляются в сообщение с помощью стандартного оператора форматирования строк.
Telnet.set_debuglevel(debuglevel)
Установить уровень отладки. Чем выше значение debuglevel, тем больше отладочного вывода вы получаете (на sys.stdout).
Telnet.close()
Закрывает подключение.
Telnet.get_socket()
Возвращает объект сокета, используемый внутри.
Telnet.fileno()
Возвращает файловый дескриптор объекта сокета, используемого внутри.
Telnet.write(buffer)
Записывает байтовую строку в сокет, дублируя любые IAC-символы. Это может заблокировать выполнение, если соединение заблокировано. Может возбудить socket.error, если соединение закрыто.
Telnet.interact()
Функция взаимодействия, эмулирующая очень простой Telnet-клиент.
Telnet.mt_interact()
Многопоточная версия interact().
Telnet.expect(list[, timeout])

Читает до совпадения с одним из списка регулярных выражений.

Первым аргументом является список регулярных выражений, либо скомпилированных (экземпляры re.RegexObject), либо нескомпилированных (байтовые строки). Второй необязательный аргумент – тайм-аут в секундах; по умолчанию ожидание блокируется на неопределённое время.

Возвращает кортеж из трех элементов: индекс в списке первого регулярного выражения, которое совпало; возвращаемый объект совпадения; и байты, прочитанные до совпадения включительно.

Если обнаружен конец файла и не было прочитано ни одного байта, возбуждается EOFError. В противном случае, если ничего не совпало, возвращается (-1, None, data), где data – это байты, полученные на данный момент (может быть пустым набором байтов, если произошёл тайм-аут).

Если регулярное выражение заканчивается жадным совпадением (например, .*) или если более одного выражения могут соответствовать одним и тем же входным данным, результаты будут недетерминированными и могут зависеть от таймингов ввода-вывода.

Telnet.set_option_negotiation_callback(callback)
Каждый раз, когда в потоке ввода считывается опция telnet, этот колбэк (если задан) вызывается со следующими параметрами: callback(telnet socket, command (DO/DONT/WILL/WONT), option). После этого telnetlib не выполняет никаких других действий.

Пример TelnetTelnet Example

Простой пример, иллюстрирующий типичное использование:

import getpass
import telnetlib

HOST = "localhost"
user = input("Enter your remote account: ")
password = getpass.getpass()

tn = telnetlib.Telnet(HOST)

tn.read_until(b"login: ")
tn.write(user.encode('ascii') + b"\n")
if password:
    tn.read_until(b"Password: ")
    tn.write(password.encode('ascii') + b"\n")

tn.write(b"ls\n")
tn.write(b"exit\n")

print(tn.read_all().decode('ascii'))