手把手教你手撸通讯协议(一) S7协议解析

工控安全 3年前 (2022) admin
801 0 0
手把手教你手撸通讯协议(一) S7协议解析
JZGKCHINA
工控技术分享平台

尊重原创 勿抄袭

勿私放其他平台

1、理论知识

数据流方向:
下面这个图很清晰的解释数据包是怎么从网卡一路到应用程序的。
当网卡接收到来自外部调解好的电平信号,网卡将电信号转化为数据缓存到网卡缓存区,然后通过DMA协议将数据同步到内存区域中,CPU直接访问内存,将网卡的数据进行截取,并将截取好的数据发送到应用程序进行拆包解析。 
手把手教你手撸通讯协议(一) S7协议解析

2、协议封装

手把手教你手撸通讯协议(一) S7协议解析
 以上图为例:

由于TCP协议需要各种校验、确认,涉及的知识点有点多,暂时图中以UDP协议为例,其实以太网的协议类似于俄罗斯套娃,从用户层的数据包,到传输层是加上了UDP在传输层的协议头:UDPhdr,然后网络层再在这个帧上加上了一个ip协议头:iphdr;而后到链路层,又加上了ether_hdr协议头,最终通过物理层将数据转化成电平或者光信号传递出去。


 接下去,我们用代码实现一个udp包怎么打包并发送,来深入理解网络是怎么工作的。
首先我们创建一个用户的数据包:body[0];
链路层还未产生ip地址,所以链路层的地址发现主要以mac地址的方式进行通讯,mac的地址长度为6 bytes;链路层的协议主要由2个bytes确定: 
手把手教你手撸通讯协议(一) S7协议解析
 接下来我们要进行网络层的网络头进行打包:
网络层比链路层复杂很多,此时需要产生ip地址,也包含了很多功能。网络层的主要架构如下图所示:
手把手教你手撸通讯协议(一) S7协议解析

代码如下:
主要包含了版本号,首部长度,服务类型,字节数,标识,标志,片偏移,生存时间(TTL),协议,首部校验和,源IP地址,目的IP地址,选项,数据等格式。 
手把手教你手撸通讯协议(一) S7协议解析
在传输层中,产生了端口号:如常见的102端口、80端口、3306端口、44818端口、502端口。
手把手教你手撸通讯协议(一) S7协议解析

3、数据解析

 以下以西门子的S7协议为例,S7协议与上位机通讯主要基于可靠的TCP协议。以下包主要包含了从第五层到第七层的详细数据解析。 
手把手教你手撸通讯协议(一) S7协议解析
读取数据发送报文 
手把手教你手撸通讯协议(一) S7协议解析
  • TPKT(第五层:会话层)

  • 该层总共占4个字节:

  • 版本号:0x03

  • 预留:0x00

  • 长度:0x001F

  • COTP(第六层:表示层)

  • 该层总共占3个字节:

  • 长度:0x02

  • PDU类型(DT Data):0XF0

  • 目标引用:0x80

  • S7Communication(第七层:应用层)

  • 该层总用占24个字节,并且分两部分:

  • Header:

  • 协议ID(Protocol ID):0x32

  • Ack_Data:0x01

  • 预留:0x0000

  • 协议数据单元引用:0x037D

  • 参数长度:0x000E

  • 数据长度:0x0000

  • Parameter:

  • 功能码Read Var:0x04

  • 通信项数:0x01

  • 通信项1:

  • 通信项Header

  • 变量指定:0x12

  • 地址长度:0x0A

  • SyntaxID:0x10

  • 传输数据类型byte:0x02

  • 通信项Param

  • 读取长度:0x04

  • DB号:0x01

  • 存储区类型DB存储区:0x84

  • 开始字节:0x000000 

手把手教你手撸通讯协议(一) S7协议解析
 返回帧: 
手把手教你手撸通讯协议(一) S7协议解析
报文说明:
  • TPKT(第五层:会话层)

  • 该层总共占4个字节:

  • 版本号:0x03

  • 预留:0x00

  • 长度:0x001D

  • COTP(第六层:表示层)

  • 该层总共占3个字节:

  • 长度:0x02

  • PDU类型(DT Data):0XF0

  • 目标引用:0x80

  • S7Communication(第七层:应用层)

  • 该层总用占22个字节,并且分两部分:

  • Header:

  • 协议ID(Protocol ID):0x32

  • Ack_Data:0x03

  • 预留:0x0000

  • 协议数据单元引用:0x037D

  • 参数长度:0x0002

  • 数据长度:0x0008

  • 错误等级:0x00

  • 错误代码:0x00

  • Parameter:

  • 功能码Read Var:0x04

  • 通信项数:0x01

  • 通信项1:

  • 返回结果Success:0xFF

  • 传输数据类型Byte/Word/DWord:0x04

  • 长度:0x0020

  • 数据:0x00000000

  • 该返回报文说明读取的4个字节数值均为0


解包的实现代码: 
手把手教你手撸通讯协议(一) S7协议解析
手把手教你手撸通讯协议(一) S7协议解析
手把手教你手撸通讯协议(一) S7协议解析

其实做工业协议的解析都是按照规则一步一步进行拆解。

下次讲解TCP协议栈的实现。手把手教你手撸通讯协议(一) S7协议解析手把手教你手撸通讯协议(一) S7协议解析手把手教你手撸通讯协议(一) S7协议解析

手把手教你手撸通讯协议(一) S7协议解析


2022年1月

作者简介

Borje Zhou:

 一个机械设计起身的自动化工程师,励志为自动化行业贴砖加瓦。 

往期精选

手把手教你手撸通讯协议(一) S7协议解析


手把手教你手撸通讯协议(一) S7协议解析手把手教你手撸通讯协议(一) S7协议解析

手把手教你手撸通讯协议(一) S7协议解析

1.Smart200&V90伺服系统:已更新15课

2.贝加莱直播课程:已更新16课

3.力控科技产品培训:已更新5课

4.剑指工控经典公开课:已更新22课
5.新品推荐:已更新3课

6.专家课堂:已更新12课

手把手教你手撸通讯协议(一) S7协议解析

原文始发于微信公众号(剑指工控):手把手教你手撸通讯协议(一) S7协议解析

版权声明:admin 发表于 2022年1月12日 下午10:00。
转载请注明:手把手教你手撸通讯协议(一) S7协议解析 | CTF导航

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...