telnetlib
— клієнт Telnet¶
Вихідний код: Lib/telnetlib.py
Застаріло з версії 3.11, буде видалено у версії 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'))