포트에 쓰여진 패킷을 감시하는 포트 모니터링 도구가 있습니까? 특히 Java로 작성된 프로그램이 작동하는지 확인하고 싶습니다. 작은 응용 프로그램이 포트에 메시지를 쓰고 있는지 확인하려면 일종의 도구가 필요합니다. 어떻게해야합니까?
포트에 쓰여진 패킷을 감시하는 포트 모니터링 도구가 있습니까? 특히 Java로 작성된 프로그램이 작동하는지 확인하고 싶습니다. 작은 응용 프로그램이 포트에 메시지를 쓰고 있는지 확인하려면 일종의 도구가 필요합니다. 어떻게해야합니까?
답변:
Linux Serial Sniffer , jpnevulator 및 Moni 라는 프로젝트를 찾았습니다 . 처음 두 가지는 그들이 원하는 것을 정확하게하는 것처럼 보입니다. 마지막은 모니터 자체를 호출하지만 실제로는 표준 직렬 통신 프로그램처럼 보입니다.
socat 은 (거의) 모든 것을 (거의) 모든 것에 연결하는 도구이며, 티 는 스트림을 복제 할 수 있습니다.
유스 케이스에서 직렬 포트 /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.txt
및 out.txt
다음 캡처 된 데이터가 포함됩니다.
이는 주석 작성자 (@ogurets)가 작동하는 것으로 확인되었습니다.
socat
ioctl 호출을 프록시 할 수는 없습니다 .
직렬 드라이버에는 패킷을 볼 수있는 추적 기능이 없다고 생각합니다. strace
애플리케이션에서 모든 읽기 및 쓰기를 관찰 하는 데 사용할 수 있습니다 .
strace -s9999 -o myapp.strace -eread,write,ioctl ./myapp
interceptty
그 일을합니까 :
interceptty /dev/ttyACM0 /dev/ttyDUMMY
또는 출력 형식이 좋고 백엔드 장치를 구성하고 라인 버퍼링을 사용하는 경우 :
interceptty -s 'ispeed 19200 ospeed 19200' -l /dev/ttyACM0 /dev/ttyDUMMY | interceptty-nicedump
그런 다음 프로그램과 연결하십시오 /dev/ttyDUMMY
.
wget
온 클릭 이후 .tar.gz
설치 어떻게 든 손상된 듯 파일) gcc
및 make
다음 실행 ./configure
하고 make install
. OP와 내가 원하는 것을 정확하게 수행합니다.
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
.ttyUSB0
tty${1:-USB0}
: 스크립트로 사용, 허용됩니다 인수로 시리얼 장치의 이름으로 다음 실행 ttySniff USB0
또는 ttySniff S0
등등합니다.unbackslash
기록 된 문자열을 나타 strace
냅니다.참고 : script -t
전체를 재생하고 타이밍 실행을 추적 할 수 있도록 사용하여 실행합니다.
ttyUSBSpy를 살펴 보십시오 . 알파 무대에 있지만 작동합니다.
import pcopy
.Google도 찾기 위해 포기했습니다.
minicom
직렬 포트를 모니터링하는 도구 목록에 없습니다. 예를 들어 arduino 장치를 청취하는 데 사용하십시오.
minicom --device /dev/ttyACM0 --baud 9600