2017-08-03 10 views
1

シンプルなシリアル/ Telnetクライアントを作成するためにArduinoとEthernet Shieldがコーディングされています。これは、シリアルターミナルプログラムを、ポート23を使用しているbbs.thebytexchange.comのようなTelnet BBSタイプのシステムに接続するのに問題ありません。同じクライアントを使用してArchボックスと通信すると、OKに接続します。直ちにArchボックスから5バイトを受信し、すべてが停止します。私がアーチボックスに何を送っても何も返されません。 5バイト(16進数)は次のとおりです。 18 20 23 27 24. Raspianを実行しているRaspberry Piに接続すると、同じ症状の4バイトが返されます(18 20 23 27)。LinuxにTelnetで接続する

標準のTelnetアプリケーションを使用してMacからTelnetを使用して両方のボックスに接続してログオンすることができ、各マシンのlocalhostにもTelnetで接続できるので、各Telnetサーバーが正常に動作していることは喜ばしいことです。私はシリアルTelnetを使用してTelnetでインターネットTelnetリソースを使用することができますが、Linuxのログオンプロンプトに接続する際には何か不明な点があります。

種類よろしく

ジョン

UPDATE:詳しい調査の結果、私は見ていますが、いくつかのオプションを交渉するために私を取得するために、サーバからの試みであることを示しています。私が見ているバイトはそれぞれFFで始まります(これは、FFが監視から除外されているため、これを最初に認識しませんでした)。バイトは、Telnetプロトコルの一部であり、次の意味:

  • FF FD 18ログアウト
  • FF FD 20のデータ入力端子
  • FF FDマーキング27出力
  • FF FD 24の端末タイプ

今質問はどうなりますか、これにはどうしたら対応できますか?

+0

telnetバイナリのソケットレベルのデバッグをオンにすると、エラーの詳細を表示できます。 'telnet -d 'を使用するか、telnetセッションタイプ 'toggle debug'を使用して、デバッグを有効または無効にします。 – Gaurav

+0

質問で述べたように、telnet を使用するとエラーはありません。私の手作りのTelnetクライアントは、Telnet BBSに接続するときにうまく動作しますが、Linuxログインに接続すると、私は前述のように応答します。私はこれが私が扱っていないアプリケーションプロトコルの一種だと思っています。 –

+0

クイック検索から、サーバーのリクエストのいずれかに、 'WONT'応答、つまりserver:' 0xFF xx' - > you: '0xFF 0xFC xx'で応答できるようです。例えば、 [ここ](http://mud-dev.wikidot.com/telnet:negotiation) – JimmyB

答えて

0

JimmyBの助けを借りて、私は自分の質問に答えるために必要なアプローチを発見しました。

前述のように、Telnetサーバーから受信したシーケンスは、サーバーが接続のいくつかのオプションをネゴシエートする試みです。これらのオプションは、各端のネットワーク仮想端末(NVT)のデフォルト設定を強化することを目的としています。これらのオプション要求は、JimmyBで示唆されているように単に承認する必要があります。

プロセスはRFC854で定義されています.DO要求に対してDOまたはDONTのいずれかを使用してWILL要求またはWONT要求に応答する必要があることが明確になります。

私の場合は、接続のデフォルトのNVTに満足しているので、これらの拡張は必要ありません。したがって、Linuxのログインプロンプトを表示するために、私はそれぞれのDO要求にWONTで応答します。私が受けた場合、私は同様に(FCによって示される)WONT応答

FF FC 18 

で応答

以下DO要求(FDオプション18 DOを示す)

FF FD 18 

を受信します私はDONT(FE)

01を返します

FF FB 18 

(FB)を要求します

FF FE 18 

これが役立ちます。

関連する問題