Spec-Zone.ru › Python 3.8

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

Считывает все данные до конца файла в виде байтов; блокируется до закрытия соединения.

Telnet.read_some()

Считывает не менее одного байта обработанных данных, если не достигнут конец файла. Возвращает b'', если достигнут конец файла. Блокируется, если данные не доступны немедленно.

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 задаёт таймаут в секундах для блокирующих операций, таких как попытка подключения (если не указан, будет использоваться глобальное значение таймаута по умолчанию).

Не пытайтесь повторно открыть уже подключённый экземпляр.

Вызывает событие аудита аудита 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, если соединение закрыто.

Вызывает событие аудита аудита telnetlib.Telnet.write с аргументами 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 — полученные байты до сих пор (могут быть пустыми байтами, если произошёл таймаут).

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

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–2022 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.8/library/telnetlib.html

Spec-Zone.ru

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