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