嗅探IOCTL和串口通信

Posted

技术标签:

【中文标题】嗅探IOCTL和串口通信【英文标题】:Sniffing IOCTL and serial port communication 【发布时间】:2013-03-18 03:55:49 【问题描述】:

我正在尝试反转 90 年代早期逻辑分析仪及其 PC 软件使用的协议。 该设备通过RS-232(专有接线)连接并与DOS程序通信,在DOSBOX上成功运行。

我可以使用原始软件控制设备,但使用自定义程序从分析仪下载数据会很有用,但要这样做,我需要知道串行端口上发生了什么。

需要知道串行端口设置的模式是什么,而我确定数据速率是 1200 或 9600 bps(可在设备上配置)我不知道流量控制(我猜它是 RTS/CTS) . 我还需要在不干扰他们通信的情况下进入程序和设备之间的对话。 用另一个程序(cutecom/minicom)读取串口会阻止模拟器从硬件接收数据。

所以,总结一下,我需要知道的是:

/dev/ttyS0 上设置了什么配置(我认为是通过 IOCTL 调用) 程序和设备之间发生了什么。

我正在考虑编写一个库来充当标准 c 库的代理(通过 LD_PRELOAD),但必须有更简单的方法来做到这一点。

【问题讨论】:

【参考方案1】:

您可以使用slsnif(串行线路嗅探器)。

http://linux.die.net/man/1/slsnif

这里是 sourceforge 项目的链接,您可以下载它。我不相信它带有任何现代发行版,但我可能是错的,所以请先检查你发行版的软件存储库。

http://sourceforge.net/projects/slsnif/

【讨论】:

slsniff(可能还有其他类似拦截器)似乎消耗了来自串行端口的任何内容,而没有将其正确转发到模拟器。我可以看到来自设备的内容,但程序看起来好像没有收到任何东西。 @NeonMan,当你运行它时一定要使用 unix98 选项,因为我认为这可能是你提到的原因。 拦截似乎可以很好地转发流量(运行它来转发 RealDev FakeDev1 FakeDev2 rogram you can catch communication FakeDev1 --> RealDev)但是设备似乎没有发回任何东西。我最好的猜测是因为它不能转发 ioctls(RS232 信号)。 Ttyrpld 似乎有潜力,因为它带有内核模块,但我未能设置它并查看 linux 驱动程序代码,它可能无论如何都不会转发 ioctls :( .【参考方案2】:

我使用ttyrpld 进行tty 嗅探。我将它移植到 PPC 并在 2.6.32 上运行。它将板上的所有 tty 流量记录到文件中,每个 tty 一个。效果很好。

【讨论】:

以上是关于嗅探IOCTL和串口通信的主要内容,如果未能解决你的问题,请参考以下文章

STM32怎么编写一个串口通信协议

SPI和普通串口可以通信吗?

Arduino和C51之串口通信

VC串口通信问题

Android UART 串口通信

Java串口通信