telnetlib
— Клиент Telnet¶
Исходный код: Lib/telnetlib.py.
Не рекомендуется, начиная с версии 3.11: Модуль telnetlib
устарел (подробности и альтернативы см. в PEP 594).
Модуль 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
()¶ Прочитайте все, что можно без блокировки при вводе/выводе (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 (субопция begin/end). Обратный вызов должен получить доступ к этим данным, когда он был вызван командой
SE
. Этот метод никогда не блокируется.
-
Telnet.
open
(host, port=0[, timeout])¶ Подключение к хосту. Необязательным вторым аргументом является номер порта, который по умолчанию равен стандартному порту Telnet (23). Необязательный параметр timeout задает таймаут в секундах для блокировки операций, таких как попытка соединения (если он не указан, будет использоваться глобальный таймаут по умолчанию).
Не пытайтесь повторно открыть уже подключенный экземпляр.
Вызывает auditing event
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
, если соединение закрыто.Вызывает auditing event
telnetlib.Telnet.write
с аргументамиself
,buffer
.Изменено в версии 3.3: Этот метод раньше вызывал
socket.error
, который теперь является псевдонимомOSError
.
-
Telnet.
interact
()¶ Запишите байтовую строку в сокет, удваивая все символы IAC. Может блокироваться, если соединение заблокировано. Может поднять , если соединение закрыто.
-
Telnet.
mt_interact
()¶ Многопоточная версия
interact()
.
-
Telnet.
expect
(list, timeout=None)¶ Читайте до тех пор, пока из списка регулярных выражений не совпадет одно.
Первый аргумент - список регулярных выражений, скомпилированных (regex objects) или нескомпилированных (байтовые строки). Необязательный второй аргумент - таймаут, в секундах; по умолчанию блокируется бесконечно.
Возвращает кортеж из трех элементов: индекс в списке первого регулярного выражения, которое совпадает; возвращаемый объект совпадения; и байты, прочитанные до совпадения включительно.
Если найден конец файла и не было прочитано ни одного байта, выведите
EOFError
. В противном случае, когда ничего не найдено, возвращается(-1, None, data)
, где data - это полученные на данный момент байты (могут быть пустые байты, если произошел таймаут).Если регулярное выражение заканчивается жадным соответствием (например,
.*
) или если более одного выражения могут соответствовать одному и тому же входу, результаты не являются детерминированными и могут зависеть от времени ввода/вывода.
-
Telnet.
set_option_negotiation_callback
(callback)¶ Каждый раз, когда на входном потоке считывается опция telnet, вызывается этот обратный вызов (если он установлен) со следующими параметрами: callback(telnet socket, command (DO/DONT/WILL/WONT), option). Никаких других действий после этого 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'))