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