Содержание страницы
20.14. telnetlib – Telnet-клиент¶telnetlib – Telnet client
Исходный код: 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[, port[, timeout]]])¶ Telnetпредставляет подключение к Telnet-серверу. По умолчанию экземпляр изначально не подключён; для установки соединения необходимо использовать методopen(). В качестве альтернативы имя хоста и необязательный номер порта можно передать конструктору, и в этом случае соединение с сервером будет установлено до возврата из конструктора. Необязательный параметр timeout задаёт тайм-аут в секундах для блокирующих операций, таких как попытка подключения (если не указан, используется глобальная настройка тайм-аута по умолчанию).Повторное открытие уже подключённого экземпляра не допускается.
Этот класс имеет множество методов
read_*(). Обратите внимание, что некоторые из них возбуждаютEOFErrorпри достижении конца соединения, поскольку по другим причинам они могут вернуть пустую строку. См. отдельные описания ниже.Изменено в версии 2.6: добавлен параметр timeout.
См. также
- RFC 854 – Спецификация протокола Telnet
Определение протокола Telnet.
20.14.1. Объекты Telnet¶Telnet Objects
Экземпляры Telnet имеют следующие методы:
-
Telnet.read_until(expected[, timeout])¶ Читает до тех пор, пока не встретится заданная строка expected или не пройдёт timeout секунд.
Если совпадение не найдено, возвращает то, что доступно, возможно пустую строку. Возбуждает
EOFError, если соединение закрыто и нет обработанных данных.
-
Telnet.read_all()¶ Читает все данные до EOF; блокируется до закрытия соединения.
-
Telnet.read_some()¶ Читает как минимум один байт обработанных данных, если только не достигнут EOF. Возвращает
'', если достигнут EOF. Блокируется, если данные недоступны немедленно.
-
Telnet.read_very_eager()¶ Прочитать всё, что возможно без блокировки ввода-вывода (нетерпеливо).
Возбуждает
EOFError, если соединение закрыто и нет обработанных данных. В противном случае возвращает'', если нет обработанных данных. Не блокируется, если только не в середине последовательности IAC.
-
Telnet.read_eager()¶ Прочитать легко доступные данные.
Возбуждает
EOFError, если соединение закрыто и нет обработанных данных. В противном случае возвращает'', если нет обработанных данных. Не блокируется, если только не в середине последовательности IAC.
-
Telnet.read_lazy()¶ Обработать и вернуть данные, уже находящиеся в очередях (лениво).
Возбуждает
EOFError, если соединение закрыто и нет доступных данных. В противном случае возвращает'', если нет обработанных данных. Не блокируется, если только не в середине последовательности IAC.
-
Telnet.read_very_lazy()¶ Вернуть любые данные, доступные в очереди обработанных данных (очень лениво).
Возбуждает
EOFError, если соединение закрыто и нет доступных данных. В противном случае возвращает'', если нет обработанных данных. Этот метод никогда не блокируется.
-
Telnet.read_sb_data()¶ Возвращает данные, собранные между парой SB/SE (начало/конец субопции). Колбэк должен обращаться к этим данным, когда вызывается с командой
SE. Этот метод никогда не блокируется.Новое в версии 2.3.
-
Telnet.open(host[, port[, timeout]])¶ Подключается к хосту. Второй необязательный аргумент – номер порта, по умолчанию равный стандартному порту Telnet (23). Необязательный параметр timeout задает тайм-аут в секундах для блокирующих операций, например попытки подключения (если не указан, используется глобальная настройка тайм-аута по умолчанию).
Не пытайтесь переоткрыть уже подключенный экземпляр.
Изменено в версии 2.6: добавлен параметр timeout.
-
Telnet.msg(msg[, *args])¶ Выводит отладочное сообщение, когда уровень отладки равен
>0. Если присутствуют дополнительные аргументы, они подставляются в сообщение с помощью стандартного оператора форматирования строк.
-
Telnet.set_debuglevel(debuglevel)¶ Устанавливает уровень отладки. Чем выше значение debuglevel, тем больше отладочного вывода выводится (на
sys.stdout).
-
Telnet.close()¶ Закрывает подключение.
-
Telnet.get_socket()¶ Возвращает объект сокета, используемый внутри.
-
Telnet.fileno()¶ Возвращает файловый дескриптор объекта сокета, используемого внутри.
-
Telnet.write(buffer)¶ Записывает строку в сокет, удваивая любые IAC-символы. Может блокироваться, если соединение заблокировано. Может возбуждать
socket.error, если соединение закрыто.
-
Telnet.interact()¶ Функция взаимодействия, эмулирующая очень простой Telnet-клиент.
-
Telnet.mt_interact()¶ Многопоточная версия
interact().
-
Telnet.expect(list[, timeout])¶ Читает до совпадения с одним из списка регулярных выражений.
Первый аргумент – список регулярных выражений, скомпилированных (
regex objects) или нет (строки). Необязательный второй аргумент – тайм-аут в секундах; по умолчанию блокируется бесконечно.Возвращает кортеж из трёх элементов: индекс в списке первого совпавшего регулярного выражения; возвращённый объект совпадения; и текст, прочитанный до совпадения включительно.
Если встречен конец файла и не прочитано ни одного текста, возбуждает
EOFError. В противном случае, если ничего не совпало, возвращает(-1, None, text), где text – текст, полученный на данный момент (может быть пустой строкой, если произошёл тайм-аут).Если регулярное выражение заканчивается жадным совпадением (например,
.*) или если более одного выражения могут совпадать с одними и теми же входными данными, результаты недетерминированы и могут зависеть от времени ввода-вывода.
-
Telnet.set_option_negotiation_callback(callback)¶ Каждый раз, когда во входном потоке читается опция telnet, этот колбэк (если установлен) вызывается со следующими параметрами: колбэк(telnet socket, command (DO/DONT/WILL/WONT), option). После этого telnetlib не выполняет никаких других действий.
20.14.2. Пример Telnet¶Telnet Example
Простой пример, иллюстрирующий типичное использование:
import getpass
import sys
import telnetlib
HOST = "localhost"
user = raw_input("Enter your remote account: ")
password = getpass.getpass()
tn = telnetlib.Telnet(HOST)
tn.read_until("login: ")
tn.write(user + "\n")
if password:
tn.read_until("Password: ")
tn.write(password + "\n")
tn.write("ls\n")
tn.write("exit\n")
print tn.read_all()