modbus和siemensS7协议鉴别攻击
扫描脚本:确定运行MODBUS协议的设备与 Siemens S7200/S7300 PLC信息方法
摘要
此脚本适用于从实体控制书籍获取的内容,旨在识别使用MODBUS协议的设备,或更进一步,接收Siemens S7200/S7300系列PLC上的某些信息。脚本为Python编写,并且在Python环境中运行。
工具与语言
语言:Python
库:基础Python库
主要功能
MODBUS协议扫描:通过提供IP、功能ID和数据,识别可能的MODBUS响应。
信息查询:针对特定设备检索单位ID与设备信息详情。
设备信息扫描:枚举设备ID,对设备进行信息检索,并对响应进行解析以提供详细描述。
执行方式
```python
python plcscan.py ip 第一个 modbus.py from struct import pack,unpack import socket from optparse import OptionGroup import string
```
脚本关键片段解析
基础设置
协议解析变量:
`__FILTER`:用于过滤不可打印字符。
信息处理函数:
`StripUnprintable()`: 提供了对消息去噪的机制,避免输出中出现不可见字符。
协议错误处理
`ModbusProtocolError`:用于处理协议级别的错误,包括无效的响应长度、无效的操作码等。
`ModbusError`:封装了网络错误、协议错误,以及一般错误的处理,提供了错误代码与描述的关联。
数据包生成与解析
`ModbusPacket`:负责构建与解析用于MODBUS通信的UDP数据包。
样本扫描:
`ScanUnit()`: 提供了对给定IP、端口、单位ID和超时设置执行MODBUS协议扫描的功能。
`Scan()`:聚合逻辑,尝试通过不同的单位ID扫描设备信息,并打印扫描结果。
S7协议层
`TPKT`, `COTPConnectionPacket`, `COTPDataPacket`: SCADA通信协议基础。
`S7Packet`, `S7ProtocolError` `S7Error`: 处理S7通信协议的错误解析与功能执行。
S7设备扫描
`s7`: 模拟的S7协议维护者,负责执行与PLC S7设备的交互任务。包括连接建立、数据请求、错误处理与设备信息解析。
`GetIdentity()`: 从S7设备获取标识信息,用于识别PLC的信息。