Seriellen Port monitor + redirect...

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Ich würde gern eine Serielle-Schnittstelle belauschen.
Bin dazu auf Linux umgestiegen und versuche per Python mit zwischen die Kommunikation zu hängen, aber keinen Plan von Serieller Schnittstelle....

Hab das verbrochen:

Code: Alles auswählen

import sys
import pty
import os
import time

try:
    import serial
except ImportError as err:
    raise ImportError("%s - Please install PySerial ! - http://pyserial.sourceforge.net" % err)


def print_settings(ser):
    print("Settings for serial %r:" % ser.name)
    settings = ser.getSettingsDict()
    for k,v in sorted(settings.items()):
        print("%20s : %s" % (k,v))

def redirect(ser_in,ser_out):
    item = ser_in.read(1)
    if item:
        if item.isalnum():
            sys.stdout.write(item.decode("ascii"))
        else:
            sys.stdout.write(" $%02x " % ord(item))
        sys.stdout.flush()

        ser_out.write(item)
        ser_out.flush()


def monitor(port, baudrate, timeout = 0.01):

    ser = serial.Serial(port, baudrate, timeout=timeout)
    print_settings(ser)

    master, slave = pty.openpty()
    s_name = os.ttyname(slave)
    ser_out = serial.Serial(s_name, baudrate, timeout=timeout)
    print_settings(ser_out)

    try:
        count=0
        next_update = time.time()+1
        while True:
            if time.time()>next_update:
                print("Count: %s" % count)
                next_update = time.time()+1
            count+=1

            redirect(ser,ser_out)
            redirect(ser_out, ser)
    finally:
        ser.close()


if __name__ == '__main__':
    monitor(
        port="/dev/ttyUSB0",
        baudrate=57600,
    )
Geöffnet wird /dev/ttyUSB0 und die virtuelle Schnittstelle wird zu "/dev/pts/4" doch davon kann das externe Programm nicht lesen.
Das sagt mir dann das:
11 Nov 2014 15:24:27 DEBUG [dwproto-0-9 ] init /dev/pts/4 for handler #0 (logging bytes: false xorinput: false)
11 Nov 2014 15:24:27 DEBUG [dwproto-0-9 ] attempting to open device '/dev/pts/4'
11 Nov 2014 15:24:27 ERROR [dwproto-0-9 ] handler #0: Serial device '/dev/pts/4' not found
Ideen?

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Komme da nicht recht weiter...

Hab nach "Serial sniffer" gesucht. Ich finde aber nichts brauchbares, zumindest nicht für Linux oder 64bit Windows...
Kostenlose und OpenSource Lösungen für Windows sind immer nur brauchbar mit 32bit...

Unter Linux habe ich nur jpnevulator gefunden. Aber es gibt sogut wie keine Beispiele dazu. Außerdem kann man anscheinend keinen "man-in-the-middle" Abgriff damit machen...

Es gibt auch slsnif ("Serial line sniffer"): http://linux.die.net/man/1/slsnif Damit kann man anscheinend die Daten an einem pseudo tty (pty) weiterleiten. Aber damit kommt ja anscheinend das Java-Programm nicht zurecht :(

Bin mit Wireshark weitergekommen. Immerhin kann man den USB Kommunikation damit mitschneiden.
Allerdings ist es nicht ganz einfach die USB Protokolldaten von der RS-232 Daten zu Unterscheiden.

Kennt jemand einen Weg, evtl. mit VirtualBox was mit zuschneiden?

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
darktrym
User
Beiträge: 784
Registriert: Freitag 24. April 2009, 09:26

Vermutlich ist es immer noch so wie vor einem Jahr. Es gibt schlicht nichts. Unter Windows ist der Advanced Port Serial Monitor wärmstens zu empfehlen(Software nicht ganz billig) ansonsten gibts Hardware die man dazwischen klemmt.
„gcc finds bugs in Linux, NetBSD finds bugs in gcc.“[Michael Dexter, Systems 2008]
Bitbucket, Github
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

OK, dann bin ich nicht zu blöd zum suchen ;)

Vielleicht setzte ich bis dann ein 32bit Windows auf. Dafür gibt es ja was...

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Ah, geht doch einfacher als gedacht. Denn die Java-App bietet an die Roh-Daten zu loggen. Hatte nur den Eintrag in der config nicht gefunden :oops:

Sieht dann z.B. so aus:

Code: Alles auswählen

