Bagaimana saya bisa memonitor lalu lintas port serial?

40

Apakah ada alat pemantauan port untuk menonton paket yang ditulis di port? Saya terutama ingin memeriksa apakah program saya yang ditulis dalam Java berfungsi, jadi saya memerlukan beberapa alat untuk melihat apakah aplikasi kecil saya menulis pesan ke port. Bagaimana saya melakukan ini?

Deepak
sumber
5
Paket tidak ditulis di port. Karakter adalah. Sama sekali tidak seperti Ethernet.
LawrenceC
1
Pertanyaan serupa dari situs saudara kandung SE: stackoverflow.com/q/940374/12892 dan serverfault.com/q/112957/4276
Cristian Ciupitu

Jawaban:

17

Saya menemukan proyek yang disebut Linux Serial Sniffer , jpnevulator , dan Moni . Dua yang pertama terlihat seperti mereka melakukan apa yang Anda inginkan. Yang terakhir menyebut dirinya monitor, tetapi sebenarnya terlihat seperti program komunikasi serial standar.

Shawn J. Goff
sumber
1
Terima kasih untuk itu !! Saya akan mencobanya. omong-omong saya memecahkan masalah dari sisi java saya. saya tidak ada, sehingga mencegah pesan saya untuk menulis ke port. terima kasih untuk itu !!
Deepak
3
The «LInux Serial Sniffer» adalah buggy, itu benar-benar mengeluarkan data yang masuk, sehingga aplikasi lain yang sebenarnya mendengarkan serial tidak melihat apa-apa. Tapi, setidaknya, data yang keluar sepertinya tidak bermasalah.
Hi-Angel
3
Dari FAQ jpnevulator : "Jpnevulator tidak pernah dibangun untuk duduk di antara kernel dan aplikasi Anda."
Shelvacu
1
Tautan yang merujuk ke Moni sudah mati.
Yaron
1
-1 karena 3 komentar: LInux Serial Sniffer buggy , maka Jpnevulator tidak pernah dibangun untuk duduk di antara kernel dan aplikasi dan akhirnya Moni mati ... Jawaban ini hanya menunjuk ke 3 tautan eksternal dan tidak memberikan solusi nyata. (3 gagal pada 3 tautan, tidak ada yang tersisa!)
F. Hauri
30

adalah alat untuk menghubungkan (hampir) segalanya untuk (hampir) segalanya, dan dapat menduplikasi aliran.
Di usecase Anda, Anda dapat menghubungkan port serial Anda /dev/ttyS0ke PTY /tmp/ttyV0, kemudian arahkan aplikasi Anda ke PTY, dan socat teeout Input dan Output di suatu tempat untuk Anda amati.

Googling "socat port serial pty tee debug" akan mengarahkan Anda ke beberapa contoh, salah satunya adalah:

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

File in.txtdan out.txtkemudian akan berisi data yang diambil.

Ini telah dikonfirmasi untuk berfungsi oleh komentator (@ogurets).

Alex Stragies
sumber
1
Baru saja mencobanya dan memiliki input dan output yang direkam. Versi Socat "1.7.2.4 + sigfix" dari paket Debian Jessie.
oguret
Idenya bagus, tetapi bahkan socatpanggilan proxy ioctl tidak bisa.
peterh mengatakan mengembalikan Monica
17

Saya tidak berpikir driver serial memiliki fungsi pelacakan yang akan memungkinkan Anda untuk menonton paket. Anda dapat menggunakan straceuntuk mengamati semua membaca dan menulis dari aplikasi Anda:

strace -s9999 -o myapp.strace -eread,write,ioctl ./myapp
Gilles 'SANGAT berhenti menjadi jahat'
sumber
1
dapatkah mengirim paket ke port jika nothign terhubung?
Deepak
strace akan memberi tahu Anda jika mencoba mengirim karakter ke port, dan apa yang ditanggapi oleh kernel ketika dicoba. tergantung pada pengaturan pengaturan aliran Anda, karakter dapat sampai pada pin TXD yang terputus atau tidak.
Jasen
Terima kasih, lihat langkah dinamis saya , berdasarkan jawaban ini!
F. Hauri
4

