Contents
协议
协议模块主要参考
https://github.com/No-Github/1earn
公开的ICS模块进行学习,内容大概没有其他学习文章里的那么详细,主要是总结一下协议本身比较重要的信息及对应字节码,方便自己在分析协议时查看指令及内容,相关具体的原理讲解可以移步到相关的文章
TPKT
中间层传输协议
主要是用于COTP协议和TCP协议之间传输通讯
主要数据为version和length,version一般为3 reserved为保留 值为0x00 长度为90
COTP协议
TCP协议的上层协议,主要是两种包,一种包是连接包一种包是功能包,作用是接收方获得传输方相同边界的数据
连接包PDU-type类型: COTP Connection Packet
0x1: ED Expedited Data,加急数据
0x2: EA Expedited Data Acknowledgement,加急数据确认
0x4: UD,用户数据
0x5: RJ Reject,拒绝
0x6: AK Data Acknowledgement,数据确认
0x7: ER TPDU Error,TPDU错误
0x8: DR Disconnect Request,断开请求
0xC: DC Disconnect Confirm,断开确认
0xD: CC Connect Confirm,连接确认
0xE: CR Connect Request,连接请求
0xF: DT Data,数据传输
参数传输了3条,也是我们常说的payload
功能包:COTP Fuction Packet
0x1: ED Expedited Data,加急数据
0x2: EA Expedited Data Acknowledgement,加急数据确认
0x4: UD,用户数据
0x5: RJ Reject,拒绝
0x6: AK Data Acknowledgement,数据确认
0x7: ER TPDU Error,TPDU错误
0x8: DR Disconnect Request,断开请求
0xC: DC Disconnect Confirm,断开确认
0xD: CC Connect Confirm,连接确认
0xE: CR Connect Request,连接请求
0xF: DT Data,数据传输
s7comm协议分析
主要有三个模块
Header 头部
Parameter 参数
Data 数据
Header部分
PDU-type
0x01 - JOB(Request: job with acknowledgement):作业请求。由主设备发送的请求(例如,读/写存储器,读/写块,启动/停止设备,设置通信);
0x02 - ACK(acknowledgement without additional field):确认响应,没有数据的简单确认(未遇到过由S7 300/400设备发送得);
0x03 - ACK_DATA(Response: acknowledgement with additional field):确认数据响应,这个一般都是响应JOB的请求;
0x07 - USERDATA:原始协议的扩展,参数字段包含请求/响应ID(用于编程/调试,读取SZL,安全功能,时间设置,循环读取...)。
错误类型和错误代码 0x00为不存在
Job和ACK_DATA PDU类型分析
Job请求头数据包和ACK_DATA数据包分析
Parameter实现功能及功能码总结:
实现功能 | 参数名 | 功能码 |
---|---|---|
建立通信 | Setup communication | [0xF0] |
读取值 | Read Var | [0x04] |
写入值 | Write Var | [0x05] |
文件下载-请求下载 | Request download | [0x1A] |
文件下载-下载块 | Download block | [0x1B] |
文件下载-下载结束 | Download ended | [0x1C] |
开始上传 | Start upload | [0x1D] |
上传 | Upload | [0x1E] |
上传结束 | End upload | [0x1F] |
程序调用服务 | PI service | [0x28] |
PLC-STOP | PLC STOP | [0x29] |
Userdata PDU类型分析
实现功能 | 参数名 | 功能码 |
---|---|---|
转换工作模式 | Mode-transition | [0x0] |
程序员命令 | Programmer commands | [0x1] |
基本功能:编程/调试、读取SZL、安全功能、时间设置,循环读取
与前面PDU不同的是此处是使用子功能码进行操作
转换工作模式
子功能码
执行功能 | 参数名 | 子功能码 |
---|---|---|
STOP模式 | STOP | 0x00 |
暖启动 | Warm Restart | 0x01 |
RUN模式 | RUN | 0x02 |
热启动 | Hot Restart | 0x03 |
HOLD模式 | HOLD | 0x04 |
冷启动 | Cold Restart | 0x06 |
H-System冗余运行 | RUN_R (H-System redundant) | 0x09 |
LINK-UP模式 | LINK-UP | 0x0B |
UPDATE模式 | UPDATE | 0x0C |