1、如何抓取Modbus TCP/UDP 数据包实战
作为工控狗的我,在看到 CEIWEI最近发布了Modbus RTU Over TCP/UDP 过滤监控的新工具后,就积极的跑去他的官网看了一下,原来是Modbus协议TCP/UDP抓包工具,要知道他的CommMonitor串口精灵也有此功能,简直是我们工控狗的福音,因为免费版本也是可以永久使用。
下面以Modbus RTU TCP为示例,讲解如何抓取Modbus TCP/UDP通信数据包,因为CEIWEI ModbusMonitor 是完全解析了的Modbus协议,监控结果即所得的,就不用自己在再TCP/UDP封包的基础上二次分析了。
- 下载安装CEIWEI ModbusMonitor过滤监控工具, http://www.ceiwei.com/down/CEIWEI_ModbusMonitor_20223.zip
安装完成后,运行如下图,和CommMonitor串口监控精灵一样,ModbusMonitor的[+]增加了一行文字[新建监控],
- 新建监控会话
1、开启监控,点击[新建监控],弹出如下图对话框:
2、网络监控属性:
其实他不但可以监控Modbus协议,还可以监控任意TCP/UDP数据包,这里我们只关心Modbus,默认端口即502,因为是主站
模式,所以从站是服务器,那么只选择[远程端口]为:502即可,如果你的从站服务器不是502,请选择正确对应的端口。
3、各个数据视图:
a、列表视图是指把数据显示为表格的形式;
b、Dump视图,数据包会以200ms时间内合并数据包;
c、Line视图,数据包是以API的形式加以说明;
d、终端视图,是以ASCII字符串的形式输出来Memo中,对于不可显示的字符以?显示;
e、Modbus视图,这个是我们最重要的,必须选择,因勾选了此视图,才可以分析Modbus数据包,否是不会显示的;
在勾选了Modbus视图后,Modbus模式可以选择了:
1、当选择Modbus RTU TCP/UDP模式,表示设备通信数据包是加了TCP6个字节头的RTU数据,没有CRC校验值;
2、当选择Modbus RTU Over TCP/UDP模式,表示设备通信是直接RTU数据格式发送,是没有TCP 6个字节头的,
并且RTU是有CRC校验值的,和串口RTU模式一样;
3、当选择Modbus ASCII Over TCP/UDP模式,表示设备通信是TCP/UDP模式,直接ASCII数据格式发送的,没有TCP头,和串口ASCII模式一样。
[Modbus主站模式]:因为我们的电脑是主站Modbus Poll端,这里要勾上,如果是从站的话,正好相反,不勾,并且是要选[本地端口]:502;
- 打开Modbus Poll连接设备端,测试读取寄存器:
1、新建连接,选择Modubs TCP/IP,默认数据模式是加了6个字节头的TCP RTU,是不可更改。
2、Setup-> Read/Write Definition 设置读写参数:这里我们选择 03 保持寄存器,同样从站也是同样设置;
3、连接成功后,如下图,数据显示OK.
- 查看监控数据包
1、Modbus 视图数据包:
如下图,Modbus数据包成功抓取到了,并且他已经给我们分解了TCP/UDP封包,直观的展出Modbus数据包信息:
- 保存当前监控会话
监控到的数据,我们可以保存成会话,如下图,在下次要使用时,可以打开。如果Modbus设备已打开了,会话是可以直接以之
前监控的条件启动监控,继续监控Modbus的通信数据包。
- 导出数据包到文本文件
在视图上我们右键菜单,如下图,保存成文本文件,
- 原始TCP数据包
如下图:原始数据包是包含了TCP6个字节头的,RTU数据段是没有CRC值结尾;
总结:
注意个问题,要先打监控会话,再打开 被监控软件Mbpoll.exe 然后RTU TCP连接远程设备;
因为已经通信了的连接,监控是后开的,是监控不到的,也就是说内核驱动还没有开启监控,旧连接是无法被监控得的;
CEIWEI ModbusMonitor监控精灵,是过滤监控Modbus RTU Over TCP/UDP比较方便的国产小软件,监控结果所见即所得,免除了其他的网络监控软件那样,还要二次分析TCP/UDP数据包,再次分解出Modbus数据包信息。当然他还有更新多功能,待我们去挖解。
引用:http://www.ceiwei.com/?qt=modbusmonitor&btn=12