How to make a serial port sniffer sniffing physical port using a python

后端 未结 3 1764
春和景丽
春和景丽 2021-01-18 00:29

I have a PC Software (OS: Win 64bit) that communicates with a machine via physical serial port RS232 and I want to make a sniffer for that port using a python. Please note t

3条回答
  •  傲寒
    傲寒 (楼主)
    2021-01-18 01:12

    You should go through pySerial

    Only one function can acquire the serial port at a time.

    For one-way communication(from machine to PC software), the only way I can think of to sniff from a serial port is to read from a port1 and write to port2, where your machine is writing to port1 and PC software has been modified to read from port2.

    import serial
    
    baud_rate = 4800 #whatever baudrate you are listening to
    com_port1 = '/dev/tty1' #replace with your first com port path
    com_port2 = '/dev/tty2' #replace with your second com port path
    
    listener = serial.Serial(com_port1, baudrate)
    forwarder = serial.Serial(com_port2, baudrate)
    
    while 1:
        serial_out = listener.read(size=1)
        print serial_out #or write it to a file 
        forwarder.write(serial_out)
    

    To achieve full duplex(asynchronous two way communication), you need to have a two processes, one for each direction. You will need to synchronize these process in some way. One way to do it could be, while one process reads from port1, the other writes to port2, and vice-versa. Read this question

提交回复
热议问题