gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 01:02:09 37 4
gpt4 key购买 nike

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

我已经阅读了在线发布的多个文档和问题,但其中大部分要求仅使用 3rd 方软件,但我不能这样做,因为必须将原始字节解码为字符串消息(我有自己的解码方式/编码方法)。

目前我有这样的设置:

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

我想要一个 python 输出任何通过 COM1 的字节。

Desired Behavior diagram(虚拟串行端口有一个问号,因为我不确定这是否是正确的方法):

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

那些知道 Advanced Serial Port Monitor 的人,它的“spymode”功能正是我试图使用 python 实现的。

我尝试过使用 com0com 和 PortMon,但我找不到配置 com0com 来嗅探物理端口的方法(据我观察,com0com 只创建虚拟端口)并且 PortMon 不支持 Windows 64 位.

我已经被困在这个问题上好几天了……欢迎任何评论/链接/答案。谢谢,

最佳答案

你应该通过pySerial

一次只能有一个函数获取串口。

对于单向通信(从机器到 PC 软件),我能想到的从串行端口嗅探的唯一方法是从端口 1 读取并写入端口 2,您的机器正在写入端口 1 和 PC 软件已修改为从端口 2 读取。

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)

要实现全双工(异步双向通信),您需要有两个进程,每个方向一个。您需要以某种方式同步这些进程。一种方法是,当一个进程从端口 1 读取时,另一个进程写入端口 2,反之亦然。阅读此 question

关于python - 如何使用python制作串口嗅探器嗅探物理端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19231465/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com