如何从远程 modbus 服务获取设备信息?

问题描述 投票:0回答:3

我们需要向侦听 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.

我们应该如何构建正确的消息并获取设备信息作为响应?

tcp modbus shodan
3个回答
1
投票

不要求Modbus设备实际支持功能代码0x2B。

根据我的经验,这是非常罕见的。


0
投票
  • 我发现 modbus 协议有两种构建消息的模式: ASCII 和 RTU。我使用的是 ASCII,但它很糟糕,因为我发现 TCP 上的 modbus 服务使用 RTU 模式。
  • 另外,当它结束时 TCP,modbus 消息不能有地址字节也不能出错 检查字节,我正在构建带有该字节的消息。
  • 的 我做错的第三件事是,当 modbus 通过 TCP 时,它 消息必须在开头包含一个 7 字节的标头,而我不是 插入。

所有这些都描述在: https://scadahacker.com/library/Documents/ICS_Protocols/Acromag%20-%20Introduction%20to%20Modbus-TCP.pdf

例如,一条格式正确的消息(以十六进制表示)可以是:

000000000005002B0E0106

至少,服务器给我一个可读的响应。消息必须从十六进制转换为二进制,然后插入 TCP 数据包的数据部分,该数据包将发送到服务器的 502 端口,并通过包含 IP 到服务器的 IP 数据包。 Linux nc 命令允许您在 TCP 数据包内发送消息,因此您不必处理 OSI 层。 我的问题是我发送到服务器的消息不符合 modbus/TCP 协议规则。


0
投票

您可以使用 search.censys.io 并检查字段

services.modbus.mei_response.*
。此查询查找具有型号名称的所有服务:

services.modbus.mei_response.objects.model_name: *

检查 7.6k 主机 查询发现 以及 Censys MODBUS 数据定义.

© www.soinside.com 2019 - 2024. All rights reserved.