Sniff serielle Schnittstelle unter Linux

Antworten:

27

Es gibt einige Möglichkeiten:

  • sersniff ist ein einfaches Programm, um zwischen 2 seriellen Ports zu tunneln / zu schnüffeln.

  • Seriell-zu-Netzwerk-Proxy (ser2net) bietet einem Benutzer die Möglichkeit, eine Verbindung von einer Netzwerkverbindung zu einem seriellen Anschluss herzustellen.

  • SerialSpy fungiert als serielles Passthrough -Gerät. Es wartet auf eingehende Daten an zwei seriellen Schnittstellen und leitet sie weiter, sodass die Geräte so tun, als ob sie direkt verbunden wären. Es protokolliert auch die Daten, während sie über die Ports übertragen werden.

  • sercd ist ein RFC 2217-kompatibler Redirector für serielle Ports. Hiermit können Sie einen seriellen Port über ein Netzwerk freigeben. Es basiert auf sredird. Das RFC2217-Protokoll ist eine Erweiterung zu Telnet und ermöglicht das Ändern von Kommunikationsportparametern.

  • SerLooK ist eine KDE-Anwendung zum Überprüfen von Daten, die über serielle Leitungen übertragen werden. Es kann als binäres Terminal fungieren, das Daten über einen definierten Port sendet und empfängt (Punkt-zu-Punkt-Modus) und in separaten Ansichten anzeigt. Jede Ansicht kann so konfiguriert werden, dass Daten in hexadezimaler, dezimaler, oktaler, binärer und unformatierter ASCII-Darstellung angezeigt werden. Es ist auch möglich, E / A über Terminalemulationsansichten durchzuführen und einen sekundären Port zu definieren und den Datenverkehr zwischen zwei externen Hosts mit einem "Y" -Kabel zu überwachen (Snooper-Modus).

  • nullmodem erzeugt ein virtuelles Netzwerk von Pseudoterminals. Es kann als Adapter verwendet werden, um zwei Programme zu verbinden, die normalerweise serielle Schnittstellenkarten benötigen.

  • ttywatch überwacht, protokolliert und multiplext Terminal-E / A. Es verfügt über eine integrierte vollständige Protokollrotation und kann sowohl Telnet- als auch lokale TTY-Ports verwenden.

  • Serial Line Sniffer (slsnif) ist ein Dienstprogramm zur Protokollierung der seriellen Schnittstelle. Es überwacht die angegebene serielle Schnittstelle und protokolliert alle Daten, die über diese Schnittstelle in beide Richtungen übertragen werden.

hlovdal
quelle
2
Dies erreichen Sie mit Standardwerkzeugen mit socatund tee. 1) socat -d -d pty,raw,echo=0 pty,raw,echo=0. Der Ausgang gibt Ihnen zwei Ports ...N PTY is /dev/pts/27... N PTY is /dev/pts/28. 2) sudo cat /dev/ttyS0 | tee /dev/pts/27und in einem anderen Terminal sudo cat /deb/pts/27 | tee /dev/ttyS0. Schließlich 3) Verbinden Sie Ihr Programm mit /dev/tty/28. Die beiden tee-Befehle geben beide Richtungen an die Konsole aus und leiten sie an die / von der tatsächlichen seriellen Schnittstelle weiter. Beachten Sie, dass die Porteinstellungen wie die Baudrate im Voraus konfiguriert werden müssen.
Jtpereyda
Sie können das T - Stück Stoff in einer Datei zu speichern, auch: cat /dev/pts/27 | sudo tee /dev/ttyS0 serial-capsund xxdhilft , wenn es sich um ein binäres Protokoll ist: cat /dev/pts/27 | sudo tee /dev/ttyS0 serial-caps | xxd.
Jtpereyda
@jtpereyda Es sieht so aus, als ob Ihr dritter Schritt darin besteht, das Programm mit / dev / ttyS0 zu verbinden. zB wenn ich dort PUTTY mit / dev / ttyS0 verbinde, wird mir die Ausgabe in Schritt 2 korrekt angezeigt, während ich gleichzeitig mit der eigentlichen eingebetteten Karte kommuniziere. Übrigens solltest du ein Tippfehler /deb/pts/27sein /dev/pts/27. Sollte auch cat /deb/pts/27 | tee /dev/ttyS0seincat /dev/pts/27 | sudo tee /dev/ttyS0
enthusiasticgeek
Diese Antwort ist sehr alt, bitte beachten Sie das Abfangen für das Sniffing der seriellen Schnittstelle
CharlesB
1
Sie könnten das als eine andere Antwort geben. @CharlesB Zu erklären, warum es besser ist, wäre auch schön.
Küken
12

Ich habe versucht abzufangen ( kopieren bei GitHub ) und war erfolgreich in der Verwendung. Zuerst lief ich es auf dem Hafen von Interesse:

interceptty /dev/ttyACM0 

Dann verband ich das zu testende Programm mit dem Pseudo-Terminal /dev/pts/5, das durch die Überwachung erzeugt wurde.


Ich habe versucht, slsnif zu verwenden , aber ich habe festgestellt, dass ich einen Fehler habe:

Failed to open a pty: No such file or directory

Dieses Mailinglistenelement gibt an, dass slsnif nur die "alten" Pseudo-Terminals ( /dev/ttyp0usw.) unterstützt, die auf aktuellen Linux-Kerneln wahrscheinlich nicht verwendet werden.

Craig McQueen
quelle
1
Vielen Dank! Gleicher Fehler hier auf meinem Embedded-Gerät. Dann nutze intercepttyund arbeite ich !
Fleck
Woher weißt du, welches Pseudoterminal es erzeugt?
Chwi
@chwi Sie können ihm einen zweiten Parameter zuweisen. Dies ist der Name eines "Frontgeräts", das einen Symlink zu dem von ihm erstellten Pseudoterminal darstellt.
Craig McQueen
Vielen Dank. Ich habe festgestellt, dass standardmäßig ein / dev / intercepttydummy erstellt wird. Ich konnte den Datenverkehr hin und her verfolgen, aber die eingehenden Daten vom Gerät wurden nur durch Abfangen gelesen, nicht durch pyserial ausgeführte Software.
Chwi