gk-auto 发表于 2020-4-9 20:42:56

西门子S7通信协议底层原理及抓包分析

西门子作为一个老牌工控企业,在中国市场拥有很高的市场占有率。如果要说起西门子的通信协议,相信大家多多少少能说出一些,比如MPI、PPI、USS、Profibus、Profinet、S7等,但是西门子在协议的开放性方面还是相对要封闭一些,所以很多时候我们是没法知道这些协议的底层通信原理的。

在这里,我主要是结合Wireshark抓包工具,跟大家去分享一下,如何是一步一步抓取西门子S7通信协议底层通信报文的,希望通过我一步一步地分析,让大家都能够对西门子S7协议有所了解的同时,也学会基本的抓包操作与报文分析。
1环境搭建
1、首先我们要准备要准备一个西门子的PLC,并保证PLC与PC之间的网络连接正常。PS:对于手头没有PLC的童鞋,可以自行查看相关文章:基于TIA搭建西门子PLC仿真环境及通信方案。
2、为了抓取到通信的报文,需要实现PC与PLC之间的通信,这里我采用的方式是通过KepServer V6.4来实现。3、安装Wireshark抓包软件。4、认识S7协议的网络模型。http://p8.qhimg.com/t01c009e94fe1fad1e8.jpg?size=672x476
2操作步骤1、首先将KepServer与PLC之间的通信连接配置好;PS:对于KepServer软件应用可以参考相关文章:基于KepServer V6.4实现与三菱FX3U PLC之间的通信。2、将Wireshark软件打开,并处于监控报文状态;
http://p3.qhimg.com/t018ff0bfac70c6dec3.jpg?size=660x2923、将KepServer进行连接PLC,此时Wireshark软件中会出现报文的数据,将KepServer连接停止并关闭软件,同时将Wireshark的监控停止,以便进行后续的报文分析;
3初步分析
结合自身对TCP通信的了解,可以将抓取到的报文类型进行区分:
http://p5.qhimg.com/t01e782cdee689d81aa.jpg?size=556x127TCP三次握手过程
http://p0.qhimg.com/t0124213fa37f8e0669.jpg?size=556x153S7协议的第一次连接验证
http://p3.qhimg.com/t014c64dd3a16d0213c.jpg?size=555x153S7协议的第二次连接验证
http://p5.qhimg.com/t012a4fcb215d75283b.jpg?size=558x82TCP四次挥手过程
通过分析,我们发现西门子的S7通信并不是简简单单的TCP通信,在TCP执行三次握手之后,还需要发送两次连接验证,在两次连接验证之后,才进行真正的数据交互。
4抓包分析
(1)第一次握手发送报文
http://p9.qhimg.com/t01d1bd199b86c73d95.jpg?size=557x315报文说明:TPKT(第五层:会话层)该层总共占4个字节:版本号:0x03预留:0x00长度:0x0016COTP(第六层:表示层)该层总共占用18个字节:长度:0x11PDU类型(CRConnect Request 连接请求):0x0E目标引用:0x0000源引用:0x0001扩展格式/流控制:0x00参数代码TPDU-Size:0xC0参数长度:0x01TPDU大小:0x0A参数代码SRC-TASP:0xC1参数长度:0x02SourceTSAP:0x0201参数代码DST-TASP:0xC2参数长度:0x02DestinationTSAP:0x0201
(2)第一次握手回复报文http://p4.qhimg.com/t01574e30766a2b13cf.jpg?size=560x299报文说明:TPKT(第五层:会话层)该层总共占4个字节:版本号:0x03预留:0x00长度:0x0016COTP(第六层:表示层)该层总共占18个字节:长度:0x11PDU类型(CCConnect Confirm 连接确认):0x0D目标引用:0x0001源引用:0x0006扩展格式/流控制:0x00参数代码TPDU-Size:0xC0参数长度:0x01TPDU大小:0x0A参数代码SRC-TASP:0xC1参数长度:0x02SourceTSAP:0x0201参数代码DST-TASP:0xC2参数长度:0x02DestinationTSAP:0x0201
(3)第二次握手发送报文http://p6.qhimg.com/t0188ae61e47c21e788.jpg?size=557x376报文说明:TPKT(第五层:会话层)该层总共占4个字节:版本号:0x03预留:0x00长度:0x0019COTP(第六层:表示层)该层总共占3个字节:长度:0x02PDU类型(DT Data):0XF0目标引用:0x80S7Communication(第七层:应用层)该层总用占18个字节,并且分两部分:Header:协议ID(Protocol ID):0x32ROSCTR:0x01预留:0x0000协议数据单元引用:0x037C参数长度:0x0008数据长度:0x0000Parameter:功能码:0xF0预留:0x00最大AmQ(Calling):0x0001最大AmQ(Called):0x0001PDU长度:0x03C0
(4)第二次握手返回报文
http://p2.qhimg.com/t0168cd0c882ef0a0a2.jpg?size=558x409报文说明:TPKT(第五层:会话层)该层总共占4个字节:版本号:0x03预留:0x00长度:0x0019COTP(第六层:表示层)该层总共占3个字节:长度:0x02PDU类型(DT Data):0XF0目标引用:0x80S7Communication(第七层:应用层)该层总用占20个字节,并且分两部分:Header:协议ID(Protocol ID):0x32Ack_Data:0x03预留:0x0000协议数据单元引用:0x037C参数长度:0x0008数据长度:0x0000错误等级:0x00错误代码:0x00Parameter:功能码:0xF0预留:0x00最大AmQ(Calling):0x0001最大AmQ(Called):0x0001PDU长度:0x00F0
(5)读取数据发送报文:由于只配置了VD0,因此读取DB1.DBX0.0 开始的4个字节http://p0.qhimg.com/t01cbc273dc029010aa.jpg?size=564x457报文说明:TPKT(第五层:会话层)该层总共占4个字节:版本号:0x03预留:0x00长度:0x001FCOTP(第六层:表示层)该层总共占3个字节:长度:0x02PDU类型(DT Data):0XF0目标引用:0x80S7Communication(第七层:应用层)该层总用占24个字节,并且分两部分:Header:协议ID(Protocol ID):0x32Ack_Data:0x01预留:0x0000协议数据单元引用:0x037D参数长度:0x000E数据长度:0x0000Parameter:功能码Read Var:0x04通信项数:0x01通信项1:通信项Header变量指定:0x12地址长度:0x0ASyntaxID:0x10传输数据类型byte:0x02通信项Param读取长度:0x04DB号:0x01存储区类型DB存储区:0x84开始字节:0x000000
(6)读取数据返回报文:
http://p3.qhimg.com/t0123962a228b519f65.jpg?size=562x411报文说明:
TPKT(第五层:会话层)
该层总共占4个字节:版本号:0x03预留:0x00长度:0x001DCOTP(第六层:表示层)该层总共占3个字节:长度:0x02PDU类型(DT Data):0XF0目标引用:0x80S7Communication(第七层:应用层)该层总用占22个字节,并且分两部分:Header:协议ID(Protocol ID):0x32Ack_Data:0x03预留:0x0000协议数据单元引用:0x037D参数长度:0x0002数据长度:0x0008错误等级:0x00错误代码:0x00Parameter:功能码Read Var:0x04通信项数:0x01通信项1:返回结果Success:0xFF传输数据类型Byte/Word/DWord:0x04长度:0x0020数据:0x00000000
该返回报文说明读取的4个字节数值均为0

如果将这里的报文进行整理,结合Socket通信的相关知识,与西门子PLC通信的问题便迎刃而解了。

jingyudiangong 发表于 2020-4-10 15:30:50

真是被感动的痛哭流涕……

老蘑菇QAQ 发表于 2020-10-20 09:53:42

真是难得给力的帖子啊。

SXTY 发表于 2025-11-12 22:48:53

不请自来,只为说一句:太精彩了!

gjd151@163.com 发表于 2025-11-12 22:58:33

画面感太强了,仿佛身临其境!

藁卋朙 发表于 2025-11-12 23:09:50

谁懂啊!真的被戳中笑点 / 泪点了

myluckyman668 发表于 2025-11-12 23:37:37

谁懂啊!这内容我能循环看十遍

qjc1981 发表于 2025-11-13 05:01:28

这波分析到位,逻辑满分!

一杯清茶豆强 发表于 2025-11-14 02:22:54

水个经验,楼主加油,支持你~

Lily 发表于 2025-11-14 07:11:31

我先占个楼,等下再慢慢看~
页: [1] 2
查看完整版本: 西门子S7通信协议底层原理及抓包分析