interceptty melakukan pekerjaan itu:

interceptty /dev/ttyACM0 /dev/ttyDUMMY

atau, dengan format output yang bagus dan dengan mengkonfigurasi perangkat backend, dan dengan penyangga garis:

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

dan kemudian terhubung dengan program Anda ke /dev/ttyDUMMY.

Ramblar Golar
sumber
@ AlexStragies: Saya memilikinya di sistem linux lengkung saya. Halaman AUR: aur.archlinux.org/packages/interceptty , salinan sumber: repo.j5lx.eu/archive/interceptty/interceptty-0.6.tar.gz
Golar Ramblar
Saya harus mengunduhnya (menggunakan wgetsejak mengeklik pada .tar.gzfile itu sepertinya merusaknya), instal gccdan make, kemudian jalankan ./configuredan make install. Apakah persis apa yang OP dan saya inginkan.
Graeme Moss
Jawaban Anda adalah yang terbaik.
peterh mengatakan mengembalikan Monica
3

Ketika saya men-debug interaksi aplikasi saya dengan port serial, saya menggunakan moserial .

Renat Zaripov
sumber
5
Apa yang Anda bicarakan, dalam dokumen tertulis itu hanya terminal.
Hi-Angel
3

Coba ini:

screen /dev/tty.usbserial-blahblah 9600

bekerja untukku.

Mike
sumber
25
Ini membuka port dan mengambil kendali atasnya, jadi tidak ada yang bisa menggunakannya. Ini tidak "memantau" atau "mengendus" lalu lintas.
Ian M
3

Inilah yang akhirnya saya pilih

Terima kasih atas jawaban 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; };};'

Maaf, saya akan jelaskan ...

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;
            };
        };
    '
  • Saya menggunakan ls -l /proc/[0-9]*/fd/* | grep ttyUSB0bukan lsof ttyUSB0karena saya melihat mereka kadang-kadang lambat.
  • Jadi strace akan melacak program saat ini menggunakan ttyUSB0
  • Sintaks: tty${1:-USB0}akan mengizinkan, digunakan sebagai skrip, untuk menjalankan kemudian dengan nama perangkat seri sebagai argumen: ttySniff USB0atau ttySniff S0dan sebagainya.
  • Script Perl akan unbackslashdicatat oleh string strace.

Catatan: Saya menjalankannya dengan menggunakan script -tsehingga saya bisa memutar ulang keseluruhan dan melacak eksekusi waktu.

F. Hauri
sumber
Tidak ada pertimbangan keamanan, tentang apa yang bisa dilakukan dengan port serial !
F. Hauri
Luar biasa, bekerja dengan baik, terima kasih!
techno
1

Lihatlah ttyUSBSpy . Ini pada tahap alfa, tetapi berhasil.

pengguna37414
sumber
2
Tidak. Itu ditulis dalam python, dan kode tidak mengimpor beberapa import pcopy, yang bahkan Google menyerah untuk menemukannya.
Hi-Angel
2
Perangkat lunak / Beranda terlihat ditinggalkan. Tidak ada dalam manajer paket.
Alex Stragies
1

minicomhilang dari daftar alat untuk memonitor port serial. Gunakan itu sebagai contoh untuk mendengarkan perangkat Arduino:

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

B.Kocis
sumber
OP menulis "monitor", tetapi berarti "sniffer" (= mampu membaca lalu lintas dalam perjalanan), sementara minicom adalah port serial "klien", dan karenanya bukan jawaban untuk pertanyaan ini. The jawaban di bawah dari mike membuat kesalahan yang sama, dan komentar ada menjelaskan masalah terminologi juga.
Alex Stragies