직렬 포트 트래픽을 어떻게 모니터링 할 수 있습니까?


40

포트에 쓰여진 패킷을 감시하는 포트 모니터링 도구가 있습니까? 특히 Java로 작성된 프로그램이 작동하는지 확인하고 싶습니다. 작은 응용 프로그램이 포트에 메시지를 쓰고 있는지 확인하려면 일종의 도구가 필요합니다. 어떻게해야합니까?


5
패킷이 포트에 기록되지 않았습니다. 문자입니다. 이더넷과 전혀 다릅니다.
LawrenceC

1
형제 자매 사이트의 비슷한 질문 : stackoverflow.com/q/940374/12892serverfault.com/q/112957/4276
Cristian Ciupitu

답변:


17

Linux Serial Sniffer , jpnevulatorMoni 라는 프로젝트를 찾았습니다 . 처음 두 가지는 그들이 원하는 것을 정확하게하는 것처럼 보입니다. 마지막은 모니터 자체를 호출하지만 실제로는 표준 직렬 통신 프로그램처럼 보입니다.


1
고마워요 !! 나는 그것을 시도 할 것이다. 그런데 내 자바 측에서 문제를 해결했습니다. \ r이 없어서 포트에 메시지를 쓰지 못했습니다. 어쨌든 고마워!
Deepak

3
«LInux Serial Sniffer»는 버그가 있으므로 들어오는 데이터를 절대로 가져옵니다. 따라서 실제로 직렬을 수신하는 다른 애플리케이션은 아무것도 볼 수 없습니다. 그러나 적어도 외부로 나가는 데이터는 문제가없는 것으로 보입니다.
Hi-Angel

3
로부터 jpnevulator 자주 묻는 질문 : "Jpnevulator는 커널과 응용 프로그램 사이에 앉아 구축되지 않았습니다."
Shelvacu

1
Moni를 가리키는 링크가 죽었습니다.
Yaron

1
3 개의 댓글의 때문에 -1 : 리눅스 시리얼 스니퍼는 버그가 다음 Jpnevulator는 커널과 응용 프로그램 사이에 앉아 결코 만들어진 마침내 및 모니는 죽은 이 답변 ... 3 개 외관 링크에 단지 점과 실제 솔루션을 제공하지 않습니다. (3 개 링크에서 3 개 실패, 아무것도 남기지 않았습니다!)
F. Hauri

30

은 (거의) 모든 것을 (거의) 모든 것에 연결하는 도구이며, 는 스트림을 복제 할 수 있습니다.
유스 케이스에서 직렬 포트 /dev/ttyS0를 PTY /tmp/ttyV0에 연결 한 다음 애플리케이션을 PTY로 지정하고 tee관찰 할 수있는 입력 및 출력을 배치 할 수 있습니다.

인터넷 검색 "socat 직렬 포트 pty tee 디버그"는 다음과 같은 몇 가지 예를 보여줍니다.

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

파일은 in.txtout.txt다음 캡처 된 데이터가 포함됩니다.

이는 주석 작성자 (@ogurets)가 작동하는 것으로 확인되었습니다.


1
그것을 시도하고 입력과 출력을 모두 기록하십시오. 데비안 Jessie 패키지의 Socat 버전 "1.7.2.4 + sigfix".
ogurets

아이디어는 좋지만 socatioctl 호출을 프록시 할 수는 없습니다 .
user259412

17

직렬 드라이버에는 패킷을 볼 수있는 추적 기능이 없다고 생각합니다. strace애플리케이션에서 모든 읽기 및 쓰기를 관찰 하는 데 사용할 수 있습니다 .

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

1
nothign이 연결되어 있으면 포트로 패킷을 보낼 수 있습니까?
Deepak

strace는 포트로 문자를 보내려고했는지, 그리고 시도 할 때 커널이 무엇을 응답했는지 알려줍니다. 흐름 제어 설정에 따라 문자가 연결이 끊긴 TXD 핀에 도착하거나 도착하지 않을 수 있습니다.
Jasen

감사합니다 .이 답변을 기반으로 내 동적 strace를 살펴보십시오 !
F. Hauri

4

interceptty 그 일을합니까 :

interceptty /dev/ttyACM0 /dev/ttyDUMMY

또는 출력 형식이 좋고 백엔드 장치를 구성하고 라인 버퍼링을 사용하는 경우 :

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

그런 다음 프로그램과 연결하십시오 /dev/ttyDUMMY.


@ AlexStragies : 아치 리눅스 시스템에 있습니다. AUR 페이지 : aur.archlinux.org/packages/interceptty , 소스 사본 : repo.j5lx.eu/archive/interceptty/interceptty-0.6.tar.gz
Golar Ramblar

나는 (사용하여 다운로드 한 wget온 클릭 이후 .tar.gz설치 어떻게 든 손상된 듯 파일) gccmake다음 실행 ./configure하고 make install. OP와 내가 원하는 것을 정확하게 수행합니다.
Graeme Moss

당신의 대답은 지금까지 최고입니다.
user259412


3

이 시도:

screen /dev/tty.usbserial-blahblah 9600

나를 위해 작동합니다.


25
포트를 열고 포트를 제어한다고 가정하므로 다른 포트는 사용할 수 없습니다. 이것은 트래픽을 "감시"하거나 "감지"하지 않습니다.
Ian M

3

이것이 내가 마침내 선택하는 방법입니다

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

죄송합니다. 설명하겠습니다.

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;
            };
        };
    '
  • 나는 그들이 느리게 그들을 보았 기 때문에 ls -l /proc/[0-9]*/fd/* | grep ttyUSB0대신에 사용 합니다 lsof ttyUSB0.
  • strace는 다음을 사용하여 현재 프로그램을 추적합니다. ttyUSB0
  • 구문 : tty${1:-USB0}: 스크립트로 사용, 허용됩니다 인수로 시리얼 장치의 이름으로 다음 실행 ttySniff USB0또는 ttySniff S0등등합니다.
  • Perl 스크립트는로 unbackslash기록 된 문자열을 나타 strace냅니다.

참고 : script -t전체를 재생하고 타이밍 실행을 추적 할 수 있도록 사용하여 실행합니다.


직렬 포트에서 오는 것이 무엇인지에 대한 보안 고려 사항은 없습니다 !
F. Hauri

대단해, 잘 작동 해, 고마워!
테크노

1

ttyUSBSpy를 살펴 보십시오 . 알파 무대에 있지만 작동합니다.


2
그렇지 않습니다. 파이썬으로 작성되었으며 코드는 일부를 가져옵니다 import pcopy.Google도 찾기 위해 포기했습니다.
Hi-Angel

2
소프트웨어 / 홈페이지가 버려진 것 같습니다. 패키지 관리자에 없습니다.
Alex Stragies

1

minicom직렬 포트를 모니터링하는 도구 목록에 없습니다. 예를 들어 arduino 장치를 청취하는 데 사용하십시오.

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


OP는 "모니터"를 작성했지만 "스니퍼"(= 전송중인 트래픽을 읽을 수 있음)를 의미했지만 minicom은 직렬 포트 "클라이언트"이므로이 질문에 대한 답은 아닙니다. 아래의 mike대답 은 같은 실수를했으며, 그 의견은 용어 문제도 설명합니다.
Alex Stragies
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.