-Begin-

前言

前面我们对ModbusRTU协议、ModbusTCP协议、欧姆龙FinsTCP协议、三菱SLMP协议都做了说明:

今天我们来分享一下关于西门子S7协议的通信分析。

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

在这里,我主要是结合Wireshark抓包工具,跟大家去分享一下,如何是一步一步抓取西门子S7通信协议底层通信报文的,希望通过我一步一步地分析,(获取资料加VX:xiketang777)让大家都能够对西门子S7协议有所了解的同时,也学会基本的抓包操作与报文分析。

值得说明一下,西门子S7协议非开放协议,以下内容,仅供学习参考。

环境搭建

1、首先我们要准备要准备一个西门子的PLC,并保证PLC与PC之间的网络连接正常。PS:对于手头没有PLC的小伙伴,可以查看这篇文章:

基于S7-PLCSIM Advanced搭建S7通信仿真环境

2、为了抓取到通信的报文,需要实现PC与PLC之间的通信,这里我采用的方式是通过KepServer V6.4来实现,后台关键词:OPC学习套装

3、安装Wireshark抓包软件(获取资料加VX:xiketang777),后台回复关键词:Wireshark

4、认识S7协议的网络模型。

操作步骤

1、首先将KepServer与PLC之间的通信连接配置好;

2、将Wireshark软件打开,并处于监控报文状态;

3、将KepServer进行连接PLC,此时Wireshark软件中会出现报文的数据,将KepServer连接停止并关闭软件,同时将Wireshark的监控停止(获取资料加VX:xiketang777),以便进行后续的报文分析;

协议分析

1、我们发现西门子的S7通信并不是简简单单的TCP通信,在TCP执行三次握手之后,还需要发送两次连接验证,在两次连接验证之后,才进行真正的数据交互。

2、三次握手过程,如下图所示:

3、S7连接第一次验证,如下图所示:

4、S7连接第二次验证,如下图所示:

5、四次挥手过程,如下图所示:

6、S7第一次验证发送报文分析:

TPKT(第五层:会话层)

该层总共占4个字节:

版本号:0x03

预留:0x00

长度:0x0016

COTP(第六层:表示层)

该层总共占用18个字节:

长度:0x11

PDU类型(CR Connect Request 连接请求):0x0E

目标引用:0x0000

源引用:0x0001

扩展格式/流控制:0x00

参数代码 TPDU-Size:0xC0

参数长度:0x01

TPDU大小:0x0A

参数代码 SRC-TASP:0xC1

参数长度:0x02

源TSAP Source TSAP:0x0201

参数代码 DST-TASP:0xC2

参数长度:0x02

目标TSAP Destination TSAP:0x0201

7、S7第一次验证返回报文

TPKT(第五层:会话层)

该层总共占4个字节:

版本号:0x03

预留:0x00

长度:0x0016

COTP(第六层:表示层)

该层总共占18个字节:

长度:0x11

PDU类型(CC Connect Confirm 连接确认):0x0D

目标引用:0x0001

源引用:0x0006

扩展格式/流控制:0x00

参数代码 TPDU-Size:0xC0

参数长度:0x01

TPDU大小:0x0A

参数代码 SRC-TASP:0xC1

参数长度:0x02

Source TSAP:0x0201

参数代码 DST-TASP:0xC2

参数长度:0x02

Destination TSAP:0x0201

8、S7第二次验证发送报文

TPKT(第五层:会话层)

该层总共占4个字节:

版本号:0x03

预留:0x00

长度:0x0019

COTP(第六层:表示层)

该层总共占3个字节:

长度:0x02

PDU类型(DT Data):0XF0

目标引用:0x80

S7 Communication(第七层:应用层)

该层总用占18个字节(获取资料加VX:xiketang777),并且分两部分:

Header:

协议ID(Protocol ID):0x32

ROSCTR:0x01

预留:0x0000

协议数据单元引用:0x037C

参数长度:0x0008

数据长度:0x0000

Parameter:

功能码:0xF0

预留:0x00

最大AmQ(Calling):0x0001

最大AmQ(Called):0x0001

PDU长度:0x03C0

9、S7第二次验证返回报文

TPKT(第五层:会话层)

该层总共占4个字节:

版本号:0x03

预留:0x00

长度:0x0019

COTP(第六层:表示层)

该层总共占3个字节:

长度:0x02

PDU类型(DT Data):0XF0

目标引用:0x80

S7 Communication(第七层:应用层)

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

Header:

协议ID(Protocol ID):0x32

Ack_Data:0x03

预留:0x0000

协议数据单元引用:0x037C

参数长度:0x0008

数据长度:0x0000

错误等级:0x00

错误代码:0x00

Parameter:

功能码:0xF0

预留:0x00

最大AmQ(Calling):0x0001

最大AmQ(Called):0x0001

PDU长度:0x00F0

10、读取数据发送报文:读取DB1.DBX0.0 开始的4个字节

TPKT(第五层:会话层)

该层总共占4个字节:

版本号:0x03

预留:0x00

长度:0x001F

COTP(第六层:表示层)

该层总共占3个字节:

长度:0x02

PDU类型(DT Data):0XF0

目标引用:0x80

S7 Communication(第七层:应用层)

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

Header:

协议ID(Protocol ID):0x32

Ack_Data:0x01

预留:0x0000

协议数据单元引用:0x037D

