如何使用 jpnevulator 捕获并记录应用程序和硬件串行端口之间的串行流量?

如何使用 jpnevulator 捕获并记录应用程序和硬件串行端口之间的串行流量?

好吧,我已经在谷歌上搜索了几个小时,所以我显然无法理解已经提出的有关该主题的各种问题的答案。我希望,通过以更具体的方式再次提出问题,我能够得到我能理解的答案。

我有一些在 Linux 中运行的应用程序,它与连接到串行端口的外部设备进行通信。我希望能够捕获并记录应用程序和设备之间双向发送的数据,并在文件中每行的开头添加时间戳。

作为测试用例,我使用 minicom 作为我想要监视的应用程序,通过空调制解调器电缆连接到另一台也运行 minicom 的计算机。我已经确认,如果我在其中一台计算机上键入字符,则字符会出现在另一台计算机的终端中。到目前为止,一切都很好。

然后我发现了这个问题:

如何监控串口流量?

在回答这个问题时,建议使用 jpnevulator 程序。然而,在查看手册页时,我无法找出使用 jpnevulator 来获得我想要的东西的正确方法。这是我尝试做的:

首先,我打开一个终端窗口并输入以下命令:

$jpnevulator --tty=/dev/ttyS0 --pty --pass --read --ascii --timing-print --file=serial.log

我看到输出: jpnevulator: 从属 pts 设备是 /dev/pts/18

然后我打开另一个终端窗口并输入以下命令:

minicom -D/dev/pts/18 -b115200

Minicom毫无怨言地打开了。

但是,当我在任一终端(本地和远程)中键入字符时,任一终端中都没有出现任何内容。 jpnevulator 仅记录写入 /dev/pts/18 的数据。

我的期望是 jpnevulator :

  1. 从 /dev/pts/18 读取数据并将该数据“传递”到 /dev/ttyS0,同时将此数据写入指定文件。

  2. 从 /dev/ttyS0 读取数据并将该数据“传递”到 /dev/pts/18,同时将此数据写入指定文件。

我知道常见问题解答中有这样的评论:“Jpnevulator 从来没有被设计成位于内核和应用程序之间。很抱歉。”

然而,同样的常见问题解答在第二段中指出:“现在运气好的话,有一些好消息:不久前,Eric Shattow 建议使用伪终端设备位于内核和应用程序之间。”这就是我正在尝试采取的方法,但我没有成功。我缺少什么?

提前感谢大家。

干杯,艾伦

ps 我成功地能够使用我引用的现有问题中提到的 socat 方法捕获来回流量,但此方法没有提供任何对流量加时间戳的方法。我希望 jpnevulator 能为我提供这个。

答案1

我已经回答了我自己的问题:我发现了另一个实用程序可以更好地提供我想要的东西:

https://github.com/geoffmeyers/interceptty

该包包含一个 perl 脚本,该脚本对拦截的输出进行后处理以提供“漂亮”的输出。我发现修改脚本以向每一行添加时间戳非常容易。

感谢杰夫·迈耶斯提供此内容。

艾伦

相关内容