SpyPort串口嗅探器/记录器

串口嗅探器和记录器


SpyPort是什么?

SpyPort是SerialTool的一个功能,可以直接从内核监视Windows环境中串口的所有流量。
这种方法使用了由我们的团队专门为SerialTool开发的驱动程序,以拦截操作系统针对特定COM端口的所有调用。
更具体地说,即使COM端口已经打开并被另一个应用程序使用,内核驱动程序也会拦截并过滤Windows的IRP和IOCTL_SERIAL信号,因此可以“嗅探”串行通信。
该功能仅适用于SerialTool的PRO版本。

主要界面

可以嗅探和记录什么?

您可以选择性地过滤一些感兴趣的信号,也可以直接记录所有低级别的流量。 SpyPort提供了仅保存输出流量(IRP_MJ_WRITE)、输入流量(IRP_MJ_READ)或选择一个或所有的IOCTL_SERIAL的完整流量的选项。输入和输出数据可以分别保存为文本或二进制格式,针对IRP_MJ_WRITEIRP_MJ_READ(COM端口的TX和RX),其他信号则保存为文本格式。

如何显示嗅探/记录的数据?

由于SerialTool具有先进的功能,可以详细显示每个数据包,以ASCII或十六进制格式显示其中的数据。
这个特性可以更快速和精确地进行查询,并且还可以在数据包中搜索特定模式、以二进制格式保存/导出感兴趣的数据包或将其以ASCII格式复制到剪贴板中。
每个数据包都会详细显示其所有重要数据,例如接收的精确时间(以毫秒为单位)、数据包类型以及前一个和后一个数据包之间的时间间隔。
数据包的分析类型符合SerialTool 1.6.0版本引入的会话包类型。
您可以随时停止记录,而不会影响当前正在使用COM端口的软件。

嗅探到的串口数据包的ASCII和十六进制显示

SpyPort与SerialTool的使用示例

SpyPort模块的使用领域多种多样,包括:

1. 监控自身和第三方应用程序。

在工业和嵌入式领域,发现和诊断错误通常非常困难。有时候,自己的应用程序或第三方应用程序在数小时后出现缺陷,而开发人员却无法在场,无法及时解决问题。因此,SerialTool的SpyPort模块被设计为在直观有效的环境中提供长时间的监听/记录,帮助开发人员找出问题的原因。
典型的例子是,工业应用程序通过串口与其他设备通信。
如果出现故障,重要的是能够监视官方“发布”模式下软件的行为,以确定问题出现的位置。SpyPort不会干扰正在监视的软件,并允许分析所有的输入和输出流量。

2. 逆向工程。

在需要“捕获”特定软件串口进出流量的场景中,例如在连接设备上下载固件时,SpyPort是理想的工具! 它可以直接将第三方软件传输的所有字节以二进制格式保存,并捕获感兴趣的数据(例如固件)。

3. 调试。

开发串口软件时,确保发送和接收的数据正确,遵循特定的时间表是绝对必要的,有时还需要正确控制COM端口的其他信号,如DTR和RTS。
当开发人员编写自己的软件时,SpyPort可以帮助验证串口的行为是否符合预期,串口是否正确打开,并且读取和写入是否按照规定执行 。 在这种情况下,SerialTool与其SpyPort模块成为验证所有软件正确编写的基本工具。当您想要创建与串口通信的软件时,SpyPort变得绝对必不可少。

Filtered Signals by SerialTool

IRP_MJ and IOCTL_SERIAL interpreted signals.

Signals List:

  • IRP_MJ_CREATE
  • IRP_MJ_CLOSE
  • IRP_MJ_CLEANUP
  • IRP_MJ_READ
  • IRP_MJ_WRITE
  • IRP_MJ_FLUSH_BUFFERS
  • IRP_MJ_QUERY_INFORMATION
  • IRP_MJ_SET_INFORMATION
  • IRP_MJ_SYSTEM_CONTROL
  • IOCTL_SERIAL_GET_BAUD_RATE
  • IOCTL_SERIAL_SET_BAUD_RATE
  • IOCTL_SERIAL_GET_HANDFLOW
  • IOCTL_SERIAL_SET_HANDFLOW
  • IOCTL_SERIAL_GET_LINE_CONTROL
  • IOCTL_SERIAL_SET_LINE_CONTROL
  • IOCTL_SERIAL_GET_TIMEOUTS
  • IOCTL_SERIAL_SET_TIMEOUTS
  • IOCTL_SERIAL_SET_QUEUE_SIZE
  • IOCTL_SERIAL_CONFIG_SIZE
  • IOCTL_SERIAL_GET_CHARS
  • IOCTL_SERIAL_SET_CHARS
  • IOCTL_SERIAL_SET_DTR
  • IOCTL_SERIAL_CLR_DTR
  • IOCTL_SERIAL_SET_RTS
  • IOCTL_SERIAL_CLR_RTS
  • IOCTL_SERIAL_SET_WAIT_MASK
  • IOCTL_SERIAL_GET_WAIT_MASK
  • IOCTL_SERIAL_WAIT_ON_MASK
  • IOCTL_SERIAL_PURGE
  • IOCTL_SERIAL_GET_COMMSTATUS
  • IOCTL_SERIAL_SET_BREAK_OFF
  • IOCTL_SERIAL_SET_BREAK_ON
  • IOCTL_SERIAL_CLEAR_STATS
  • IOCTL_SERIAL_RESET_DEVICE
  • IOCTL_SERIAL_SET_FIFO_CONTROL
  • IOCTL_SERIAL_SET_MODEM_CONTROL
  • IOCTL_SERIAL_SET_XOFF
  • IOCTL_SERIAL_SET_XON
  • IOCTL_SERIAL_GET_MODEM_CONTROL