使用 Wireshark 捕获和分析 IEC 60870-5-104 流量基本步骤

一 .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由几个关键部分组成:

  1. 类型标识符 (Type Identifier):

    • 定义了ASDU所携带的信息类型。
    • 每个类型的标识符对应特定种类的数据,例如测量值、事件记录等。
  2. 可变结构限定词 (Variable Structure Qualifier):

    • 决定了ASDU中是否包含时间标签以及信息对象的数量。
    • 如果为1,则表示单个信息对象;如果是其他值,则指明有多少个信息对象存在于ASDU中。
  3. 传送原因 (Cause of Transmission):

    • 表示为何发送此ASDU,如周期性传输、响应请求等。
    • 这有助于解释数据传输的目的和上下文。
  4. 公共地址 (Common Address):

    • 标识了发送方或接收方的逻辑节点地址。
    • 在多点网络中尤其重要,用来区分不同的通信伙伴。
  5. 信息对象地址 (Information Object Address):

    • 指向具体的信息对象,比如某个特定的断路器或传感器。
    • 地址空间足够大以适应复杂的电力系统。
  6. 信息对象 (Information Objects):

    • 包含实际的数据值,如电压水平、电流强度等。
    • 可能包括额外的时间戳或其他辅助信息。
  7. 时标 (Time Tags)(如果存在):

    • 当需要精确的时间同步时,会附加到某些类型的数据上。
    • 对于事故后分析至关重要。

SDU结构图应该包含哪些元素

  • 顶部: 显示整个ASDU的边界框,标注为"ASDU"。
  • 左侧列表: 列出上述各组成部分,从上至下依次为类型标识符、可变结构限定词、传送原因、公共地址、信息对象地址。
  • 右侧内容区 : 展示每个组成部分的具体内容示例,例如类型标识符可能显示为M_ME_NA_1,表示归一化测量值。
  • 底部: 如果有时间标签,会在最下方用单独一行表示。

四 .wireshark 抓取主站测,子站测中的数据

包括遥测(Telemetry)、遥信(Telecontrol)、遥控(Telecommand)

如果你知道具体的IP地址范围,可以进一步细化捕获规则,例如ip.addr == 主站IP or ip.addr == 子站IP

解析ASDU

  1. 应用显示过滤器 :输入iec60870或者更具体的iec60870.asdu来只查看IEC 60870-5-104相关的帧。
  2. 检查ASDU字段 :对于每个ASDU,注意以下关键字段:
    • 类型标识符 (Type Identifier):确定数据的种类,比如遥测值、遥信状态等。
    • 传送原因 (Cause of Transmission):解释为什么发送这个ASDU,例如周期性报告、响应请求等。
    • 公共地址 (Common Address)信息对象地址 (Information Object Address):帮助识别消息来源和目标。
    • 信息对象 (Information Objects):包含实际的数据值,如测量结果或命令。
  3. 理解遥测和遥信
    • 遥测 (Telemetry):通常表示模拟量测量,如电压、电流等。你可以看到相应的数值及其变化趋势。
    • 遥信 (Telecontrol):指的是数字状态信号,如断路器的位置。这将显示为二进制状态(开/关)。
  4. 遥控 (Telecommand):当涉及到遥控命令时,要注意命令的内容和执行结果。这可以通过观察命令发送前后的状态变化来验证。

类型标识符 (Type Identifier)

类型标识符定义了ASDU所携带的信息种类,比如遥测,遥信,并指示如何解释后续的数据字段

简单步骤

步骤一:启动Wireshark并开始捕获
  1. 启动Wireshark:打开Wireshark应用程序。
  2. 选择网络接口:选择一个合适的网络接口来捕获流量,确保该接口上有IEC 60870-5-104通信。
  3. 设置捕获过滤器 :使用tcp port 2404来专门捕获默认端口为2404的IEC 60870-5-104流量。如果你知道主站或子站的具体IP地址,可以进一步细化捕获规则,例如ip.addr == 主站IP or ip.addr == 子站IP
  4. 开始捕获:点击"开始"按钮以开始捕获数据包。
步骤二:应用显示过滤器

一旦你有了捕获的数据包:

  1. 应用显示过滤器 :在Wireshark的过滤栏中输入iec60870.asdu.type_identifier或者更通用的iec60870来只显示与IEC 60870-5-104相关的帧。
步骤三:检查类型标识符

对于每一个捕获到的ASDU数据包:

  1. 展开协议树:在数据包列表中选择一个包含IEC 60870-5-104的条目,然后展开其协议树视图。
  2. 找到类型标识符 :在协议树中查找ASDU部分,通常会有一个名为Type identifier的字段。这个字段直接对应于ASDU的类型标识符。
  3. 解码类型标识符: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数据包:

  1. 展开协议树:在数据包列表中选择一个包含IEC 60870-5-104的条目,然后展开其协议树视图。
  2. 找到VSQ字段
    • 在协议树中查找ASDU部分,通常会有一个名为Variable structure qualifier的字段。这个字段直接对应于ASDU的可变结构限定词。
    • Wireshark应该能够自动解码VSQ,并提供一个描述性的名称或数值解释。如果它显示为十六进制值
可变结构限定词详解

