Порт Python Telnet 23 против 223 с разными результатами - PullRequest
2 голосов
/ 15 октября 2011

Когда я запускаю этот код Python 3.1 для доступа к устройству с помощью telnetlib, он работает как положено:

import telnetlib

tn = telnetlib.Telnet("15.39.100.126", "23")
tn.write(b"menu\n")
tn.write(b"0\n")
print(tn.read_all().decode('ascii'))

Затем я запускаю этот код (очень похоже на описанный выше, но этот порт представляет разные меню)на порт 223 и ничего не получите:

import telnetlib

tn = telnetlib.Telnet("15.39.100.126", "223")
tn.write(b"ipconfig\n")
tn.write(b"exit\n")
print(tn.read_all().decode('ascii'))

При запуске сеанса telnet для 223 вручную, он сообщает следующее:

WinCEPocket CMD v 6.00
\> 

Кто-нибудь сталкивался с чем-то подобным с другим поведением telnetс Python на одном устройстве, но с разными портами, или кто-нибудь знает, какой особый подход я должен использовать с WinCE Pocket?Порт 23 НЕ использует WinCE Pocket - только порт 223.Обе программы telnet одинаково хорошо работают из одной командной оболочки Windows.

1 Ответ

3 голосов
/ 15 октября 2011

Команда telnet сама делает разные вещи для порта 23 по сравнению с другими портами: в первую очередь она реализует согласование параметров telnet.Цель telnetlib - реализовать для вас протокол Telnet (согласование опций и т. Д.), Чтобы вы могли взаимодействовать со службой на порту 23, которая ожидает telnet на другом конце.Поскольку telnet команда не выполняет эти действия для порта 223, вполне вероятно, что ваше устройство не ожидает согласования параметров Telnet и находится в замешательстве из-за инициализации telnetlib (отправка параметров Telnet в диапазоне).

Решение состоит в том, чтобы использовать простой socket для взаимодействия с портом 223. Уже много примеров этого в SO.

...