参数长度:0x000E

数据长度:0x0000

Parameter:

功能码 Read Var:0x04

通信项数:0x01

通信项1:

通信项Header

变量指定:0x12

地址长度:0x0A

Syntax ID:0x10

传输数据类型 byte:0x02

通信项Param

读取长度:0x04

DB号:0x01

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

开始字节:0x000000

11、 读取数据返回报文

TPKT(第五层:会话层)

该层总共占4个字节:

版本号:0x03

预留:0x00

长度:0x001D

COTP(第六层:表示层)

该层总共占3个字节:

长度:0x02

PDU类型(DT Data):0XF0

目标引用:0x80

S7 Communication(第七层:应用层)

该层总用占22个字节(获取资料加VX:xiketang777),并且分两部分:

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

-END-

西门子S7协议底层原理分析相关推荐

  1. C#使用西门子S7 协议读写PLC DB块

    教大家使用C#如何方便快速的读写西门子DB块的值,实现上位机跟plc进行通讯的流程 使用的西门子PLC型号,S7 1200 1.Nuget 安装s7 驱动包 2.西门子plc定义一个db块,这个是我们 ...

  2. 西门子s7协议 android,工控协议 | 西门子S7协议学习分享

    原标题:工控协议 | 西门子S7协议学习分享 *本文作者:gongmo,本文属 FreeBuf 原创奖励计划,未经许可禁止转载. 0×1前言 随着网络安全的发展,工控安全也越发的走进信息安全人员的工作 ...

  3. HashMap底层原理分析(put、get方法)

    1.HashMap底层原理分析(put.get方法) HashMap底层是通过数组加链表的结构来实现的.HashMap通过计算key的hashCode来计算hash值,只要hashCode一样,那ha ...

  4. MyBatis 动态 SQL 底层原理分析

    MyBatis 动态 SQL 底层原理分析 我们在使用mybatis的时候,会在xml中编写sql语句. 比如这段动态sql代码: <update id="update" p ...

  5. java map原理_Java HashMap底层原理分析

    前两天面试的时候,被面试官问到HashMap底层原理,之前只会用,底层实现完全没看过,这两天补了补功课,写篇文章记录一下,好记性不如烂笔头啊,毕竟这年头脑子它记不住东西了哈哈哈.好了,言归正传,今天我 ...

  6. JAVA与西门子S7协议通讯

    1.引入maven依赖 <!--S7协议(与西门子通信依赖)--><dependency><groupId>com.github.s7connector</g ...

  7. 网络协议底层原理7——网络安全

    网络通信中面临的4种安全威胁: 截获:窃听通信内容 中断:中断网络通信 篡改:篡改通信内容 伪造:伪造通信内容 1.网络层 - ARP欺骗 ARP欺骗 (ARP spoofing),又称ARP毒化 ( ...

  8. Spring 事务原理篇:@EnableTransactionManagement注解底层原理分析技巧,就算你看不懂源码,也要学会这个技巧!

    前言 学习了关于Spring AOP原理以及事务的基础知识后,今天咱们来聊聊Spring在底层是如何操作事务的.如果阅读到此文章,并且对Spring AOP原理不太了解的话,建议先阅读下本人的这篇文章 ...

  9. 学习笔记(11):Python网络编程并发编程-粘包底层原理分析

    立即学习:https://edu.csdn.net/course/play/24458/296241?utm_source=blogtoedu  1.send和recv底层分析 1)不管是recv还是 ...

最新文章

  1. 时隔16年,Science再次发布“全世界最前沿的125个科学问题”!
  2. linux笔记 1-13-软件安装
  3. 从《翔谈》说起,看美团
  4. C++trie类的实现(附完整源码)
  5. LintCode Python 简单级题目 96.链表划分
  6. UDDI :一种 XML Web 服务
  7. alchemy php,Python下SQLAlchemy的简单介绍
  8. 蚂蚁海图切片工具linux版本,Web海图服务软件 - 海图在线
  9. squirrel-foundation-demo
  10. 二阶矩阵乘法C语言,c语言矩阵相乘
  11. matlab 多项式表达,Matlab多项式运算
  12. 向Array中添加二分插入排序
  13. 耳机热插拔检测(五)
  14. sqoop连接hive和mysql_【数据平台】sqoop支持hive和mysql互导的基本语句格式
  15. HDU 4540 威威猫系列故事——打地鼠(DP)
  16. 说说你印象中比较深刻的 Bug
  17. 企查查接口full的实现`
  18. 苹果电脑系统还原出现服务器,苹果电脑恢复出厂设置【应对方向】
  19. java毕业设计飞机航班信息查询系统源码+系统+数据库+lw文档+调试运行
  20. 10本好书,助企业赢在数字化转型起跑线

热门文章

  1. 正则表达式获取图片名称
  2. 【恒指早盘分析】9.11恒指今日总结及后市思路
  3. 【计算机毕设】前端文件结构
  4. 自己的坟被人挖了怎么办,今天是一个时间限制
  5. 三维地图php源码,Three.js实现3D地图实例分享
  6. 基于PostGIS叠加分析优化--气象预警分析案例实践
  7. Google Geocoding API---地理编码与反向地理编码
  8. 台式计算机系统错误,台式电脑开机蓝屏,代码是0×0000006B,怎么修复?
  9. matlab不动点迭代代码
  10. 手摸手教会你三次握手和四次挥手