telnetlib — клієнт Telnet

Вихідний код: Lib/telnetlib.py

Deprecated since version 3.11, will be removed in version 3.13: Модуль 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 (Початок субузгодження).

Availability: not Emscripten, not WASI.

This module does not work or is not available on WebAssembly platforms wasm32-emscripten and wasm32-wasi. See WebAssembly platforms for more information.

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)

Читати, доки не буде знайдено заданий рядок байтів, очікуваний, або доки не мине тайм-аут секунд.

Якщо збігів не знайдено, поверніть усе, що є, натомість, можливо, порожні байти. Викликайте EOFError, якщо з’єднання закрито і немає готових даних.

Telnet.read_all()

Читати всі дані до EOF як байти; блокувати, доки з’єднання не буде закрито.

Telnet.read_some()

Зчитувати принаймні один байт готових даних, якщо EOF не влучено. Повертає b'', якщо EOF досягнуто. Блокувати, якщо дані не доступні відразу.

Telnet.read_very_eager()

Читати все, що можна без блокування в I/O (охоче).

Викликати 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 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'))