Frage

Ich habe einen Linux-Prozess von einem Drittanbieter entwickelt, dass in Verbindung steht mit einem Terminal. Für das Debuggen möchte ich die Kommunikation geht zurück in her sehen.

Man könnte denken, cat den Trick tun würde (eine Richtung zu sehen):

    ./third-party-app &
    cat /dev/tty

... aber es funktioniert nicht. Vielmehr cat stehlen Hälfte der Daten für die Anwendung bestimmt, die so ziemlich wertlos ist.

Drittanbieter-App ist hartcodiert /dev/tty zu übernehmen.

Ein Weg, ich auf der Kommunikation auszuspionieren gefunden ist, die /dev/tty Gerät, sagen wir, /dev/real_tty umbenennen und eine Named Pipe genannt /dev/tty an seinem Platz zu schaffen. Dann läuft:

    cat /dev/real_tty | tee /dev/tty &

... zumindest lassen Sie mich die Ausgabe von /dev/real_tty sehen, durch Kopieren der Daten von /dev/real_tty zu dem Named Pipes /dev/tty und stdout.

Diese Art von Arbeiten, aber es fühlt sich wirklich vertrackt, und stützt sich auf die Betrügerei das Gerät zu ersetzen. Es spielt auch keine Arbeit in beiden Richtungen, weil Named Pipes nur Daten in eine Richtung tragen.

Was ist der richtige Weg, dies zu tun?

Wenn jemand fragt mich, das TTY-Gerät ist eine RS-232-Verbindung mit einem Mikrocontroller. Die Information ist nicht empfindlich oder gesichert. Alle Prozesse (Anwendung und Spione) als root ausführen.

War es hilfreich?

Lösung

Sie können einen Blick auf slsnif . Es tut genau, was Sie wollen, oder wenn Sie in einem Schreiben interessiert sind, sich die Quelle zur Verfügung, um zu sehen, wie es funktioniert.

Andere Tipps

Haben Sie mit in Betracht gezogen strace / ltrace ? Sie können die Systemaufrufe sehen, es macht, insbesondere Sie die Schreib sehen / ioctl usw. Anrufe gemacht werden.

RS-232 ? Tippen Sie einfach auf die RxD / TxD / GND-Leitungen mit Clips. Es war ein für immer, da ich jedes Gerät, auch über DCD gesehen habe kümmern, DTR, etc.

Es gibt einige Alternativen:

Do It Youself mit GDB: CryoPID können Sie den Status eines laufenden Prozesses in Linux erfassen und speichern sie in einer Datei. Diese Datei kann dann den Prozess verwendet werden, später wieder aufnehmen, entweder nach einem Neustart oder auch auf einem anderen Rechner.

MultiThreaded Checkpointing Distributed ist ein Werkzeug, um transparent Prüfpunktverfahrens den Zustand einer beliebigen Gruppe von Programmen Verbreitung über viele Maschinen und verbunden durch Steckdosen.

Das script Programm existiert dies mit psudo-Terminal zu tun. Das Gerät /dev/tty ist in der Regel spezielle und bezieht sich auf den aktuellen Prozess der Steueranschluss, so können Sie nicht auf die Umbenennung Dinge gehabt haben zu greifen.

script öffnet sich ein psudo-Terminal und führt dann eine weitere Instanz der Shell mit dem neuen Shell als kontrollierende Terminal (so /dev/tty zu diesem psudo-Terminal für diese Schale und seine Kindprozesse bezeichnet). Die Option -c können Sie einen bestimmten Befehl ausführen, anstatt Ihre Shell.

Das Hauptproblem bei script ist, dass es unmöglich ist, zu sagen, welche Art und Weise die Daten in der Ausgabedatei (./typescript Standardeinstellung) erfasst würde - Daten in beide Richtungen fließen in die gleiche Datei ausgegeben wird und sieht ähnlich dem, was erscheint der Bildschirm, wenn ein interaktives Terminal (außer einschließlich entkommen, Zeilenumbrüche und doof Sachen wie, dass auch die normalerweise angezeigten Zeichen).

Wie auch immer, ich weiß, dass diese Frage seit längst beantwortet, aber ich dachte, dass, wenn jemand für eine ähnliche Lösung suchen war und nicht eine echte serielle Schnittstelle diese ihnen helfen können.

Nicht einfach (für mich zumindest nicht), sondern ein Mechanismus, der für die tty seriellen Treiber funktionieren soll, ist ein Linie Disziplin .

Die Menschen hier haben bereits gute Vorschläge gemacht, aber hier ist eine andere:

Sie können auch eine gemeinsame Bibliothek mit Ihrem eigenen write() schreiben, die etwas Arbeit tut, bevor die write() von libc.so aufrufen. Dann können Sie die LD_PRELOAD Umgebungsvariable verwenden, um Ihre Bibliothek zu laden, wenn der Prozess beginnt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top