プログラムは通常、私が実装したいTelnetプログラムです。
クライアント側では、ユーザーは自分のログインとパスワードを送信し、正しい場合はサーバーにコマンドを送信し始めます。
サーバー側では、システムのユーザー認証を確認し、それが真の場合は、ファイルに保存されているデフォルトのシェルを実行してpasswd
コマンドを実行する必要があります。
問題は、system
C関数を使用して彼のシェルを実行しようとすると、シェルが実行されて閉じられることです。ユーザーのために開いたシェルをsystem()
使用fork()
して終了した後に閉じるからです。exec()
プロセス内で新しいシェルを実行し、引き続き実行して次のコマンドを実行するにはどうすればよいですか?
答え1
そこに行く前に、Telnetプロトコルの仕様を読んでください(RFC 854、また見てくださいウィキペディアアイテムそのRFCの完全なリストを見るために)リモートログインは非常にこれは、さまざまなオペレーティングシステムと異なる文字エンコーディングを使用するシステムとの間に接続するように設計されているため、複雑なプロトコルです。他にもおすすめですいいえ非常に危険なので使用してください。
リモートでコマンドを実行するには、sshを使用してください。
答え2
このようなことについては、より簡単なものから始めたいと思うかもしれません。なぜなら、あなたはこの分野に慣れていないように聞こえるからです。たぶん、以前のtalk / talkd
コマンドラインプログラムとデーモンは理解しやすくなりますか?いくつかの貴重なリソースには、APUE(UNIX環境の高度なプログラミング)(Stevens)、UNPまたはUNIX用のネットワークプログラミング(Stevensも提供)、および効果的なTCP / IPプログラミング(Snader)が含まれており、タスクの種類に慣れることができます。現在進行中のタスク、特にTCP / IPタスクを実行します。
答え3
ただ使用することはできません。直接使用し、両方向にパイプを使用する必要がsystem
あります。 Ctrl キーストロークをキャプチャするには、ある種の端末インターフェイスも使用する必要があります。fork
exec