2011-01-20 15 views
4

私の状況は次のとおりです:私は小さなギズモをたくさん持っています(ルータにかなり近いですが、とにかく無関係です)。彼らはベアボーンのMIPSベースのLinuxディストリビューションを実行しています。Linux:既に実行中のプロセスの出力をキャプチャします。(純粋なC!)

これらを制御するには、(シリアルポート経由で)telnetして対話型のbashのようなシェルにコマンドを発行し、出力を書き戻します。シェルの入出力はどちらも/ dev/ttyAS0にアタッチされています。

ここで私はすべてを自動化したいと思います。ギズモの中で実行されるプログラムを書いてください。あるポートでリッスンする小さなサーバーになります。そして、そのシェルにコマンドを渡し、サーバに接続している人には誰でも中継できます。

I:

1)インストールすることができます(小、ギズモ 2)変更することはできませんOS、スタートアップスクリプト、シェル、何 3)内部< 500キロバイト)のプログラムはrootアクセス権を持っている 4) SOAPサーバを書く方法を知っている 5)SOAPメッセージを取得し、それをコマンドに変換して/ dev/ttyAS0に注入する方法を知っている 6)DONT KNOWはシェルの返信をキャプチャする方法を教えてください。シェルの応答を返し、それをSOAPメッセージに戻して元の照会者に返信します。

基本的に、問題は6)です:どのようにして/ dev/ttyAS0に文字列を注入してシェルに実行させたのか、シェルの出力をキャプチャしますか?

私はつまり、私は私はGDB(またはstraceのを)持っていた場合、私はボックス内で実行されているシェルの標準出力を変えることができることを知っているが、私はそこにそれをインストールすることはできません

http://etbe.coker.com.au/2008/02/27/redirecting-output-from-a-running-process/

の認識しています - それはですあまりにも大きく、とにかくこのアプローチはあまりにもハックのようです。だから、

、要約:

をルートは、プロセスが開始された方法へのアクセスがないと、GDBまたはstraceのなしで、PURE Cには、すでに実行中のプロセスの標準出力をキャプチャすることができますどのように?

- ほぼ同等 - 端末に書き込まれているものをキャプチャする方法、IN PURE C?

+0

非常に困難です。 :-p – maxelost

答えて

2

reptyrをご覧ください。あなたのシステムのために働くには、おそらくいくつかの適応が必要でしょう。

+1

ありがとう、男!実際にはrettyrはi386のみですが、ptraceを使用する方法は私に多くの啓発をもたらしました!問題は解決した、私は今、最終的なプログラムを持っている:) – Leszek

0

kermitスクリプトでシリアルポートを駆動しようとしましたか?私はおそらくデバイス上でより巧妙なプロキシを挿入しようとすると、既存のインターフェイスを試してみてください。

実際にデバイスで取得したい場合は、ソースがscreenまたはkermitなどのものを見て、それらがttysとやり取りする方法を理解することができます。

+0

実際にカーミットがこの問題の私の好みの解決策ですが、私はそれを試してみましたが効果がありますが、この全体的な練習は仕事のためのものです(標準の低コストのギズモを取り上げ、それらが設計されていないようなやり方で)、その要件はSOAPによって制御されるという要件です。上記のように、私は小さなSOAPサーバーをクロスコンパイルしてシェルを制御できるようになりました。問題はシェルの出力を読み取ることです。多分私は単に/ dev/ttyAS0から直接読むことができたでしょうか?(それ以外は何も出力しないはずです)しかし、未処理の端末からどのように読み込むのですか? – Leszek

関連する問題