Содержание страницы
21.19. telnetlib – Telnet-клиент¶telnetlib – Telnet client
Исходный код: 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.
21.19.1. Объекты Telnet¶Telnet Objects
Экземпляры Telnet имеют следующие методы:
-
Telnet.read_until(expected, timeout=None)¶ Читать до тех пор, пока не встретится заданная байтовая строка 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=0[, 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-символы. Это может блокироваться, если соединение заблокировано. Может вызвать
OSError, если соединение закрыто.Изменено в версии 3.3: Раньше этот метод вызывал
socket.error, который теперь является псевдонимомOSError.
-
Telnet.interact()¶ Функция взаимодействия, эмулирующая очень простой Telnet-клиент.
-
Telnet.mt_interact()¶ Многопоточная версия
interact().
-
Telnet.expect(list, timeout=None)¶ Читает до совпадения с одним из списка регулярных выражений.
Первый аргумент – список регулярных выражений, либо скомпилированных (объекты regex), либо нет (байтовые строки). Второй необязательный аргумент – тайм-аут в секундах; по умолчанию блокировка бесконечна.
Возвращает кортеж из трех элементов: индекс в списке первого регулярного выражения, которое совпало; возвращаемый объект совпадения; и байты, прочитанные до совпадения включительно.
Если достигнут конец файла и не прочитано ни одного байта, вызывается
EOFError. В противном случае, когда ничего не совпало, возвращается(-1, None, data), где data – полученные на данный момент байты (может быть пустыми байтами, если произошел тайм-аут).Если регулярное выражение заканчивается жадным совпадением (например,
.*) или если более одного выражения могут совпадать с одними и теми же входными данными, результаты недетерминированы и могут зависеть от времени ввода-вывода.
-
Telnet.set_option_negotiation_callback(callback)¶ Каждый раз, когда во входном потоке читается опция telnet, этот колбэк (если установлен) вызывается со следующими параметрами: колбэк(telnet socket, command (DO/DONT/WILL/WONT), option). После этого telnetlib не выполняет никаких других действий.
21.19.2. Пример Telnet¶Telnet 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'))