どのように私は、プロセスと端末間の通信をスパイすることができますか?

StackOverflow https://stackoverflow.com/questions/3410348

質問

私は、サードパーティが開発したLinuxプロセスを持っている端末と通信。デバッグのために私は前後に戻って通信を見たいと思っています。

一つは、(一つの方向を見るために)catは、トリックを行うだろうと思うかもしれません。

    ./third-party-app &
    cat /dev/tty

...しかし、それはしません。むしろ、catは、データの半分はほとんど価値がないアプリケーションのために意図盗むされます。

サードパーティアプリケーションがハードコーディングされ/dev/ttyを想定することである。

私はコミュニケーションをスパイすることが分かっ一つの方法は、たとえば、/dev/tty/dev/real_ttyデバイスの名前を変更し、その代わりに名前付きパイプと呼ばれる/dev/ttyを作成することです。その後、ランニングます:

    cat /dev/real_tty | tee /dev/tty &

...意志少なくとも私は/dev/real_ttyから名前付きパイプ/dev/real_tty/dev/ttyにデータをコピーすることによって、stdoutの出力を見てみましょう。

この作品のようなものが、それは本当に危険な感じ、とデバイスの交換の詐欺に依存しています。名前付きパイプは一方向にしかデータを運ぶので、それはまた、両方向に仕事をしません。

これを行うための正しい方法は何でしょうか。

誰のが不思議場合は、TTYデバイスは、マイクロコントローラへのRS-232リンクです。情報が機密または固定されていないです。すべてのプロセス(アプリケーションやスパイ)はrootで実行することができます。

役に立ちましたか?

解決

あなたは slsnif のを見てみることができます。それはあなたがしたい、またはあなたが自分でものを書くに興味があるなら、ソースは、それがどのように動作するかを確認するために利用可能であるかを正確に行います。

他のヒント

あなたは straceの/ ltraceのを使用して考えがありますか?あなたが書き込み/ IOCTLなどの呼び出しが行われて見ることができ、特に、それが作っているシステムコールを見ることができます。

RS-232 の?ただ、クリップでのRxD / TxDの/ GNDラインをタップします。私は、任意のデバイスでもなどDCD、DTR、気に見てきたので、それは永遠にされています。

いくつかの選択肢があります:

GDBでそれを行うYouself:<のhref = "http://etbe.coker.com.au/2008/02/27/redirecting-output-from-a-running-process/" のrel = "nofollowをnoreferrer 「> の

CryoPID のあなたは、Linuxで実行中のプロセスの状態をキャプチャし、それをファイルに保存することができます。このファイルは、その後、再起動後に、あるいは別のマシン上のいずれか、後でプロセスを再開するために使用することができます。

透過的にするツールですの

分散型マルチスレッドチェックポイント プログラムの広がりの任意のグループの状態をチェックポイント 多くのマシン間で、ソケットで接続されます。

scriptプログラムは、この使用してpsudo末端を行うために存在します。あなたは、物事の名前を変更するに頼らなければならなかったしていない可能性がありので。

デバイス/dev/ttyは、通常は特別であり、現在のプロセスの制御端末を指し、 (scriptは、このシェルとその子プロセスのために、このpsudo端子を指して)

/dev/ttyはpsudo端末を開き、そのは、端末制御として、新しいシェルを使用して、シェルの別のインスタンスを実行します。 -cオプションは、あなたのシェルではなく、特定のコマンドを実行できます。

scriptの主な問題は、データが出力ファイル(デフォルトでは./typescript)で撮影したやり方伝えるつもりだったことは不可能であるということです - 両方の方法を流れるデータは、同じファイルにダンプされ、上で表示されるものと似ています(エスケープ、キャリッジリターン、および間抜けスタッフそのようなだけでなく、正常に表示された文字を含むを除く)対話型端末を用いてスクリーン。

とにかく、私はこの質問が長いので、回答されていることを知っているが、私は誰もが同様のソリューションを検索していたし、実際のシリアルポートを使用していなかった場合は、これは彼らを助けるかもしれないと考えています。

ここの人々は、すでに良い提案をしたが、ここでは別だています:

またwrite()からwrite()を呼び出す前に、いくつかの作業を行い、独自のlibc.soとの共有ライブラリを書くことができます。そして、あなたはあなたのライブラリーをロードするためにLD_PRELOAD環境変数を使用することができたときに、プロセスが開始されます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top