it-swarm-vi.com

Làm thế nào tôi có thể giám sát lưu lượng cổng nối tiếp?

Có công cụ giám sát cổng nào để xem các gói được ghi trên cổng không? Tôi đặc biệt muốn kiểm tra xem chương trình của tôi được viết bằng Java có hoạt động hay không vì vậy tôi cần một loại công cụ nào đó để xem ứng dụng nhỏ của tôi có đang viết các thông báo tới cổng không. Làm thế nào để tôi làm điều này?

45
Deepak

Tôi đã tìm thấy các dự án có tên Linux serial Sniffer , jpnevulatorMoni . Hai người đầu tiên trông giống như họ làm chính xác những gì bạn muốn. Cái cuối cùng tự gọi nó là một màn hình, nhưng nó thực sự trông giống như một chương trình giao tiếp nối tiếp tiêu chuẩn.

17
Shawn J. Goff

socat là một công cụ để kết nối (gần) mọi thứ với (gần) mọi thứ và tee có thể nhân đôi luồng.
[.__.] Trong usecase của bạn, bạn có thể kết nối cổng nối tiếp của mình /dev/ttyS0 đến PTY /tmp/ttyV0, sau đó trỏ ứng dụng của bạn vào PTY và đặt socat tee out Input and Output ở đâu đó để bạn quan sát.

Googling "gỡ lỗi cổng nối tiếp pate tee" sẽ chỉ cho bạn một vài ví dụ, một ví dụ:

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

Tập tài liệu in.txtout.txt sau đó sẽ chứa dữ liệu đã chụp.

Điều này đã được xác nhận để làm việc bởi các nhà bình luận (@ogurets).

31
Alex Stragies

Tôi không nghĩ trình điều khiển nối tiếp có bất kỳ chức năng theo dõi nào cho phép bạn xem các gói. Bạn có thể sử dụng strace để quan sát tất cả các lần đọc và ghi từ ứng dụng của bạn:

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

Đây là cách cuối cùng tôi chọn

Cảm ơn câu trả lời của Gilles !

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; };};'

Xin lỗi, tôi sẽ giải thích ...

#!/bin/bash

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;
            };
        };
    '
  • Tôi sử dụng ls -l /proc/[0-9]*/fd/* | grep ttyUSB0 thay vì lsof ttyUSB0 bởi vì tôi thấy chúng đôi khi chậm.
  • Vì vậy, strace sẽ theo dõi chương trình hiện tại bằng cách sử dụng ttyUSB0
  • Cú pháp: tty${1:-USB0} sẽ cho phép, được sử dụng làm tập lệnh hoặc hàm, để chạy chúng với tên thiết bị nối tiếp làm đối số: ttySniff USB0 hoặc là ttySniff S0 và như thế.
  • Tập lệnh Perl sẽ unbackslash chuỗi được ghi bởi strace -s 9999.
  • Bạn có thể thay thế strace -e read bởi strace -e read,write hoặc là strace -e write tùy thuộc vào nhu cầu của bạn.

Lưu ý: Tôi chạy chúng bằng cách sử dụng cú pháp:

 script -t ttySniff.log 2>ttySniff.tm -c "./ttySniff.sh USB0"

vì vậy tôi có thể phát lại toàn bộ hoạt động và theo dõi thời gian thực hiện.

5
F. Hauri

interceptty thực hiện công việc đó:

interceptty /dev/ttyACM0 /dev/ttyDUMMY

hoặc, với định dạng đầu ra Nice và định cấu hình thiết bị phụ trợ và với bộ đệm dòng:

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

và sau đó kết nối với chương trình của bạn tới /dev/ttyDUMMY.

5
Golar Ramblar

Khi tôi gỡ lỗi tương tác của ứng dụng với cổng nối tiếp, tôi sử dụng moserial .

3
Renat Zaripov

Thử cái này:

screen /dev/tty.usbserial-blahblah 9600

làm việc cho tôi.

3
Mike

minicom bị thiếu trong danh sách các công cụ để giám sát các cổng nối tiếp. Sử dụng nó như ví dụ để nghe thiết bị arduino:

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

2
B.Kocis

Hãy xem ttyUSBSpy . Đó là trên giai đoạn alpha, nhưng nó hoạt động.

1
user37414
0
Antonio Petricca