telnetlib — Клиент Telnet

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


Модуль 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=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)

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

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

Telnet.read_all()

Чтение всех данных до EOF в байтах; блокировать до закрытия соединения.

Telnet.read_some()

Чтение, по крайней мере, одиного байта приготовленных данных, если не был сбит код EOF. Возвращает b'' при попадании в EOF. Блокировать, если данные недоступны немедленно.

Telnet.read_very_eager()

Чтение всего, что может быть без блокировки в I/O (нетерпеливый).

Поднимите 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=0[, timeout])

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

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

Raises an auditing event telnetlib.Telnet.open with arguments self, host, port.

Telnet.msg(msg, *args)

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

Telnet.set_debuglevel(debuglevel)

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

Telnet.close()

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

Telnet.get_socket()

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

Telnet.fileno()

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

Telnet.write(buffer)

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

Raises an auditing event telnetlib.Telnet.write with arguments self, buffer.

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

Telnet.interact()

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

Telnet.mt_interact()

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

Telnet.expect(list, timeout=None)

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

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

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

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

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

Telnet.set_option_negotiation_callback(callback)

При каждом чтении опции telnet во входном потоке этот callback (если установлен) вызывается со следующими параметрами: колбэк (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'))