10.21. Modbus 关键词

modbus 关键词可用于匹配 Modbus 请求的各种属性。

该关键词有三种使用方式:

  • 通过 "function" 设置匹配功能属性;

  • 通过 "access" 设置直接匹配数据访问;

  • 通过 "unit" 设置单独匹配单元标识符,或结合前述的 "function" 或 "access" 设置。

使用 function 设置时,可匹配以下内容:

  • 基于功能码字段及适用时子功能码的操作;

  • 三类 Modbus 功能之一;

  • 公开定义的公共功能(设置 "public");

  • 用户自定义功能(设置 "user");

  • 专用于 Modbus 专有扩展的保留功能(关键词 "reserved");

  • 公共功能的两个子组之一:

    • 已在 Modbus 规范中定义的功能(关键词 "assigned");

    • 未分配功能,保留供未来使用(关键词 "unassigned")。

语法:

modbus: function <值>
modbus: function <值>, subfunction <值>
modbus: function [!] <assigned | unassigned | public | user | reserved | all>

符号 '!' 表示否定

示例:

modbus: function 21                # 写文件记录功能
modbus: function 4, subfunction 4  # 强制只听模式(诊断)功能
modbus: function assigned          # 由 Modbus 应用协议规范 V1.1b3 定义
modbus: function public            # 经 Modbus.org 社区验证
modbus: function user              # 内部使用且规范不支持
modbus: function reserved          # 部分公司用于遗留产品,不对外开放使用
modbus: function !reserved         # 除保留功能外的所有功能

使用 access 设置时,可匹配以下内容:

  • 数据访问类型(读或写);

  • 主表访问之一(离散输入、线圈、输入寄存器和保持寄存器);

  • 地址访问范围;

  • 写入的值。

语法:

modbus: access <read | write>
modbus: access read <discretes | coils | input | holding>
modbus: access read <discretes | coils | input | holding>, address <>
modbus: access write < coils | holding>
modbus: access write < coils | holding>, address <>
modbus: access write < coils | holding>, address <>, value <>

_<值>_ 设置匹配正在访问或写入的地址或值,如下所示:

address 100      # 精确匹配地址 100
address 100<>200 # 大于地址 100 且小于地址 200
address >100     # 大于地址 100
address <100     # 小于地址 100

示例:

modbus: access read                                    # 读访问
modbus: access write                                   # 写访问
modbus: access read input                              # 离散输入表的读访问
modbus: access write coils                             # 线圈表的写访问
modbus: access read discretes, address <100            # 离散输入表地址小于 100 的读访问
modbus: access write holding, address 500, value >200  # 保持寄存器表地址 500 处写入值大于 200

使用 unit 设置时,可匹配以下内容:

  • 连接在桥接器或网关后子网络上的远程设备的 MODBUS 从站地址。目标 IP 地址标识桥接器本身,桥接器使用 MODBUS 单元标识符将请求转发至正确的从设备。

语法:

modbus: unit <值>
modbus: unit <值>, function <值>
modbus: unit <值>, function <值>, subfunction <值>
modbus: unit <值>, function [!] <assigned | unassigned | public | user | reserved | all>
modbus: unit <值>, access <read | write>
modbus: unit <值>, access read <discretes | coils | input | holding>
modbus: unit <值>, access read <discretes | coils | input | holding>, address <值>
modbus: unit <值>, access write < coils | holding>
modbus: unit <值>, access write < coils | holding>, address <值>
modbus: unit <值>, access write < coils | holding>, address <值>, value <值>

_<值>_ 设置匹配正在访问或写入的地址或值,如下所示:

unit 10     # 精确匹配单元标识符 10
unit 10<>20 # 大于单元标识符 10 且小于单元标识符 20
unit >10    # 大于单元标识符 10
unit <10    # 小于单元标识符 10

示例:

modbus: unit 10                                                       # 单元标识符 10
modbus: unit 10, function 21                                          # 单元标识符 10 和写文件记录功能
modbus: unit 10, function 4, subfunction 4                            # 单元标识符 10 和强制只听模式(诊断)功能
modbus: unit 10, function assigned                                    # 单元标识符 10 和已分配功能
modbus: unit 10, function !reserved                                   # 单元标识符 10 和除保留功能外的所有功能
modbus: unit 10, access read                                          # 单元标识符 10 和读访问
modbus: unit 10, access write coils                                   # 单元标识符 10 和线圈表的写访问
modbus: unit >10, access read discretes, address <100                 # 大于单元标识符 10 和离散输入表地址小于 100 的读访问
modbus: unit 10<>20, access write holding, address 500, value >200    # 大于单元标识符 10 且小于单元标识符 20 和保持寄存器表地址 500 处写入值大于 200

(参见:http://www.modbus.org/docs/Modbus_Application_Protocol_V1_1b3.pdf

注意: 读写的地址从 1 开始。如果系统从 0 开始计数,需将地址值加 1。

注意: 根据 MODBUS TCP/IP 实现指南 V1.0b,建议保持与远程设备的 TCP 连接开启,而非为每个 MODBUS/TCP 事务开启和关闭连接。此时,需将流重组深度设置为无限(stream.reassembly.depth: 0)。

注意: 根据 MODBUS TCP/IP 实现指南 V1.0b,串行线路上的 MODBUS 从设备地址范围为 1 至 247(十进制)。地址 0 用作广播地址。

(参见:http://www.modbus.org/docs/Modbus_Messaging_Implementation_Guide_V1_0b.pdf

关于 Modbus 支持的论文和演示(法语)可在此获取: http://www.ssi.gouv.fr/agence/publication/detection-dintrusion-dans-les-systemes-industriels-suricata-et-le-cas-modbus/