मैं सीरियल पोर्ट ट्रैफ़िक की निगरानी कैसे कर सकता हूं?


40

क्या पोर्ट पर लिखे पैकेट को देखने के लिए कोई पोर्ट मॉनिटरिंग टूल है? मैं विशेष रूप से यह जांचना चाहता हूं कि क्या जावा में लिखा गया मेरा प्रोग्राम काम करता है, इसलिए मुझे यह देखने के लिए किसी तरह के टूल की जरूरत है कि क्या मेरा छोटा अनुप्रयोग पोर्ट पर संदेश लिख रहा है। मैं यह कैसे करु?


5
पोर्ट पर पैकेट नहीं लिखे गए हैं। वर्ण हैं। यह ईथरनेट की तरह नहीं है।
लॉरेंस सी सी

1
सिबलिंग एसई साइटों से ऐसे ही सवाल: stackoverflow.com/q/940374/12892 और serverfault.com/q/112957/4276
क्रिस्टियन सियुपिटु

जवाबों:


17

मैं परियोजनाओं बुलाया पाया लिनक्स सीरियल स्निफर , jpnevulator , और मोनी । पहले दो के रूप में वे वही करते हैं जो आप चाहते हैं। आखिरी वाला खुद को एक मॉनिटर कहता है, लेकिन यह वास्तव में एक मानक धारावाहिक संचार कार्यक्रम जैसा दिखता है।


1
उसके लिए धन्यवाद !! मुझे इसे एक मौका और देना होगा। वैसे मैंने अपने जावा साइड से इस मुद्दे को हल किया। मुझे एक \ r याद आ रही थी, जिससे मेरे संदेश को पोर्ट पर लिखने से रोका गया। वैसे भी इसके लिए धन्यवाद !!
दीपक

3
«LInux सीरियल स्निफ़र» छोटी गाड़ी है, यह पूरी तरह से आने वाले डेटा को बाहर निकालता है, इस प्रकार एक और एप्लिकेशन जो वास्तव में कुछ भी नहीं सीरियल को सुनने के लिए है। लेकिन, कम से कम, जो डेटा बाहर जाता है वह बिना किसी समस्या के जाता है।
हाय-एंजेल

3
से jpnevulator पूछे जाने वाले प्रश्न : "Jpnevulator गिरी और आपके आवेदन के बीच में बैठने के लिए बनाया कभी नहीं किया गया था।"
शेल्वकु

1
मोनी का जिक्र करने वाला लिंक मर चुका है।
यारोन

1
-1 की वजह से 3 टिप्पणियाँ: LInux सीरियल स्निफ़र छोटी गाड़ी है , तो Jpnevulator कर्नेल और एप्लिकेशन के बीच बैठने के लिए कभी नहीं बनाया गया था और अंतिम मोनी मर चुका है ... यह जवाब सिर्फ 3 बाहरी लिंक को इंगित करता है और एक वास्तविक समाधान नहीं देता है। (3 लिंक पर 3 असफल, कुछ भी नहीं छोड़ा!)
एफ। हौरी

30

(लगभग) सब कुछ (लगभग) सब कुछ कनेक्ट करने का एक उपकरण है, और धाराओं को डुप्लिकेट कर सकता है।
अपने usecase में आप अपने सीरियल पोर्ट /dev/ttyS0को एक PTY से जोड़ सकते हैं /tmp/ttyV0, फिर अपने एप्लिकेशन को 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) द्वारा काम करने की पुष्टि की गई है।


1
बस इसे आज़माया और इनपुट और आउटपुट दोनों दर्ज किए हैं। डेबियन जेसी पैकेज से सॉकेट संस्करण "1.7.2.4 + सिगफिक्स"।
17'17

विचार अच्छा है, लेकिन यह भी socatioctl कॉल को प्रॉक्सी नहीं कर सकता है।
पीटर कहते हैं मोनिका

17

