ฉันจะตรวจสอบปริมาณการใช้งานพอร์ตอนุกรมได้อย่างไร


40

มีเครื่องมือการตรวจสอบพอร์ตเพื่อดูแพ็กเก็ตที่เขียนบนพอร์ตหรือไม่? โดยเฉพาะอย่างยิ่งฉันต้องการตรวจสอบว่าโปรแกรมของฉันที่เขียนด้วย Java ทำงานได้หรือไม่ดังนั้นฉันต้องการเครื่องมือบางอย่างเพื่อดูว่าแอปพลิเคชันตัวน้อยของฉันกำลังเขียนข้อความไปยังพอร์ตหรือไม่ ฉันจะทำสิ่งนี้ได้อย่างไร


5
แพ็คเก็ตไม่ได้เขียนบนพอร์ต ตัวละครคือ มันไม่เหมือนอีเธอร์เน็ตเลย
LawrenceC

1
คำถามที่คล้ายกันจากไซต์ SE ของพี่น้อง: stackoverflow.com/q/940374/12892และserverfault.com/q/112957/4276
Cristian Ciupitu

คำตอบ:


17

ผมพบว่าโครงการที่เรียกว่าอนุกรม Linux Sniffer , jpnevulatorและMoni สองคนแรกดูเหมือนพวกเขาทำสิ่งที่คุณต้องการ คนสุดท้ายเรียกตัวเองว่าจอ แต่จริงๆแล้วมันดูเหมือนโปรแกรมสื่อสารแบบอนุกรมมาตรฐาน


1
ขอบคุณสำหรับสิ่งนั้น !! ฉันจะลองดู โดยวิธีที่ฉันแก้ไขปัญหาจากด้านจาวาของฉัน ฉันหายไป \ r ดังนั้นข้อความของฉันจึงไม่สามารถเขียนไปยังพอร์ตได้ ขอบคุณสำหรับเรื่องนั้น !!
Deepak

3
« LInux Serial Sniffer »เป็นรถมันเอาข้อมูลขาเข้าออกมาอย่างแน่นอนดังนั้นแอปพลิเคชั่นอื่นที่ฟังซีเรียลไม่เห็นอะไรเลย แต่อย่างน้อยข้อมูลที่ออกไปข้างนอกดูเหมือนว่าจะไม่มีปัญหา
Hi-Angel

3
จากคำถามที่พบบ่อย jpnevulator : "Jpnevulator ไม่เคยถูกสร้างขึ้นมาเพื่อนั่งระหว่างเคอร์เนลและแอปพลิเคชันของคุณ"
Shelvacu

1
ลิงก์ที่อ้างถึง Moni นั้นตายไปแล้ว
Yaron

1
-1 เนื่องจาก 3 ความคิดเห็น: LInux Serial Sniffer เป็นรถแล้วJpnevulator ไม่เคยถูกสร้างขึ้นเพื่อนั่งระหว่างเคอร์เนลและแอพและ finaly Moni ตาย ... คำตอบนี้ชี้ไปที่ลิงก์ภายนอก 3 รายการและไม่ได้ให้ทางออกที่แท้จริง (3 ลิงก์ล้มเหลว 3 ลิงก์ไม่มีอะไรเหลือ!)
F. Hauri

30

เป็นเครื่องมือในการเชื่อมต่อ (เกือบ) ทุกอย่างเข้ากับ (เกือบ) ทุกอย่างและสามารถทำซ้ำสตรีมได้
ใน usecase ของคุณคุณสามารถเชื่อมต่อพอร์ตอนุกรมของคุณ/dev/ttyS0ไปยัง PTY /tmp/ttyV0จากนั้นชี้แอปพลิเคชันของคุณไปยัง PTY และแยกส่วนteeอินพุตและเอาต์พุตออกให้คุณสังเกต

Googling "socat serial port pty tee debug" จะนำคุณไปสู่ตัวอย่างหลายอย่าง

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)


1
เพียงแค่ลองและมีทั้งอินพุตและเอาต์พุตที่บันทึกไว้ Socat เวอร์ชั่น "1.7.2.4 + sigfix" จากแพ็คเกจ Debian Jessie
ogurets

ความคิดนั้นดี แต่ไม่socatสามารถเรียกพร็อกซี ioctl ได้
peterh กล่าวคืนสถานะโมนิก้า

17

ฉันไม่คิดว่าไดรเวอร์อนุกรมจะมีฟังก์ชั่นการติดตามใด ๆ ที่จะอนุญาตให้คุณดูแพ็คเก็ต คุณสามารถใช้straceเพื่อสังเกตการอ่านและการเขียนทั้งหมดจากแอปพลิเคชันของคุณ:

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

1
สามารถส่งแพ็กเก็ตไปยังพอร์ตได้หรือไม่หากเชื่อมต่อไม่ได้
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ไฟล์ดูเหมือนจะเสียหายอย่างใด) ติดตั้งgccและmakeเรียกใช้แล้วและ./configure make installทำสิ่งที่ OP และฉันต้องการอย่างแน่นอน
แกรมมอส

คำตอบของคุณดีที่สุด
peterh กล่าวว่าคืนสถานะโมนิก้า

3

เมื่อผมแก้ปัญหาการทำงานร่วมกันของแอพลิเคชันของฉันกับพอร์ตอนุกรมผมใช้moserial


5
คุณกำลังพูดถึงอะไรในเอกสารที่เขียนมันเป็นเพียงแค่เทอร์มินัล
Hi-Angel

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 สคริปต์จะสตริงเข้าสู่ระบบโดยunbackslashstrace

Nota: ฉันเรียกใช้พวกเขาโดยใช้script -tดังนั้นฉันสามารถเล่นซ้ำทั้งหมดและติดตามการดำเนินการกำหนดเวลาได้


ไม่มีการพิจารณาด้านความปลอดภัยเกี่ยวกับสิ่งที่อาจจะมาจากพอร์ตอนุกรม !
F. Hauri

ยอดเยี่ยมทำงานได้ดีขอบคุณ!
เทคโน

1

มีลักษณะที่ttyUSBSpy มันอยู่บนเวทีอัลฟ่า แต่ใช้งานได้


2
มันไม่ได้ มันเขียนในหลามและโค้ดนำเข้าบางอย่างimport pcopyซึ่งแม้แต่ Google ก็ยอมแพ้ในการค้นหา
สวัสดีแองเจิล

2
ซอฟต์แวร์ / โฮมเพจดูละทิ้ง ไม่ได้อยู่ในแพ็คเกจผู้จัดการ
Alex Stragies

1

minicomหายไปจากรายการเครื่องมือในการตรวจสอบพอร์ตอนุกรม ใช้เป็นตัวอย่างเพื่อฟังอุปกรณ์ arduino:

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


OP เขียนว่า "monitor" แต่หมายถึง "sniffer" (= สามารถอ่านทราฟฟิกระหว่างทางได้) ในขณะที่ minicom เป็น "ลูกค้า" พอร์ตอนุกรมและนี่ไม่ใช่คำตอบสำหรับคำถามนี้ คำตอบดังต่อจากไมค์ทำผิดพลาดเหมือนกันและความคิดเห็นที่มีปัญหาอธิบายคำศัพท์ได้เป็นอย่างดี
Alex Stragies
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.