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?


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.


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).


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

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.


@ 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 .


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

3

Coba ini:

screen /dev/tty.usbserial-blahblah 9600

bekerja untukku.


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.


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.


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


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.