Spec-Zone.ru › Python 3.7

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

Чтение всего доступного, без блокировки ввода-вывода (жадно).

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

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

Spec-Zone.ru

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