一 .IEC 60870-5-104 是什么?
IEC 60870-5-104 是一种用于电力系统中数据传输的通信协议,它结合了 IEC 60870-5-101 的应用服务和 TCP/IP 网络协议。该标准定义了一种通过网络连接进行远动控制(如遥测、遥控等)的方法。
使用 Wireshark 捕获和分析 IEC 60870-5-104 流量可以提供对这些通信的深入了解。以下是一些基本步骤和提示:
二 .基本步骤
准备工作
安装 Wireshark:确保你已经安装了最新版本的 Wireshark。
获取访问权限:你需要有权限捕获网络流量,并且了解哪些设备在你的网络上使用 IEC 60870-5-104 协议。
捕获流量
选择接口:启动 Wireshark 并选择一个合适的网络接口来开始捕获流量。如果你知道 IEC 60870-5-104 数据包通常经过哪个接口,那么就选择那个接口。
设置过滤器
为了只捕获相关的 IEC 60870-5-104 流量,你可以设置一个捕获过滤器。例如,tcp port 2404 可以用来捕获默认端口为 2404 的 IEC 60870-5-104 流量。
分析流量
显示过滤器:一旦你有了捕获的数据,你可以使用显示过滤器进一步细化视图。例如,iec60870 或 iec60870.asdu 可以帮助你只查看 IEC 60870-5-104 相关的帧。
解析协议:Wireshark 应该能够自动解析 IEC 60870-5-104 帧。如果不能,你可能需要更新到最新版本或手动添加解码器。
理解 ASDU:ASDU (Application Service Data Unit) 包含了实际的应用层数据。了解如何读取 ASDU 和其内部结构对于理解通信非常重要。
检查错误:注意任何重传、错误消息或异常序列,这可以帮助诊断问题。
三 .理解ASDDU内部结构
ASDU概述
ASDU是IEC 60870-5-104协议栈中应用层的一部分,它负责封装实际的应用数据。每个ASDU包含一个或多个信息对象,这些信息对象可以代表遥测、遥信、遥控等命令或状态。通过分析ASDU,我们可以了解电力系统的实时运行状况,并进行有效的监控和控制。
ASDU内部结构详解
ASDU由几个关键部分组成:
-
类型标识符 (Type Identifier):
- 定义了ASDU所携带的信息类型。
- 每个类型的标识符对应特定种类的数据,例如测量值、事件记录等。
-
可变结构限定词 (Variable Structure Qualifier):
- 决定了ASDU中是否包含时间标签以及信息对象的数量。
- 如果为1,则表示单个信息对象;如果是其他值,则指明有多少个信息对象存在于ASDU中。
-
传送原因 (Cause of Transmission):
- 表示为何发送此ASDU,如周期性传输、响应请求等。
- 这有助于解释数据传输的目的和上下文。
-
公共地址 (Common Address):
- 标识了发送方或接收方的逻辑节点地址。
- 在多点网络中尤其重要,用来区分不同的通信伙伴。
-
信息对象地址 (Information Object Address):
- 指向具体的信息对象,比如某个特定的断路器或传感器。
- 地址空间足够大以适应复杂的电力系统。
-
信息对象 (Information Objects):
- 包含实际的数据值,如电压水平、电流强度等。
- 可能包括额外的时间戳或其他辅助信息。
-
时标 (Time Tags)(如果存在):
- 当需要精确的时间同步时,会附加到某些类型的数据上。
- 对于事故后分析至关重要。
SDU结构图应该包含哪些元素
- 顶部: 显示整个ASDU的边界框,标注为"ASDU"。
- 左侧列表: 列出上述各组成部分,从上至下依次为类型标识符、可变结构限定词、传送原因、公共地址、信息对象地址。
- 右侧内容区 : 展示每个组成部分的具体内容示例,例如类型标识符可能显示为
M_ME_NA_1
,表示归一化测量值。 - 底部: 如果有时间标签,会在最下方用单独一行表示。
四 .wireshark 抓取主站测,子站测中的数据
包括遥测(Telemetry)、遥信(Telecontrol)、遥控(Telecommand)
如果你知道具体的IP地址范围,可以进一步细化捕获规则,例如ip.addr == 主站IP or ip.addr == 子站IP
。
解析ASDU
- 应用显示过滤器 :输入
iec60870
或者更具体的iec60870.asdu
来只查看IEC 60870-5-104相关的帧。 - 检查ASDU字段 :对于每个ASDU,注意以下关键字段:
- 类型标识符 (Type Identifier):确定数据的种类,比如遥测值、遥信状态等。
- 传送原因 (Cause of Transmission):解释为什么发送这个ASDU,例如周期性报告、响应请求等。
- 公共地址 (Common Address) 和 信息对象地址 (Information Object Address):帮助识别消息来源和目标。
- 信息对象 (Information Objects):包含实际的数据值,如测量结果或命令。
- 理解遥测和遥信 :
- 遥测 (Telemetry):通常表示模拟量测量,如电压、电流等。你可以看到相应的数值及其变化趋势。
- 遥信 (Telecontrol):指的是数字状态信号,如断路器的位置。这将显示为二进制状态(开/关)。
- 遥控 (Telecommand):当涉及到遥控命令时,要注意命令的内容和执行结果。这可以通过观察命令发送前后的状态变化来验证。
类型标识符 (Type Identifier)
类型标识符定义了ASDU所携带的信息种类,比如遥测,遥信,并指示如何解释后续的数据字段
简单步骤
步骤一:启动Wireshark并开始捕获
- 启动Wireshark:打开Wireshark应用程序。
- 选择网络接口:选择一个合适的网络接口来捕获流量,确保该接口上有IEC 60870-5-104通信。
- 设置捕获过滤器 :使用
tcp port 2404
来专门捕获默认端口为2404的IEC 60870-5-104流量。如果你知道主站或子站的具体IP地址,可以进一步细化捕获规则,例如ip.addr == 主站IP or ip.addr == 子站IP
。 - 开始捕获:点击"开始"按钮以开始捕获数据包。
步骤二:应用显示过滤器
一旦你有了捕获的数据包:
- 应用显示过滤器 :在Wireshark的过滤栏中输入
iec60870.asdu.type_identifier
或者更通用的iec60870
来只显示与IEC 60870-5-104相关的帧。
步骤三:检查类型标识符
对于每一个捕获到的ASDU数据包:
- 展开协议树:在数据包列表中选择一个包含IEC 60870-5-104的条目,然后展开其协议树视图。
- 找到类型标识符 :在协议树中查找
ASDU
部分,通常会有一个名为Type identifier
的字段。这个字段直接对应于ASDU的类型标识符。 - 解码类型标识符:Wireshark应该能够自动解码类型标识符,并提供一个描述性的名称。如果它显示为十六进制值,你可以进行粘贴复制到对应解析器进行解析查看。
类型标识符详解
类型标识符是一个8位字段,用于区分不同类型的ASDU。以下是一些常见的类型标识符及其含义:
- M_SP_NA_1 (1): 单点信息,带质量描述符
- M_DP_NA_1 (3): 双点信息,带质量描述符
- M_ST_NA_1 (9): 步长测量值,归一化值
- M_ME_NA_1 (11): 测量值,归一化值
- M_ME_NB_1 (12): 测量值,缩放值
- M_SP_TB_1(30):带有时标的单点信息
- M_ME_NC_1 (13): 测量值,短浮点数
- M_IT_NA_1 (20): 积分总量,归一化值
- C_SC_NA_1 (45): 单命令
- C_DC_NA_1 (46): 双命令
- C_RC_NA_1 (47): 设定命令,归一化值
- C_SE_NA_1 (49): 设定命令,缩放值
- C_SE_NB_1 (50): 设定命令,短浮点数
- C_IC_NA_1 (100): 总召唤命令
- C_CI_NA_1 (101): 消息确认命令
- C_CS_NA1(103):时钟同步
- M_ME_NC_1(13) 归一化测量值
每个类型标识符都有特定的应用场景,比如遥测、遥信、遥控等。了解这些可以帮助你更好地分析通信内容。
ASDU的可变结构限定词 (Variable Structure Qualifier)
用于描述ASDU(应用服务数据单元)的结构特性
简单步骤
步骤一:启动Wireshark并开始捕获
同上
步骤二:应用显示过滤器
同上
步骤三:检查可变结构限定词
对于每一个捕获到的ASDU数据包:
- 展开协议树:在数据包列表中选择一个包含IEC 60870-5-104的条目,然后展开其协议树视图。
- 找到VSQ字段 :
- 在协议树中查找
ASDU
部分,通常会有一个名为Variable structure qualifier
的字段。这个字段直接对应于ASDU的可变结构限定词。 - Wireshark应该能够自动解码VSQ,并提供一个描述性的名称或数值解释。如果它显示为十六进制值
- 在协议树中查找
可变结构限定词详解
VSQ是一个8位字段,分为两个主要部分:
-
SQ (Sequence) Bit [Bit 7]:
- 如果SQ=0,则表示后续的信息对象是单独编码的,每个对象都有自己的信息对象地址。
-
- 如果SQ=1,则表示所有信息对象是按顺序排列且共享同一个信息对象地址。
-
Number of Objects [Bits 0-6]:
- 这个7位字段指示了ASDU中包含的信息对象的数量。它可以表示从0到127的对象数量。
- 如果设置了SQ=1,则这个字段还可能表示信息对象序列的长度。
传送原因 (Cause of Transmission)
传送原因(Cause of Transmission, COT)字段是理解ASDU传输背景和目的的关键。它解释了为什么发送特定的ASDU
简单步骤
步骤一:启动Wireshark并开始捕获
- 启动Wireshark:打开Wireshark应用程序。
- 选择网络接口:选择一个合适的网络接口来捕获流量,确保该接口上有IEC 60870-5-104通信。
- 设置捕获过滤器 :使用
tcp port 2404
来专门捕获默认端口为2404的IEC 60870-5-104流量。如果你知道主站或子站的具体IP地址,可以进一步细化捕获规则,例如ip.addr == 主站IP or ip.addr == 子站IP
。 - 开始捕获:点击"开始"按钮以开始捕获数据包。
步骤二:应用显示过滤器
一旦你有了捕获的数据包:
- 应用显示过滤器 :在Wireshark的过滤栏中输入
iec60870.asdu.cause_of_transmission
或者更通用的iec60870
来只显示与IEC 60870-5-104相关的帧。
步骤三:检查传送原因
对于每一个捕获到的ASDU数据包:
- 展开协议树:在数据包列表中选择一个包含IEC 60870-5-104的条目,然后展开其协议树视图。
- 找到传送原因字段 :在协议树中查找
ASDU
部分,通常会有一个名为Cause of transmission
的字段。这个字段直接对应于ASDU的传送原因。 - 解码传送原因:Wireshark应该能够自动解码传送原因,并提供一个描述性的名称。如果它显示为十六进制值,你可以进行粘贴复制到对应解析器进行解析查看。
传送原因详解
传送原因是一个8位字段,用于指示为何发送特定的ASDU。以下是一些常见的传送原因及其含义:
- spontaneous (0x01): 自发传输,没有外部请求触发。
- background_scan (0x03): 背景扫描,周期性地从子站收集数据。
- requested (0x04): 响应主站请求。
- sudden_change (0x05): 突变,当测量值突然变化超过预设阈值时发送。
- periodic (0x06): 定期传输,按照设定的时间间隔发送。
- initialization (0x07): 初始化,通常发生在连接建立后。
- command (0x09): 命令执行结果,响应遥控或其他命令。
- activation (0x0D): 激活,如总召唤命令激活。
- deactivation (0x0E): 取消激活。
- response (0x0F): 响应先前的命令或查询。
- unknown_cot (0x10 - 0x2F): 保留或未定义的原因。
- negative_acknowledgement (0x30): 负面确认,表示接收方未能正确处理前一个ASDU。
- sequence (0x3B): 序列化传输的一部分。
- unknown_cot (0x40 - 0xFF): 保留或未定义的原因。
每个传送原因都有特定的应用场景,比如定期报告状态、响应命令或查询等。了解这些可以帮助你更好地分析通信内容。
公共地址 (Common Address) 和 信息对象地址 (Information Object Address)
识别和理解ASDU中的公共地址和信息对象地址对于分析通信内容至关重要
简单步骤
步骤一:启动Wireshark并开始捕获
同上
步骤二:应用显示过滤器
同上
步骤三:检查公共地址和信息对象地址
对于每一个捕获到的ASDU数据包:
- 展开协议树:在数据包列表中选择一个包含IEC 60870-5-104的条目,然后展开其协议树视图。
- 找到公共地址字段 :
- 在协议树中查找
ASDU
部分,通常会有一个名为Common address
的字段。这个字段直接对应于ASDU的公共地址。 - 公共地址标识了发送方(通常是子站)或接收方(通常是主站)的逻辑地址。
- 在协议树中查找
- 找到信息对象地址字段 :
- 同样在
ASDU
部分,查找名为Information object address
的字段。这个字段用于指定具体哪个设备或功能块提供了测量值或其他信息。 - 信息对象地址可以指向特定的传感器、断路器等。
- 同样在
公共地址 (Common Address) 详解
- 定义: 公共地址是IEC 60870-5-104协议中用于标识参与通信的设备或节点的逻辑地址。
- 用途: 它用于区分不同的通信伙伴,尤其是在多点网络环境中。
- 格式: 通常是一个16位的整数,范围从0到65535。实际使用的地址取决于系统配置。
信息对象地址 (Information Object Address) 详解
- 定义: 信息对象地址是指向具体信息对象的标识符,如某个特定的断路器、传感器或测量点。
- 用途: 它使得能够精确定位和引用具体的物理或逻辑实体,从而确保数据的正确关联。
- 格式: 通常是一个24位的整数,范围从0到16777215。它允许在一个系统内对大量不同对象进行唯一标识。
实际操作示例
假设我们捕获到了一个带有类型标识符M_ME_NC_1
的数据包,这表示这是一个归一化的测量值ASDU:
- 构造ASDU :创建一个
M_ME_NC_1
ASDU,其中包含电压测量值。 - 添加公共地址 :设置适当的公共地址,例如
0x0A
(10),标识子站。 - 添加信息对象地址 :为每个测量值指定信息对象地址,例如
0x000001
(1),表示第一个电压测量点。 - 发送数据:通过网络将这个ASDU发送给主站。
- 接收与处理:主站接收到命令后,解析ASDU并更新其内部数据库,以便后续分析和显示。
如上图中标标记的IOA=信息对象地址 (Information Object Address)
- 数值解释 :2693是一个十进制数,在IEC 60870-5-104协议中,IOA通常以24位整数表示,范围从0到16777215。因此,2693在十六进制中表示为
0x0A85
。 - 逻辑意义 :具体的意义取决于系统的配置和设计。不同的电力系统或设备制造商可能会有不同的约定来分配这些地址。例如:
- 它可能代表某个特定的测量点(如电压或电流传感器)。
- 或者它可能是某个断路器的状态。
- 也有可能是某种类型的遥信状态或其他类型的监控数据。
如上图,ADDR:3
通常指的是公共地址(Common Address)。这个字段用于标识参与通信的设备或节点,特别是在多点网络环境中区分不同的通信伙伴。
公共地址 (Common Address) 的含义
- 定义: 公共地址是IEC 60870-5-104协议中用于标识参与通信的设备或节点的逻辑地址。
- 用途: 它用于区分不同的通信伙伴,尤其是在多点网络环境中,确保每个ASDU能够被正确路由到目标设备。
- 格式: 通常是一个16位的整数,范围从0到65535。实际使用的地址取决于系统配置和设计。
ADDR:3的具体解释
当您看到ADDR:3
时,这意味着ASDU中的公共地址被设置为3。具体来说:
- 数值解释 :3是一个十进制数,在十六进制中表示为
0x0003
。 - 逻辑意义 :这个地址标识了特定的通信伙伴。例如:
- 在一个典型的电力系统中,它可能代表某个特定的子站(RTU)或智能电子设备(IED)。
- 主站(控制中心)可能会使用这个地址来指定数据应该发送给哪个子站,或者子站使用这个地址来表明数据来自哪个位置。
时标 (Time Tags)
**时标(Time Tags)**是确保数据时间同步和精确记录的关键组成部分
iec60870_asdu.typeid == M_SP_TB_1 进行检索或者iec60870.asdu.time_tag
简单步骤
步骤一:启动Wireshark并开始捕获
同上
步骤二:应用显示过滤器
同上
步骤三:检查时标
对于每一个捕获到的ASDU数据包:
- 展开协议树:在数据包列表中选择一个包含IEC 60870-5-104的条目,然后展开其协议树视图。
- 找到时标字段 :
- 在协议树中查找
ASDU
部分,通常会有一个名为Time tag
或Timestamp
的字段。这个字段直接对应于ASDU的时标。 - Wireshark应该能够自动解码时标,并提供一个描述性的名称或数值解释。如果它显示为十六进制值
- 在协议树中查找