Spec-Zone.ru › Python 3.6

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.

21.19.1. Объекты 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()

Считывает все доступные данные без блокировки (жадно).

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

21.19.2. Пример 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'))

© 2001–2020 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.6/library/telnetlib.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API