Seri port trafiğini nasıl izleyebilirim?


40

Limanda yazılı paketleri izlemek için herhangi bir liman izleme aracı var mı? Özellikle Java ile yazılmış programımın çalışıp çalışmadığını kontrol etmek istiyorum, bu yüzden küçük uygulamamın mesajları bağlantı noktasına yazıp yazmadığını görmek için bir araca ihtiyacım var. Bunu nasıl yaparım?


5
Paketler portta yazılı değildir. Karakterler Hiç Ethernet gibi değil.
LawrenceC

Yanıtlar:


17

Linux Seri Sniffer , jpnevulator ve Moni adında projeler buldum . İlk ikisi tam olarak ne istersen onu yapıyorlar. Sonuncusu kendisine bir monitör diyor, ancak aslında standart bir seri iletişim programına benziyor.


1
Bunun için teşekkürler !! bir deneyeceğim. bu arada konuyu java tarafımdan çözdüm. ben bir mesaj eksikti, bu yüzden mesajımın limana yazmasını engelledi. Yine de bunun için teşekkürler !!
Deepak,

3
«LInux Seri Sniffer» buggy, kesinlikle gelen veriyi alır, yani seriyi dinleyen başka bir uygulama hiçbir şey görmez. Ancak, en azından dışarı çıkan veriler sorunsuz bir şekilde görünüyor.
Hi-Angel,

3
Gönderen jpnevulator SSS : "Jpnevulator çekirdeği ve uygulamanız arasındaki oturup inşa değildi."
Shelvacu

1
Moni'ye gönderme yapan bağlantı öldü.
Yaron

1
-1 çünkü 3 yorum: LInux Seri Sniffer buggy , o zaman Jpnevulator hiçbir zaman çekirdek ve uygulama arasında oturmak için inşa edilmedi ve son olarak Moni öldü ... Bu cevap sadece 3 harici bağlantıya işaret ediyor ve gerçek bir çözüm sunmuyor . (3 bağlantıda 3 başarısız, hiçbir şey bırakmadı!)
F. Hauri

30

(neredeyse) her şeyi (neredeyse) her şeye bağlayan bir araçtır ve akışları çoğaltabilir.
Senin USECASE size seri port bağlamak olabilir /dev/ttyS0bir PTY /tmp/ttyV0PTY başvurunuzu işaret sonra, ve SoCat sahip teegözlemlemek için Giriş ve Çıkış yerde dışarı.

Googling "socat seri port pty tee hata ayıklama" sizi birkaç örneğe işaret edecektir:

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

Dosyaları in.txtve out.txtdaha sonra yakalanan verileri içerecektir.

Bu yorum yapanlar (@ogurets) tarafından onaylanmıştır.


1
Sadece denedim ve hem giriş hem de çıkış kaydedildi. Debian Jessie paketlerinden Socat sürümü "1.7.2.4 + sigfix".
ogurets

Bu fikir iyi, ancak socatproxy ioctl çağrıları bile yapamıyor.
peterh, Monica

17

Seri sürücünün paketleri izlemenize izin verecek herhangi bir izleme işlevi olduğunu sanmıyorum. Uygulamanızdaki stracetüm okuma ve yazmaları gözlemlemek için kullanabilirsiniz :

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

1
nothign bağlı ise paketleri limana gönderebilir mi?
Deepak,

strace, limana karakter göndermeye çalışıp çalışmadığını ve denemede çekirdeğin ne yanıt verdiğini size söyleyecektir. Akış kontrolü ayarlarınıza bağlı olarak, karakterler bağlantısı kesilen TXD pinine ulaşabilir veya olmayabilir.
Jasen

Teşekkürler, bu cevabı temel alarak dinamik strace'ime bir bakın !
F. Hauri

4

interceptty bu işi yapar:

interceptty /dev/ttyACM0 /dev/ttyDUMMY

veya, hoş bir çıktı biçiminde ve arka uç aygıtı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 sonra programınıza bağlanın /dev/ttyDUMMY.


@AlexStragies: Arch linux sistemimde var. AUR sayfası: aur.archlinux.org/packages/interceptty , kaynakların kopyası: repo.j5lx.eu/archive/interceptty/interceptty-0.6.tar.gz
Golar Ramblar

I (kullanarak indirmek zorunda wgettıklayarak beri .tar.gzyüklemek nasılsa bozuk gibiydi dosyası) gccve makeardından koşmak ./configureve make install. OP ve tam olarak istediğim şeyi yapar.
Graeme Moss

Cevabınız çok iyi.
peterh, Monica


3

Bunu dene:

screen /dev/tty.usbserial-blahblah 9600

benim için çalışıyor.


25
Bu portu açar ve kontrolünü üstlenir, böylece başka hiçbir şey kullanamaz. Bu, trafiği "izlemez" veya "koklamaz" değildir.
Ian M,

3

Sonunda seçtiğim yol bu

Gilles'in cevabı için teşekkürler !

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

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;
            };
        };
    '
  • Bunun ls -l /proc/[0-9]*/fd/* | grep ttyUSB0yerine kullanırım lsof ttyUSB0çünkü onları bir süre yavaş gördüm.
  • Yani strace kullanarak mevcut programı izleyecektir ttyUSB0
  • Sözdizimi: tty${1:-USB0}komut dosyası olarak kullanılan, ardından argüman olarak seri aygıt adıyla çalışmasına izin verir: ttySniff USB0veya ttySniff S0benzeri.
  • Perl betiği unbackslashtarafından kaydedilen dizeler olacaktır strace.

Bilginize: Bunları kullanarak çalıştırdım, script -tböylece bütün tekrarı oynatıp zamanlama işlemlerini takip edebiliyorum.


Seri port tarafından nelerin geleceğine dair bir güvenlik sorunu yoktur !
F. Hauri

Müthiş, iyi çalış, teşekkürler!
tekno

1

TtyUSBSpy'a bir göz atın . Alfa sahnesinde, ama çalışıyor.


2
Öyle değil. Python ile yazılmıştır ve kod import pcopyGoogle’ı bulmaktan vazgeçtiği bazılarını ithal etmektedir.
Hi-Angel

2
Yazılım / Ana sayfa terk edilmiş görünüyor. Paket yöneticisinde değil.
Alex Stragies

1

minicomSeri portları izlemek için araçlar listesinden yoksundur. Arduino cihazını dinlemek için örneğin kullanın:

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


OP, "monitör" yazdı, ancak "sniffer" anlamına geliyordu (= transit trafik okuyabiliyordu), minicom seri bir port ise "istemci" ve bu sorunun cevabı değildi. Mikrofona aşağıda cevap aynı hatayı yaptı ve açıklama daha bir terminoloji sorunu var açıklıyor.
Alex Stragies
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.