7

ターミナルと通信するサードパーティによって開発された Linux プロセスがあります。デバッグのために、通信が行き来するのを見たいです。

cat(一方向を見るために)トリックを行うと思うかもしれません:

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

...しかし、そうではありません。むしろ、catアプリケーション向けのデータの半分を盗みますが、これはほとんど価値がありません。

third-party-app は、想定するようにハードコーディングされて/dev/ttyいます。

通信をスパイするために私が見つけた 1 つの方法は、/dev/ttyデバイスの名前を変更し、その場所で/dev/real_tty呼び出される名前付きパイプを作成することです。/dev/tty次に実行します:

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

... から名前付きパイプにデータ/dev/real_ttyをコピーすることで、少なくとも の出力を確認できます。/dev/real_tty/dev/ttystdout

この種の機能は機能しますが、非常に危険な感じがし、デバイスを交換するという巧妙な方法に依存しています。また、名前付きパイプは一方向にしかデータを伝送しないため、双方向には機能しません。

これを行う正しい方法は何ですか?

不思議に思っている方のために説明すると、TTY デバイスはマイクロコントローラーへの RS-232 リンクです。情報は機密でも安全でもありません。すべてのプロセス (アプリケーションとスパイ) は root として実行できます。

4

7 に答える 7

3

strace/ltrace の使用を検討しましたか? 実行中のシステム コールを確認できます。特に、実行中の write/ioctl などの呼び出しを確認できます。

于 2010-08-04T22:30:36.940 に答える
2

RS-232 ? RxD/TxD/GND ラインをクリップで軽く叩くだけです。DCDやDTRなどを気にするデバイスを見たのはずっと昔のことです。

于 2010-08-04T22:54:17.013 に答える
1

psudo script-terminalを使用してこれを行うプログラムが存在します。デバイス/dev/ttyは通常特殊であり、現在のプロセスの制御端末を参照するため、名前の変更に頼る必要がない場合があります。

script疑似端末を開き、その新しいシェルを制御端末としてシェルの別のインスタンスを実行します(したがって/dev/tty、このシェルとその子プロセスのこの疑似端末を参照します)。-cオプションを使用すると、シェルではなく特定のコマンドを実行できます。

の主な問題scriptは、出力ファイル(デフォルト)でキャプチャされたデータがどちらの方向に進んでいたかを判断できないことです。双方向に./typescript流れるデータは同じファイルにダンプされ、を使用したときに画面に表示されるものと同じように見えます。インタラクティブ端末(エスケープ、キャリッジリターン、そのような間抜けなもの、および通常表示される文字を除く)。

とにかく、私はこの質問が長い間答えられていることを知っていますが、誰かが同様の解決策を探して、実際のシリアルポートを使用していなかった場合、これは彼らを助けるかもしれないと思いました。

于 2010-10-27T19:39:03.577 に答える
1

いくつかの代替手段があります:

GDB で自分でやる:実行中のプロセスからの出力のリダイレクト

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

Distributed MultiThreaded CheckPointingは、多数のマシンに分散し、ソケットで接続されたプログラムの任意のグループの状態を透過的にチェックポイントするツールです。

于 2010-08-04T22:39:12.460 に答える
1

slsnifを見ることができます。それはあなたが望むことを正確に行います、または自分で書くことに興味がある場合は、ソースが利用可能で、それがどのように機能するかを確認できます.

于 2010-08-04T23:04:13.627 に答える
0

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

fromwrite()を呼び出す前にいくつかの作業を行う独自の共有ライブラリを作成することもできます。次に、プロセスの開始時に環境変数を使用してライブラリをロードできます。write()libc.soLD_PRELOAD

于 2010-08-06T20:26:22.943 に答える
0

単純ではありませんが (少なくとも私にとってはそうではありません)、tty シリアル ドライバーで機能するはずのメカニズムは回線規則です。

于 2010-08-06T20:17:59.083 に答える