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

时间:2016-03-14 15:09:59

标签: tcp-ip modbus shodan

我们需要向远程modbus服务发送消息,并在设备上获取设备信息,就像shodan(https://www.shodan.io)从运行modbus服务的IP地址搜索一样。我们已阅读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.

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

2 个答案:

答案 0 :(得分:1)

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

根据我的经验,这种情况非常罕见。

答案 1 :(得分: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包发送到服务器。 Linux nc命令允许您在TCP数据包内发送消息,因此您不必处理OSI层。 我的问题是我发送到服务器的消息不符合modbus / TCP协议规则。