telnetlib — Клиент Telnet

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

Не рекомендуется, начиная с версии 3.11: Модуль 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 (начало субпереговоров).

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()

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

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

Telnet.read_eager()

Ознакомьтесь с легкодоступными данными.

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

Telnet.read_lazy()

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

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

Telnet.read_very_lazy()

Возвращает любые данные, имеющиеся в очереди cooked (очень лениво).

Вызывает 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()

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

Telnet.write(buffer)

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

Вызывает auditing event telnetlib.Telnet.write с аргументами self, buffer.

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

Telnet.interact()

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

Telnet.mt_interact()

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

Telnet.expect(list, timeout=None)

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

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

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

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

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

Telnet.set_option_negotiation_callback(callback)

Каждый раз, когда на входном потоке считывается опция telnet, вызывается этот обратный вызов (если он установлен) со следующими параметрами: callback(telnet socket, command (DO/DONT/WILL/WONT), option). Никаких других действий после этого 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'))
Вернуться на верх