シリアルポートトラフィックを監視するにはどうすればよいですか?


40

ポートに書き込まれたパケットを監視するポート監視ツールはありますか?Javaで書かれたプログラムが機能するかどうかを特に確認したいので、小さなアプリケーションがポートにメッセージを書き込んでいるかどうかを確認するための何らかのツールが必要です。どうすればいいですか?


5
パケットはポートに書き込まれません。キャラクターは。イーサネットとはまったく違います。
ローレンス

回答:


17

Linux Serial Snifferjpnevulator、およびMoniというプロジェクトを見つけました。最初の2つは、希望どおりに動作するように見えます。最後の1つはそれ自体をモニターと呼びますが、実際には標準のシリアル通信プログラムのように見えます。


1
ありがとう!! 試してみます。ちなみに私は私のJava側から問題を解決しました。私は\ rが欠落していたため、私のメッセージがポートに書き込まれませんでした。とにかくありがとう!!
ディーパック

3
«LInux Serial Sniffer»はバグが多く、着信データを完全に削除するため、実際にシリアルをリッスンしている別のアプリケーションは何も表示されません。しかし、少なくとも、外に出るデータは問題なく行くようです。
こんにちは天使

3
jpnevulator FAQから:「Jpnevulatorは、カーネルとアプリケーションの間に位置するようには構築されていません。」
-Shelvacu

1
Moniを参照するリンクは無効です。
ヤロン

1
3つのコメントのため-1:Linuxのシリアルスニファはバグがあり、その後、Jpnevulatorは、カーネルとアプリケーションの間に座って構築されていなかったとfinaly モニが死んでいる 3つの外部リンクへの...この答えはちょうどポイントと真の解決策を与えません。(3つのリンクで3つの失敗、何も残しません!)
F.ハウリ

30

は(ほぼ)すべてを(ほぼ)すべてに接続するツールであり、はストリームを複製できます。
ユースケースでは、シリアルポート/dev/ttyS0をPTY /tmp/ttyV0に接続してから、アプリケーションをPTYにtee向けて、監視するためにどこかに入出力を設定することができます。

「socat serial port pty tee debug」をグーグルで検索すると、次のようないくつかの例が示されます。

socat /dev/ttyS0,raw,echo=0 \
SYSTEM:'tee in.txt |socat - "PTY,link=/tmp/ttyV0,raw,echo=0,waitslave" |tee out.txt'

ファイルin.txtout.txtその後、取得したデータが含まれています。

これは、コメンター(@ogurets)によって機能することが確認されています。


1
試してみて、入力と出力の両方を記録してください。Debian JessieパッケージのSocatバージョン「1.7.2.4 + sigfix」。
オグレット

アイデアは良いですが、socatioctl呼び出しをプロキシすることさえできません。
ペテルはモニカを

17

シリアルドライバーには、パケットを監視できるトレース機能がないと思います。を使用straceして、アプリケーションからのすべての読み取りと書き込みを監視できます。

strace -s9999 -o myapp.strace -eread,write,ioctl ./myapp

1
nothignが接続されている場合、ポートにパケットを送信できますか?
ディーパック

straceは、ポートに文字を送信しようとしたかどうか、およびカーネルが試行したときに応答した内容を通知します。フロー制御設定に応じて、文字が切断されたTXDピンに到達する場合と到達しない場合があります。
ジェイセン

おかげで、この答えに基づいて私の動的straceを見てください!
F.ハウリ

4

interceptty その仕事をします:

interceptty /dev/ttyACM0 /dev/ttyDUMMY

または、素敵な出力形式とバックエンドデバイスの設定、およびラインバッファリングを使用します。

interceptty -s 'ispeed 19200 ospeed 19200' -l /dev/ttyACM0 /dev/ttyDUMMY | interceptty-nicedump

そして、プログラムに接続します/dev/ttyDUMMY