मुझे नहीं लगता कि सीरियल ड्राइवर में कोई ट्रेसिंग कार्यक्षमता है जो आपको पैकेट देखने की अनुमति देगा। आप straceअपने आवेदन से सभी पढ़े और लिख सकते हैं:

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

1
बंदरगाह से पैकेट भेजा जा सकता है यदि नोटहिन जुड़ा हुआ है?
दीपक

अगर यह वर्णों को पोर्ट में भेजने की कोशिश करता है, और कर्नेल ने जब यह कोशिश की, तब क्या हुआ, यह आपको बताएगा। आपके प्रवाह नियंत्रण सेटिंग्स वर्णों के आधार पर डिस्कनेक्ट किए गए TXD पिन पर आ सकते हैं या नहीं।
जैसन

धन्यवाद, इस उत्तर के आधार पर, मेरे गतिशील स्ट्रेस पर एक नज़र डालें !
एफ। हाउरी

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
गोल्लर रामबालर

मुझे इसे डाउनलोड करना था ( फ़ाइल wgetपर क्लिक करने के बाद से .tar.gzइसे किसी तरह भ्रष्ट करने के लिए लग रहा था), स्थापित करें gccऔर make, फिर चलाएं ./configureऔर make install। क्या वास्तव में ओपी और मैं हालांकि चाहता है।
ग्रीम मॉस

आपका उत्तर सबसे अच्छा है।
पीटर ने कहा कि मोनिका

3

जब मैं धारावाहिक पोर्ट के साथ अपने एप्लिकेशन का इंटरैक्शन डिबग करता हूं, तो मैं मस्जिद का उपयोग करता हूं


5
आप किस बारे में बात कर रहे हैं, डॉक्स में लिखा है कि यह सिर्फ एक टर्मिनल है।
हाय-एंजेल

3

इसे इस्तेमाल करे:

screen /dev/tty.usbserial-blahblah 9600

मेरे लिये कार्य करता है।


25
इससे पोर्ट खुल जाता है और उस पर नियंत्रण हो जाता है, इसलिए और कुछ भी इसका उपयोग नहीं कर सकता है। यह ट्रैफ़िक को "मॉनिटर" या "स्निफ़" नहीं करता है।
इयान एम

3

यह वह तरीका है जिसे मैं अंत में चुनता हूं

गाइल्स के जवाब के लिए धन्यवाद !

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पूरी तरह से फिर से खेलना और समय के निष्पादन का पता लगा सकता है।


इस बारे में कोई सुरक्षा विचार नहीं है, कि धारावाहिक पोर्ट द्वारा क्या किया जा सकता है !
एफ। होरी

बहुत बढ़िया, अच्छा काम, धन्यवाद!
टेक्नो

1

पर एक नज़र डालें ttyUSBSpy । यह अल्फा स्टेज पर है, लेकिन यह काम करता है।


2
यह नहीं है यह अजगर में लिखा है, और कोड कुछ आयात करता है import pcopy, जिसे खोजने के लिए Google ने भी दिया है।
Hi-Angel

2
सॉफ्टवेयर / होमपेज परित्यक्त दिखता है। पैकेज प्रबंधकों में नहीं है।
एलेक्स स्ट्रैगीज़

1

minicomसीरियल पोर्ट पर नजर रखने के लिए उपकरणों की सूची से गायब है। उदाहरण के लिए इसका प्रयोग अर्दीनो डिवाइस को सुनने के लिए करें:

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


ओपी ने "मॉनिटर" लिखा, लेकिन इसका मतलब "स्निफर" (= पारगमन में ट्रैफ़िक पढ़ने में सक्षम है), जबकि मिनिकॉम एक सीरियल पोर्ट "क्लाइंट" है, और इस तरह इस सवाल का जवाब नहीं है। माइक से नीचे इस सवाल का जवाब एक ही गलती की है, और टिप्पणी वहाँ शब्दावली समस्या के रूप में अच्छी तरह से बताते हैं।
एलेक्स स्ट्रैजीस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.