嗅探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和串口通信的主要内容,如果未能解决你的问题,请参考以下文章