telnetlib — Клиент Telnet

Исходный код: Lib/telnetlib.py

Утратил актуальность с версии 3.11, будет удален в версии 3.13: Модуль telnetlib устарел (подробности и альтернативные варианты см. в разделе PEP 594).


Модуль 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 (Начать дополнительные переговоры).

Availability: это не Emscripten, это был не я.

Этот модуль не работает или недоступен на платформах WebAssembly wasm32-emscripten и wasm32-wasi. Дополнительную информацию смотрите в разделе Платформы веб-сборки.

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

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

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

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

Объект Telnet является контекстным менеджером и может использоваться в инструкции with. Когда заканчивается блок with, вызывается метод close():

>>> from telnetlib import Telnet
>>> with Telnet('localhost', 23) as tn:
...     tn.interact()
...

Изменено в версии 3.6: Добавлена поддержка контекстного менеджера

См.также

RFC 854 - Спецификация протокола Telnet

Определение протокола Telnet.

Объекты Telnet

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

Telnet.read_until(expected, timeout=None)

Считывается до тех пор, пока не будет обнаружена заданная строка байтов, ожидаемая, или пока не пройдет тайм-аут секунд.

Если совпадение не найдено, верните все, что доступно, возможно, пустые байты. Поднимите 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 (подвариант begin/end). Обратный вызов должен получить доступ к этим данным, когда он был вызван с помощью команды SE. Этот метод никогда не блокируется.

Telnet.open(host, port=0[, timeout])

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

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

Создает auditing event telnetlib.Telnet.open с аргументами self, host, port.

Telnet.msg(msg, *args)

Выводите отладочное сообщение, когда уровень отладки равен > 0. Если присутствуют дополнительные аргументы, они подставляются в сообщение с помощью стандартного оператора форматирования строк.

Telnet.set_debuglevel(debuglevel)

Установите уровень отладки. Чем выше значение debuglevel, тем больше результатов отладки вы получите (при sys.stdout).

Telnet.close()

Закройте соединение.

Telnet.get_socket()

Возвращает объект сокета, используемый внутри системы.

Telnet.fileno()

Возвращает файловый дескриптор объекта socket, используемого внутри системы.

Telnet.write(buffer)

Запишите строку байтов в сокет, удвоив все символы IAC. Это может привести к блокировке, если соединение заблокировано. Может вызвать OSError, если соединение закрыто.

Создает auditing event telnetlib.Telnet.write с аргументами self, buffer.

Изменено в версии 3.3: Этот метод использовался для создания socket.error, который теперь является псевдонимом OSError.

Telnet.interact()

Функция взаимодействия, эмулирующая очень тупой клиент Telnet.

Telnet.mt_interact()

Многопоточная версия interact().

Telnet.expect(list, timeout=None)

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

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

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

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

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

Telnet.set_option_negotiation_callback(callback)

Каждый раз, когда во входном потоке считывается параметр telnet, вызывается этот обратный вызов (если он установлен) со следующими параметрами: обратный вызов (сокет telnet, команда (DO/DONT/WILL/WONT ОБЫКНОВЕНИЕ), параметр). После этого telnetlib не выполняет никаких других действий.

Пример Telnet

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

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'))
Вернуться на верх