Spec-Zone.ru › Python 3.5

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

См. также

RFC 854 - Спецификация протокола Telnet
Определение протокола Telnet.

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

Возвращает любые доступные данные в очереди данных (очень лениво).

Если соединение закрыто и нет доступных данных, генерируется исключение 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)

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

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

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

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

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

Telnet.set_option_negotiation_callback(callback)

Каждый раз, когда опция telnet считывается на входе, этот callback (если установлен) вызывается со следующими параметрами: callback(сокет telnet, команда (DO/DONT/WILL/WONT), опция). Далее никаких действий telnetlib не выполняет.

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.5/library/telnetlib.html

Spec-Zone.ru

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