VSQ是一个8位字段,分为两个主要部分:

  1. SQ (Sequence) Bit [Bit 7]:

    • 如果SQ=0,则表示后续的信息对象是单独编码的,每个对象都有自己的信息对象地址。
    • 如果SQ=1,则表示所有信息对象是按顺序排列且共享同一个信息对象地址。

​​​​​​​

  1. Number of Objects [Bits 0-6]:

    • 这个7位字段指示了ASDU中包含的信息对象的数量。它可以表示从0到127的对象数量。
    • 如果设置了SQ=1,则这个字段还可能表示信息对象序列的长度。

传送原因 (Cause of Transmission)

传送原因(Cause of Transmission, COT)字段是理解ASDU传输背景和目的的关键。它解释了为什么发送特定的ASDU

简单步骤

步骤一:启动Wireshark并开始捕获
  1. 启动Wireshark:打开Wireshark应用程序。
  2. 选择网络接口:选择一个合适的网络接口来捕获流量,确保该接口上有IEC 60870-5-104通信。
  3. 设置捕获过滤器 :使用tcp port 2404来专门捕获默认端口为2404的IEC 60870-5-104流量。如果你知道主站或子站的具体IP地址,可以进一步细化捕获规则,例如ip.addr == 主站IP or ip.addr == 子站IP
  4. 开始捕获:点击"开始"按钮以开始捕获数据包。
步骤二:应用显示过滤器

一旦你有了捕获的数据包:

  1. 应用显示过滤器 :在Wireshark的过滤栏中输入iec60870.asdu.cause_of_transmission或者更通用的iec60870来只显示与IEC 60870-5-104相关的帧。
步骤三:检查传送原因

对于每一个捕获到的ASDU数据包:

  1. 展开协议树:在数据包列表中选择一个包含IEC 60870-5-104的条目,然后展开其协议树视图。
  2. 找到传送原因字段 :在协议树中查找ASDU部分,通常会有一个名为Cause of transmission的字段。这个字段直接对应于ASDU的传送原因。
  3. 解码传送原因: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数据包:

  1. 展开协议树:在数据包列表中选择一个包含IEC 60870-5-104的条目,然后展开其协议树视图。
  2. 找到公共地址字段
    • 在协议树中查找ASDU部分,通常会有一个名为Common address的字段。这个字段直接对应于ASDU的公共地址。
    • 公共地址标识了发送方(通常是子站)或接收方(通常是主站)的逻辑地址。
  3. 找到信息对象地址字段
    • 同样在ASDU部分,查找名为Information object address的字段。这个字段用于指定具体哪个设备或功能块提供了测量值或其他信息。
    • 信息对象地址可以指向特定的传感器、断路器等。
公共地址 (Common Address) 详解
  • 定义: 公共地址是IEC 60870-5-104协议中用于标识参与通信的设备或节点的逻辑地址。
  • 用途: 它用于区分不同的通信伙伴,尤其是在多点网络环境中。
  • 格式: 通常是一个16位的整数,范围从0到65535。实际使用的地址取决于系统配置。
信息对象地址 (Information Object Address) 详解
  • 定义: 信息对象地址是指向具体信息对象的标识符,如某个特定的断路器、传感器或测量点。
  • 用途: 它使得能够精确定位和引用具体的物理或逻辑实体,从而确保数据的正确关联。
  • 格式: 通常是一个24位的整数,范围从0到16777215。它允许在一个系统内对大量不同对象进行唯一标识。
实际操作示例

假设我们捕获到了一个带有类型标识符M_ME_NC_1的数据包,这表示这是一个归一化的测量值ASDU:

  1. 构造ASDU :创建一个M_ME_NC_1 ASDU,其中包含电压测量值。
  2. 添加公共地址 :设置适当的公共地址,例如0x0A(10),标识子站。
  3. 添加信息对象地址 :为每个测量值指定信息对象地址,例如0x000001(1),表示第一个电压测量点。
  4. 发送数据:通过网络将这个ASDU发送给主站。
  5. 接收与处理:主站接收到命令后,解析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数据包:

  1. 展开协议树:在数据包列表中选择一个包含IEC 60870-5-104的条目,然后展开其协议树视图。
  2. 找到时标字段
    • 在协议树中查找ASDU部分,通常会有一个名为Time tagTimestamp的字段。这个字段直接对应于ASDU的时标。
    • Wireshark应该能够自动解码时标,并提供一个描述性的名称或数值解释。如果它显示为十六进制值
相关推荐
m0_7482550234 分钟前
新手参加2025年CTF大赛——Web题目的基本解题流程
前端·网络·安全
龙少95431 小时前
【深入理解网络协议】
网络·网络协议
19999er2 小时前
CDN信息收集(小迪网络安全笔记~
服务器·网络·笔记·安全·web安全
kikyo哎哟喂2 小时前
API网关基础知识
运维·服务器·网络
寻找沙漠的人2 小时前
HTTP—02
网络·网络协议·http
yuanbenshidiaos3 小时前
linux-----进程及基本操作
linux·服务器·网络
互联网杂货铺4 小时前
几个常见的Jmeter压测问题
自动化测试·软件测试·测试工具·jmeter·职场和发展·测试用例·压力测试
大霞上仙4 小时前
postman读取文件执行
测试工具·postman
范紫涵-19期-工职大5 小时前
前端HTTP协议传输以及背后的原理总结
网络·网络协议·http