![如何使用 jpnevulator 捕获并记录应用程序和硬件串行端口之间的串行流量?](https://linux22.com/image/141246/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20jpnevulator%20%E6%8D%95%E8%8E%B7%E5%B9%B6%E8%AE%B0%E5%BD%95%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%E5%92%8C%E7%A1%AC%E4%BB%B6%E4%B8%B2%E8%A1%8C%E7%AB%AF%E5%8F%A3%E4%B9%8B%E9%97%B4%E7%9A%84%E4%B8%B2%E8%A1%8C%E6%B5%81%E9%87%8F%EF%BC%9F.png)
好吧,我已经在谷歌上搜索了几个小时,所以我显然无法理解已经提出的有关该主题的各种问题的答案。我希望,通过以更具体的方式再次提出问题,我能够得到我能理解的答案。
我有一些在 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 :
从 /dev/pts/18 读取数据并将该数据“传递”到 /dev/ttyS0,同时将此数据写入指定文件。
从 /dev/ttyS0 读取数据并将该数据“传递”到 /dev/pts/18,同时将此数据写入指定文件。
我知道常见问题解答中有这样的评论:“Jpnevulator 从来没有被设计成位于内核和应用程序之间。很抱歉。”
然而,同样的常见问题解答在第二段中指出:“现在运气好的话,有一些好消息:不久前,Eric Shattow 建议使用伪终端设备位于内核和应用程序之间。”这就是我正在尝试采取的方法,但我没有成功。我缺少什么?
提前感谢大家。
干杯,艾伦
ps 我成功地能够使用我引用的现有问题中提到的 socat 方法捕获来回流量,但此方法没有提供任何对流量加时间戳的方法。我希望 jpnevulator 能为我提供这个。
答案1
我已经回答了我自己的问题:我发现了另一个实用程序可以更好地提供我想要的东西:
https://github.com/geoffmeyers/interceptty
该包包含一个 perl 脚本,该脚本对拦截的输出进行后处理以提供“漂亮”的输出。我发现修改脚本以向每一行添加时间戳非常容易。
感谢杰夫·迈耶斯提供此内容。
艾伦