如何使用python制作串口嗅探物理端口

问题描述:

我有一台通过物理串口RS232与机器通信的PC软件(操作系统:Win 64bit),我想使用python为该端口制作嗅探器。请注意,我是串行端口的初学者。如何使用python制作串口嗅探物理端口

我读过在线发布的多个文档和问题,但其中大多数只是要求使用第三方软件,但我不能这样做,因为原始字节必须解码为字符串消息(我有我自己的方式解码/编码方法)。

目前我有设置是这样的:

///////////////////  Physical COM1  ///////////// 
// (PC) Software // <------------------------> // Machine // 
///////////////////       ///////////// 

而且我希望有一个Python来输出,通过COM1去任何字节。

期望的行为图(虚拟串口有一个问号,因为我不知道这是正确的做法):

///////////////////  Physical COM1  ///////////// 
// (PC) Software // <------------------------> // Machine // 
///////////////////   | Virtual  ///////////// 
           | serial port? 
           v 
         ////////////////// 
         // (PC) Sniffer // (Python) 
         ////////////////// 
           | 
           v 
         (output bytes) 

那些谁知道先进的串行端口监视器,它的“spymode”功能正是我想用python实现的。我试图使用com0com和PortMon,但我找不到配置com0com嗅探物理端口的方法(据我所知,com0com只能生成虚拟端口),而PortMon不支持Windows 64位版本,位。

我一直坚持这几天...任何意见/链接/答案表示赞赏。 谢谢

你应该通过pySerial

只有一个功能,可以在同一时间获得的串口。

对于单向通信(从机器到PC软件),我能想到的从串口嗅探的唯一方法是从port1读取数据并写入到port2,在这里你的机器正在写入port1, PC软件已被修改为从端口2读取。

import serial 

baud_rate = 4800 #whatever baudrate you are listening to 
com_port1 = '/dev/tty1' #replace with your com port path 
com_port1 = '/dev/tty2' 

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) 

为了实现全双工(异步双向通信),你需要有一两道工序,每个方向一个。您将需要以某种方式同步这些过程。一种方法可能是,当一个进程从port1读取时,另一个进程写入到port2,反之亦然。 阅读question

为什么不回应是这样的:

PC S/W < - >共同事业(COM0COM)COMM < - >蟒蛇显示器&前< - > COM1 < - >机

软件方面,需要2个串行任务之一打开COMM和一个打开COM1和随之而来在COMM中心记录器和任何得到记录,然后转发到COM1和副verca。