我们需要向侦听 por 502 的远程 modbus 服务发送消息,并获得设备信息作为响应,就像 shodan (https://www.shodan.io) 从 IP 地址搜索时所做的一样运行 modbus 服务。我们已阅读 modbus 规范并尝试构建一条消息,但我们通过 TCP 将其发送到服务器,但它从未响应。 例如,以下消息应该可以解决问题,但对我们不起作用:
002B0E0104
00: address, not used.
2B: function code for get information
0E: additional function code for get device information
01: read device ID code
04: object ID.
我们应该如何构建正确的消息并获取设备信息作为响应?
不要求Modbus设备实际支持功能代码0x2B。
根据我的经验,这是非常罕见的。
例如,一条格式正确的消息(以十六进制表示)可以是:
000000000005002B0E0106
至少,服务器给我一个可读的响应。消息必须从十六进制转换为二进制,然后插入 TCP 数据包的数据部分,该数据包将发送到服务器的 502 端口,并通过包含 IP 到服务器的 IP 数据包。 Linux nc 命令允许您在 TCP 数据包内发送消息,因此您不必处理 OSI 层。 我的问题是我发送到服务器的消息不符合 modbus/TCP 协议规则。
您可以使用 search.censys.io 并检查字段
services.modbus.mei_response.*
。此查询查找具有型号名称的所有服务:
services.modbus.mei_response.objects.model_name: *
检查 7.6k 主机 查询发现 以及 Censys MODBUS 数据定义.