@AlexStragies:私のArch Linuxシステムにあります。AURページ:aur.archlinux.org/packages/interceptty、ソースのコピー:repo.j5lx.eu/archive/interceptty/interceptty-0.6.tar.gz
ゴラーランブラー

私はそれをダウンロードし(ファイルをwgetクリック.tar.gzするgccとどういうわけか壊れているように見えたので)、インストールしmake、そして実行./configureし、そしてしなければなりませんでしたmake install。OPと私が望むものを正確に行います。
グレアム・モス

あなたの答えは最高です。
ペテルはモニカを


3

これを試して:

screen /dev/tty.usbserial-blahblah 9600

私のために働く。


25
これによりポートが開かれ、ポートの制御が引き継がれるため、他のユーザーはポートを使用できません。これは、トラフィックを「監視」または「スニッフィング」しません。
イアンM

3

これは私が最終的に選択する方法です

ジルの答えに感謝します

strace -s 9999 -e read -ffp $(sed '/ttyUSB0/s/^.*proc.\([0-9]\+\).fd.*/\1/p;d' <(ls -l /proc/[1-9]*/fd/* 2>/dev/null)) 2>&1 | perl -e '$|=1;my %qa=('a'=>7,'b'=>10,'e'=>33,'f'=>14,'n'=>12,'r'=>15,'t'=>11);sub cnv { my $ch=$_[0];$ch=$qa[$1] if $ch=~/([abefnrt])/;return chr(oct($ch));  };while (<>) { /^read.\d+,\s+"(.*)",\s\d+.*$/ && do { $_=$1;s/\\(\d+|[abefnrt])/cnv($1)/eg;print; };};'

申し訳ありませんが、説明します...

strace -s 9999 -e read -ffp $(
    sed "/tty${1:-USB0}/s/^.*proc.\([0-9]\+\).fd.*/\1/p;d" <(
        ls -l /proc/[1-9]*/fd/* 2>/dev/null
    )
) 2>&1 |
    perl -e '
        $|=1;
        my %qa=('a'=>7,'b'=>10,'e'=>33,'f'=>14,'n'=>12,'r'=>15,'t'=>11);
        sub cnv {
            my $ch=$_[0];
            $ch=$qa[$1] if $ch=~/([abefnrt])/;
            return chr(oct($ch));
        };
        while (<>) {
            /^read.\d+,\s+"(.*)",\s\d+.*$/ && do {
                $_=$1;
                s/\\(\d+|[abefnrt])/cnv($1)/eg;
                print;
            };
        };
    '
  • 私はそれらを時々遅く見たのでls -l /proc/[0-9]*/fd/* | grep ttyUSB0代わりに使用しますlsof ttyUSB0
  • straceは現在のプログラムをトレースします ttyUSB0
  • 構文:tty${1:-USB0}スクリプトとして使用され、シリアルデバイス名を引数として実行することを許可します:ttySniff USB0などttySniff S0
  • Perlスクリプトはunbackslash、によってログに記録される文字列straceです。

注:script -t全体を再生してタイミングの実行を追跡できるように、使用して実行します。


シリアルポートから来る可能性のあるものについては、セキュリティ上の考慮事項はありません!
F.ハウリ

素晴らしい、うまくいきました、ありがとう!
テクノ

1

見ていttyUSBSpyを。アルファ段階ですが、動作します。


2
そうではありません。それはpythonで書かれており、コードはsomeをインポートimport pcopyします。
こんにちは天使

2
ソフトウェア/ホームページは放棄されたようです。パッケージマネージャーにはありません。
アレックスStragies

1

minicomシリアルポートを監視するためのツールのリストから欠落しています。たとえば、arduinoデバイスを聞くために使用します。

minicom --device /dev/ttyACM0 --baud 9600


OPは「モニター」を作成しましたが、「スニッファー」を意味しました(=転送中のトラフィックを読み取ることができます)マイクからの以下回答も同じ間違いを犯しており、そこのコメントも用語の問題を説明しています。
アレックスストラジェス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.