2

この 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'))

223 への telnet セッションを手動で実行すると、次のように報告されます。

WinCEPocket CMD v 6.00
\> 

同じデバイスでポートが異なる Python で異なる telnet の動作でこのような問題に遭遇したことはありますか? または、WinCE Pocket でどのような特別なアプローチを取る必要があるかを知っている人はいますか? ポート 23 は WinCE Pocket を使用しません。ポート 223 のみが使用します。どちらの telnet プログラムも、同じ Windows コマンド シェルから同様に適切に実行されます。

4

1 に答える 1

3

コマンド自体は、telnetポート 23 と他のポートに対して異なることを行います。主に、telnet オプションのネゴシエーションを実装します。の目的はtelnetlib、Telnet プロトコル (オプション ネゴシエーションなど) を実装して、相手側で期待されるポート 23 のサービスと対話できるようにすることですtelnet。このtelnetコマンドはポート 223 に対してこれらのことを行わないため、デバイスが telnet オプションのネゴシエーションを期待しておらず、telnetlib(telnet オプションをインバンドで送信する) の初期化によって混乱している可能性があります。

解決策は、plain を使用socketしてポート 223 と対話することです。すでに SO には多くの例があります。

于 2011-10-14T22:36:51.987 に答える