it-swarm-tr.com

Seri port trafiğini nasıl izleyebilirim?

Limanda yazılı paketleri izlemek için herhangi bir port izleme aracı var mı? Özellikle benim programın Java) çalışır böylece kontrol etmek istiyorum, bu yüzden benim küçük uygulama mesajları bağlantı noktasına yazıp yazmadığını görmek için bir tür araç gerekir.

45
Deepak

Linux Seri Sniffer , jpnevulator ve Moni adlı projeler buldum. İlk ikisi tam olarak ne istersen yaparlar. Sonuncusu kendine bir monitör diyor, ama aslında standart bir seri iletişim programına benziyor.

17
Shawn J. Goff

socat (neredeyse) her şeyi (neredeyse) her şeye bağlamak için bir araçtır ve tee akışları çoğaltabilir.
Usecase'inizde seri bağlantı noktanızı /dev/ttyS0 bir PTY'ye _ /tmp/ttyV0, ardından uygulamanızı PTY'ye yönlendirin ve gözlemlemeniz için bir yere Socat tee out Girdi ve Çıktı alın.

"Socat serial port pty tee debug" adlı googling sizi birkaç örneğe yönlendirecektir, bunlardan biri:

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

Dosyalar in.txt ve out.txt daha sonra yakalanan verileri içerecektir.

Bunun yorumcular (@ogurets) tarafından çalıştığı doğrulandı.

31
Alex Stragies

Seri sürücünün paketleri izlemenize izin veren herhangi bir izleme işlevselliği olduğunu düşünmüyorum. Başvurunuzdaki tüm okuma ve yazma işlemlerini gözlemlemek için strace kullanabilirsiniz:

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

Sonunda böyle seçtim

Gilles'in cevabı !

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

Üzgünüm, açıklayacağım ...

#!/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;
            };
        };
    '
  • Kullanırım ls -l /proc/[0-9]*/fd/* | grep ttyUSB0 onun yerine lsof ttyUSB0 çünkü onları bazen yavaş gördüm.
  • Böylece strace ttyUSB0
  • Sözdizimi: tty${1:-USB0}, komut dosyası veya işlev olarak kullanılan, bunları bağımsız değişken olarak seri aygıt adıyla çalıştırmaya izin verir: ttySniff USB0 veya ttySniff S0 ve bunun gibi.
  • Perl betiği unbackslashstrace -s 9999.
  • strace -e read tarafından strace -e read,write veya strace -e write ihtiyaca göre.

Not: Sözdizimi kullanarak çalıştırıyorum:

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

böylece tüm işlemi tekrarlayabilir ve zamanlama işlemlerini izleyebilirim.

5
F. Hauri

interceptty bu işi yapıyor:

interceptty /dev/ttyACM0 /dev/ttyDUMMY

veya Güzel bir çıktı biçimiyle ve arka uç cihazını yapılandırarak ve satır arabelleğe alma ile:

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

ve ardından programınıza /dev/ttyDUMMY.

5
Golar Ramblar

Uygulamamın seri bağlantı noktasıyla etkileşimini ayıkladığımda moserial kullanıyorum.

3
Renat Zaripov

Bunu dene:

screen /dev/tty.usbserial-blahblah 9600

benim için çalışıyor.

3
Mike

Seri bağlantı noktalarını izlemek için araçlar listesinde minicom eksik. Örneğin arduino cihazını dinlemek için kullanın:

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

2
B.Kocis

ttyUSBSpy adresine bir göz atın. Alfa sahnesinde, ama işe yarıyor.

1
user37414
0
Antonio Petricca