12 Nov 2014 10:56:54 DEBUG [dwproto-0-10  ] READ1: 0
12 Nov 2014 10:56:55 DEBUG [dwproto-0-10  ] READ1: 1
12 Nov 2014 10:56:55 DEBUG [dwproto-0-10  ] READ1: 12
12 Nov 2014 10:56:55 DEBUG [dwproto-0-10  ] READ 12:  65 85 84 79 76 79 65 68 46 68 87 76
12 Nov 2014 10:56:55 DEBUG [dwproto-0-10  ] WRITE1: 255
12 Nov 2014 10:56:55 DEBUG [dwproto-0-10  ] READ1: 210
12 Nov 2014 10:56:55 DEBUG [dwproto-0-10  ] READ 4:  255 0 0 0
12 Nov 2014 10:56:55 DEBUG [dwproto-0-10  ] WRITE 256: 85 1 30 1 2 92 30 1 170 30 12 0 5 58 131 65 65 65 65 0 30 18 0 7 135 0 30 38 0 10 135 34 49 32 32 80 76 65 83 77 65 32 32 32 34 0 30 54 0 20 135 34 50 32 32 83 84 85 68 68 34 0 30 76 0 30 135 34 51 32 32 70 76 65 71 79 78 32 66 73 82 68 34 0 30 98 0 40 135 34 52 32 32 68 79 78 75 69 89 32 75 73 78 71 34 0 30 115 0 50 135 34 53 32 32 90 65 88 88 79 78 34 0 30 134 0 60 135 34 54 32 32 69 76 67 72 65 78 67 69 34 0 30 166 0 80 135 34 56 32 32 73 78 73 84 32 87 80 32 56 48 45 67 79 76 83 32 66 79 65 82 68 34 0 30 182 0 90 135 34 57 32 32 69 76 73 83 65 34 0 30 201 0 100 135 34 78 32 32 78 73 84 82 79 83 45 57 34 0 30 219 0 110 135 34 72 32 32 72 68 66 45 68 79 83 34 0 30 229 0 200 65 36 203 255 154 0 30 248 0 205 133 32 65 36 203 34 34 32 129 188 32 50 48 48 0
12 Nov 2014 10:56:55 DEBUG [dwproto-0-10  ] READ 2:  60 213
12 Nov 2014 10:56:55 DEBUG [dwproto-0-10  ] WRITE1: 0
12 Nov 2014 10:56:55 DEBUG [dwproto-0-10  ] READ1: 210
12 Nov 2014 10:56:55 DEBUG [dwproto-0-10  ] READ 4:  255 0 0 1
12 Nov 2014 10:56:55 DEBUG [dwproto-0-10  ] WRITE 256: 31 16 0 210 133 32 65 36 203 34 49 34 191 32 185 34 80 76 65 83 77 65 34 0 31 39 0 220 133 32 65 36 203 34 50 34 191 32 185 34 83 84 85 68 68 34 0 31 61 0 230 133 32 65 36 203 34 51 34 191 32 185 34 70 76 65 80 34 0 31 83 0 240 133 32 65 36 203 34 52 34 191 32 185 34 75 73 78 71 34 0 31 107 0 250 133 32 65 36 203 34 53 34 191 32 185 34 90 65 88 88 79 78 34 0 31 127 1 4 133 32 65 36 203 34 54 34 32 129 188 32 53 48 48 0 31 160 1 24 133 32 65 36 203 34 56 34 191 32 150 50 48 48 44 38 72 55 68 70 70 58 185 34 87 80 84 34 0 31 187 1 34 133 32 65 36 203 34 57 34 191 32 185 34 69 76 73 83 65 46 66 65 83 34 0 31 209 1 44 133 32 65 36 203 34 78 34 191 32 185 34 68 79 83 78 34 0 31 230 1 54 133 32 65 36 203 34 72 34 191 32 185 34 72 68 66 34 0 31 249 1 134 133 32 65 36 204 202 34 32 34 32 129 188 32 55
12 Nov 2014 10:56:55 DEBUG [dwproto-0-10  ] READ 2:  75 95
12 Nov 2014 10:56:55 DEBUG [dwproto-0-10  ] WRITE1: 0
12 Nov 2014 10:56:55 DEBUG [dwproto-0-10  ] READ1: 210
12 Nov 2014 10:56:55 DEBUG [dwproto-0-10  ] READ 4:  255 0 0 2
12 Nov 2014 10:56:55 DEBUG [dwproto-0-10  ] WRITE 256: 0 32 20 1 144 135 34 84 89 80 69 32 39 82 85 78 39 32 70 79 82 32 77 69 78 85 34 0 32 26 1 154 138 0 32 35 1 244 183 52 44 49 0 32 52 1 254 185 78 34 69 76 67 72 65 78 67 69 34 0 32 61 2 8 174 49 44 49 0 32 80 2 18 133 32 255 154 203 34 34 32 129 188 32 53 51 48 0 32 89 2 28 129 188 32 55 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
12 Nov 2014 10:56:55 DEBUG [dwproto-0-10  ] READ 2:  24 245
12 Nov 2014 10:56:55 DEBUG [dwproto-0-10  ] WRITE1: 0

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
darktrym
User
Beiträge: 784
Registriert: Freitag 24. April 2009, 09:26

Hallo,
könntest du das ein wenig ausführen was ich denn brauche um die Software(Name) als Man in Middle zu nutzen inkl. Konfiguration.
„gcc finds bugs in Linux, NetBSD finds bugs in gcc.“[Michael Dexter, Systems 2008]
Bitbucket, Github
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Ne, ich habe nur beim "DriveWire" Server die logging Ausgaben erhöht. Dann sind auch die Seriellen Daten in der log Datei.

Also kein anderes Tool oder so.

Ansonsten hätte ich wohl ein altes 32Bit Windows XP in VirtualBox installiert. Dafür gibt es ja verschiedene Freie/OpenSource Tools, die dann auch arbeiten können.

Meine Arbeit ist dann unter https://github.com/DWLOAD/DwLoadServer zu finden ;)

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Antworten