S7comm协议学习笔记

一、S7comm,西门子为了它生产的PLCSCADAPLC之间的通信而设计的专属私有协议。
在应用层组织的数据经过COTP协议、TPKT协议的进一步处理后,最终通过TCP进行传输。
数据包逻辑上是由高层进行封装再一步步的转递给较低层,但我们接收到包后是低层一层层拆卸交给上层,基于逆向思维,我们之后的分析应该是由低向高展开的。
TPKT协议是一个传输服务协议,它为上层的COPT和下层TCP进行了过渡。
CRCC其实分别是connect requestconnet confirm
连接建立成功后,发送DT包,也就是data ,是在发送数据。
COPT连接包:
length1byte,数据的长度,但并不包含length这个字段。
PDU type1 byte,标识类型,图中的0x0d即为连接确认的类型。
0xe,连接请求
0x0d,连接确认
0x08,断开请求
0x0c,断开确认
0x05,拒绝
DST reference2byte,目标的引用,可以认为是用来唯一标识目标。
SRC reference2byte,源的引用,同上。
option1byte,可以看到wireshark将8位拆为了前四位和后两位:
前四位标识class,也就是标识类别;
倒数第二位对应Extended formats,是否使用拓展样式;
倒数第一位对应No explicit flow control,是否有明确的指定流控制。
parameter,附加的参数字段,参数可以有多个,每个参数又由以下几个字段构成:
code1byte,标识类型,主要有:
0xc0tpdusizetpdu即传送协议数据单元,也就是传输的数据的大小(是否和前面的length有重复之处?)
0xc1src-tsap,翻译过来应该叫源的端到端传输;
0xc2dst-tsap,同上,之后我们再探索;
length,长度,对应的数据。
COPT功能包,其实个人感觉这两种包可以归为一种,
length1byte,长度
PDU type1 byte,图中为0x0f,即为数据传输,此外的type都不太常用。
option1byte,以位为单位划分:
第一位,标识是否为最后一个数据包(从这可以看出,COPT协议当数据较多时,会分为几个单元传输;
后七位,标识TPDUnumber
数据包里SNOPCCxxxx,叫做S7优化连接,它规定了src-tsapSNOPCC000x000xxx,第一个x笔者没有搞明白代表了什么,第二个是连接数,图中即为有一个连接,而在dst-tsap必须为SIMATIC-ROOT-OTH 。刚好也和我们的数据包对应。所以我们分析的数据包应该是一个单向连接,连接的数目是一个。
二、S7comm协议
Header,主要是数据的描述性信息,最重要的是要表明PDU的类型;
Parameter,参数,随着不同类型的PDU会有不同的参数;
Data,具体的数据;
Header
Protocol id1 byte,即协议的id,为0x32
ROSCTR,1byte,pdu的类型,一般由以下几种:
0x01job,就是开工干活的意思,主设备通过job向从设备发出“干活”的命令,具体是读取数据还是写数据由parameter决定;
parameter
0x02ack0x02,确认;
0x03ack data,从设备回应主设备的job
Reserved2byte,保留;
PDU referencepdu的参考;
parameter length,参数的长度;
error class,错误类型,像是图中的0x00就是没有错误的意思,而常见的请求错误则是0x85
error code,错误码,结合错误类型来确定错误,图中的0x00同样是没有错误的意思;
parameter
function0x04read
item count意思是后续跟了几个item,该pdu就一个,所以为1。
item的结构:
variable specification1byte,一般就是0x12
长度,Length of following address specification,数据的长度;
Syntax Id,符号id,一个标志,决定了一些格式性问题,这里是0x10,是
Address data S7-Any pointer-like DBx.DBXx.x的意思,主要就是对于后续的寻址起到了一定的限定;
传输大小,也可以认为是传输类型,在这是4,也就是WORD
DB number,就是数据块编号的意思,0就代表要找的东西不在数据块里;
area,要操作的“东西”,比如0x82,就是读设备的输出,通过这一位也可以看到,我们要读的数据不在DB里,所以DB number为0,如果为DB的话,这1byte应该为0x84
address,具体的地址,如下图所示,前五位没用到,第六位到第二十一位是Byte地址,最后三位是Bit的地址;
Data部分就是传回来的具体数据了;
return code是返回码,用来标识job让干活的结果,这里是0xff,代表的是成功的意思;
data的长度(是真的data的长度,不包含前面)。

Sender MAC address: Siemens-_83:a8:37 (28:63:36:83:a8:37)
Sender IP address: 192.168.0.111
Target MAC address: 00:00:00_00:00:00 (00:00:00:00:00:00)
Target IP address: 192.168.0.1

如何看设备间的通信是否建立:
经过TCP握手、COPT建立连接、S7comm建立通信,这样设备间的通信才正式建立完毕了。
总结:还是做不出来,等工作的时候,有条件,在打工业杯。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值