9

こんにちは、

ユーザー名とパスワードを使用してログインし、デバイスの動作を操作できる telnet インターフェイスを公開するデバイスがあります。

クライアントから telnet の側面を隠し、代わりにユーザーがデバイスを制御するためのインターフェイスを提供する C プログラムを作成する必要があります。

続行する良い方法は何でしょうか。簡単なソケット プログラムを作成しようとしましたが、ログイン プロンプトで停止します。私の推測では、私は TCP プロトコルに従っていません。

誰かがこれを試みたことがありますか?これを行うためのオープンソース ライブラリはありますか?

ありがとう

追加: 最終的には、Web API/Web サービスを介して公開したいと考えています。プラットフォームは Linux です。

4

9 に答える 9

10

Python がオプションの場合は、telnetlibを使用できます。

コード例:

#!/usr/bin/env python
import getpass
import sys
import telnetlib

HOST = "localhost"
user = raw_input("Enter your remote account: ")
password = getpass.getpass()

tn = telnetlib.Telnet(HOST)

tn.read_until("login: ")
tn.write(user + "\n")
if password:
    tn.read_until("Password: ")
    tn.write(password + "\n")

tn.write("ls\n")
tn.write("exit\n")

print tn.read_all()
于 2010-03-25T21:39:31.030 に答える
4

telnet のプロトコルは非常に単純です... TCP 接続を作成し、ASCII データを送受信するだけです。それだけです。

したがって、実際に行う必要があるのは、TCP 経由で接続し、TCP ソケットから文字を読み取り、それを解析して GUI を更新するプログラムを作成したり、GUI でコントロールを操作するユーザーに応答してソケットに文字を書き込んだりするだけです。

それをどのように実装するかは、インターフェイスの構築に使用しているソフトウェアに大きく依存します。TCP 側では、select() に関する単純なイベント ループで十分です。

于 2010-03-25T22:09:16.217 に答える
3

telnet は端末に接続されたソケットにすぎませんが、完全ではありません。接続が確立された直後に渡される制御文字がいくつかあると思います。デバイスが予期しない制御データを送信している場合、プログラムが混乱する可能性があります。まだ行っていない場合は、wireshark (または tshark または tcpdump) をダウンロードして、接続を監視します。Wireshark (以前の ethereal) はクロス プラットフォームであり、単純なものには非常に使いやすいです。tcp.port == 23 でフィルタリング

于 2010-03-26T18:54:35.910 に答える
2

Beej の Guide to Network Programmingは、C でのネットワーク プログラミングの優れた入門書だと思います。

于 2010-03-26T08:03:02.423 に答える
2

これはあなたにとって役に立つかもしれません。

于 2010-03-25T21:40:55.073 に答える
2

Puttyのソース コードをダウンロードします。Putty の Telnet バックエンドである TELNET.C を調べます。

于 2010-03-25T21:42:34.723 に答える
1

アプリケーションが簡単でない限り、GUIをどのように作成するかを理解することから始めるのがよいでしょう。これはより大きな質問であり、デバイスにTelnetで接続するよりもプロジェクトに大きな影響を与えます。あなたは最初にCについて言及しますが、それからPythonについて話し始めます。これにより、あなたはこの問題に関して比較的柔軟であると私は信じています。

言語/プラットフォームを設定したら、telnetライブラリを探します。妥当なものがすでに実装されているはずです。

于 2010-03-26T08:18:02.360 に答える
0

ここでソースコードをチェックしてください。Telnet プロトコルを理解するのに大いに役立ちました。

于 2010-06-17T23:41:27.700 に答える
0

telnet クライアントのオプションを参照してください: 任意のリッスン ソケットでヒットescape]し、クライアントに入ります。

telnet> help
telnet> set ?
于 2014-03-12T09:22:05.013 に答える