当前位置: 首页 > news >正文

使用 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应该能够自动解码时标,并提供一个描述性的名称或数值解释。如果它显示为十六进制值

 

相关文章:

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

一 .IEC 60870-5-104 是什么? IEC 60870-5-104 是一种用于电力系统中数据传输的通信协议,它结合了 IEC 60870-5-101 的应用服务和 TCP/IP 网络协议。该标准定义了一种通过网络连接进行远动控制(如遥测、遥控等)的方法。 使用 Wireshark 捕…...

WPF+LibVLC开发播放器-音量控制和倍速控制

界面 界面上增加音量的控件和倍速控制控件 音量控制 主要也是一个Slider进度条控件来实现音量调节 我们这里设置默认的最大值为100,默认Value值也为100,默认声音开到最大 这里目前完全由前端控制音量调节,可以直接使用ValueChanged事件实…...

【数据中心建设资料】数据中心安全建设解决方案,数据中心整理解决方案,数据中心如何做到安全保障,数据中台全方案(Word全原件)

第一章 解决方案 1.1 建设需求 1.2 建设思路 1.3 总体方案 信息安全系统整体部署架构图 1.3.1 IP准入控制系统 1.3.2 防泄密技术的选择 1.3.3 主机账号生命周期管理系统 1.3.4 数据库账号生命周期管理系统 1.3.5 双因素认证系统 1.3.6 数据库审计系统 1.3.7 数据脱敏系统 1.3.8…...

Apache HTTPD多后缀解析漏洞

进入靶场 上来就是一个文件上传的功能 经过尝试,发现只有jpg,png,gif文件能上传上去,而题目又说了,这个是Apache的中间件,Apache文件解析漏洞涉及到一个Apache解析文件的特性,Apache默认一个文…...

html+css+JavaScript实现轮播图

html+css+JavaScript实现轮播图 实现思路 要实现一个轮播图功能,我们需要HTML来构建结构,CSS来设计样式,以及JavaScript来添加交互功能。下面我将分别分析这三个部分是如何协同工作来实现轮播图的。 HTML - 结构 HTML部分定义了轮播图的基本结构,包括图片列表、指示器和…...

Golang 八股(持续补充...)

目录 进程、线程、协程 Go语言——垃圾回收 GC的触发条件 GC调优 GMP调度和CSP模型 Groutine的切换时机 Goroutine调度原理 Goroutine的抢占式调度 Context结构原理 Context原理 Golang内存分配机制 竞态、内存逃逸 golang内存对齐机制 golang中new和make的区别&a…...

MFC实现全屏功能

之前全屏都是参考: MFC单文档(SDI)全屏程序的实现 主要思路就是将各种菜单工具栏隐藏恢复。 随着MFC的升级,MFC框架本身就具备了全屏的功能。 微软有一个全屏实现类: CFullScreenImpl Class managing full-screen mod…...

AI换脸facefusion 3.0.1安装及其使用方法(源代码安装)

文章目录 1. 本文简介2. 软件环境准备软件下载及安装代码下载 3. Conda环境4. 加速环境5. 依赖安装6. 图片测试 今天给大家分享换脸facefusion 3.0.1使用方法。不仅可以对单张图片换脸,也可以对视频换脸。如果是单张图片的话,没有GPU速度也很快&#xff…...

PCL【C++】点云融合

//图像到点云的转换//C 标准库 #include <iostream> #include <string>//OpenCV 库 #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp>//PCL 库 #include <pcl/io/pcd_io.h> #include <pcl/point_types.h> #inclu…...

处理一个MP4视频,检测里面出现的人脸,并根据特征值计算相似度来追踪和显示出每个人脸的ID

使用Mediapipe, opencv 处理一个MP4视频,检测里面出现的人脸,然后使用Mediapipe 计算每个出现的人脸的特征值,并根据特征值计算相似度来追踪和显示出每个人脸的ID import cv2 import mediapipe as mp import numpy as np# 初始化Mediapipe人脸检测和FaceMesh模型 mp_face_de…...

一文了解模式识别顶会ICPR 2024的研究热点与最新趋势

简介 对模式识别研究领域前沿方向的跟踪是提高科研能力和制定科研战略的关键。本文通过图文并茂的方式介绍了ICPR 2024的研究热点与最新趋势&#xff0c;帮助读者了解和跟踪模式识别的前沿研究方向。本推文的作者是黄星宇&#xff0c;审校为邱雪和许东舟。 一、会议介绍 ICPR…...

【WRF-Urban】WPS中有关Urban的变量设置

【WRF-Urban】WPS中有关Urban的变量设置 地理数据源的配置WRF-Urban所需静态地理数据1、LANDUSE&#xff1a;包含城市地表分类的土地利用数据。2、URB_PARAM&#xff1a;城市参数数据集。3、FRC_URB2D&#xff1a;城市覆盖度数据集 WRF默认设置&#xff08;美国&#xff09;数据…...

Android中 ViewPager 和 ViewPager2 的区别

学习笔记 ViewPager 和 ViewPager2 都是 Android 中实现滑动页面效果的控件&#xff0c;用于在一系列页面之间进行切换。ViewPager2 是 ViewPager 的升级版本&#xff0c;提供了更多功能和灵活性。本文将从各个方面详细对比这两个控件&#xff0c;帮助你理解它们的区别和使用场…...

python使用pdfplumber工具包加载pdf格式数据

说在前面 大问题&#xff0c;对于两栏pdf数据&#xff0c;我这边提取出来的数据发现它很离谱。 它居然直接忽略了两栏特性&#xff0c;直接将第1栏的句子拼接上了第2栏的句子 解决方法&#xff1a;pypdf2尝试后可以正确识别两栏数据&#xff0c;非常棒。 示例 pdfplumber代…...

C++设计模式:代理模式(Proxy)(附案例代码)

什么是代理模式&#xff1f; 代理模式是一种结构型设计模式&#xff0c;主要用于为某个对象提供一个代理&#xff0c;以便在不直接访问对象的情况下控制对其的访问。代理可以在客户端和目标对象之间起到一个中介的作用&#xff0c;添加一些额外的操作&#xff0c;例如权限控制…...

Y20030028 JAVA+SSM+MYSQL+LW+基于JAVA的考研监督互助系统的设计与实现 源代码 配置 文档

基于JAVA的考研监督互助系统 1.项目描述2. 课题开发背景及意义3.项目功能4.界面展示5.源码获取 1.项目描述 随着高等教育的普及和就业竞争的加剧&#xff0c;越来越多的学生选择继续深造&#xff0c;参加研究生入学考试。考研人数的不断增加&#xff0c;使得考研过程中的学习监…...

《Java核心技术I》volatile字段

volatile字段 有多处理器的计算机能够暂时在寄存器或本地内存缓存中保存内存值&#xff0c;其结果是&#xff0c;运行在不同处理器上的线程可能看到同一个内存位置上有不同的值。编译器可以改变指令执行的顺序以使吞吐量更大化&#xff0c;编译器不会选择可能改变代码语义的顺…...

使用Hadoop MapReduce进行大规模数据爬取

Hadoop MapReduce概述 Hadoop MapReduce是一个编程模型&#xff0c;用于处理和生成大数据集。它由Map和Reduce两个主要阶段组成。Map阶段负责处理输入数据&#xff0c;并将结果输出为键值对&#xff1b;Reduce阶段则对Map阶段的输出进行汇总和合并&#xff0c;生成最终结果。 …...

git 删除大文件的方法

1 首先 首先要提交所有的更改 git filter-branch -f --prune-empty --index-filter “git rm -rf --cached --ignore-unmatch 文件相对路径复制到这里” --tag-name-filter cat – --all 2 提交 git commit -am “d” git push...

qt数据类型定义(包含签名)

先推荐一个处理markdown表格的网站&#xff0c;超级好用&#xff1a;markdown表格处理&#xff0c;我就是用这个表格处理的excel中的数据上传。 下表整理了数据类型的值范围、签名、qt如何定义等内容。 类型范围/子类型dbus签名qt支持的签名qt类型定义方式转换为variantint8(…...

2025美赛数学建模常用数据库网站大全

优秀模板写作红宝书数学模型获取——更多资料请点击下方名片进群获取。 一、可以查询美国各个领域经济指标的网站: olap.epsnet.com.cnhttps://www.ers.usda.gov/data-products/rice-yearbook/www.ers.usda.govU.S. Energy Information Administration (EIA) www.eia.govhttp…...

Vue 组件通信全面解析

Vue 组件通信全面解析&#xff1a;方式、原理、优缺点及最佳实践 在 Vue 开发中&#xff0c;组件通信是一个重要的核心问题。随着应用复杂度的增加&#xff0c;如何在组件之间有效传递数据、触发事件&#xff0c;直接影响代码的可维护性和可扩展性。Vue 提供了多种组件通信方式…...

node.js基础学习-express框架-路由及中间件(十)

一、前言 Express 是一个简洁、灵活的 Node.js Web 应用框架。它基于 Node.js 的内置 HTTP 模块构建&#xff0c;提供了一系列用于构建 Web 应用程序和 API 的功能&#xff0c;使开发者能够更高效地处理 HTTP 请求和响应&#xff0c;专注于业务逻辑的实现。 其特点包括简单易用…...

书生浦语第四期--基础岛-第六关

文章目录 使用opencompass进行模型评价配置KEY环境变量以及API模型接口配置数据集进行评测开始评测测评结束 使用opencompass进行模型评价 配置KEY环境变量以及API模型接口 配置数据集进行评测 开始评测 期间可能遇到没有下载的包 例如&#xff0c;我遇到了&#xff1a; No m…...

flinkSql中累计窗口CUMULATE

eventTime package com.bigdata.day08;import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; import org.apache.flink.table.api.bridge.java.StreamTableEnvironment;public class _05_flinkSql_Cumulate_eventTime {/*** 累积窗口 eventTime* …...

Flutter项目初始化android版

1、本机系统环境 window11flutter sdk 版本flutter_windows_3.24.5-stable.zip (下载地址&#xff1a;https://docs.flutter.dev/get-started/install/windows/mobile)android studio 版本 Android Studio Giraffe | 2022.3.1vscode 2、VSCODE 配置flutter 安装flutter插件 …...

深度相机获取实时图像总结

问题详情&#xff1a;之前一直把曝光调整到50000&#xff0c;画面一直很流畅&#xff0c;知道领导要求将曝光改成500000时整个程序卡死了 问题解决&#xff1a; 首先怀疑是帧率太低的原因&#xff0c;控制变量后发现不是帧率的问题&#xff0c;看着代码很迷茫&#xff0c;领导…...

突击检查:Java面试之多线程并发篇(11)

前言 本来想着给自己放松一下&#xff0c;刷刷博客&#xff0c;突然被几道面试题难倒&#xff01;什么是多线程中的上下文切换&#xff1f;什么是Daemon线程&#xff1f;它有什么意义&#xff1f;乐观锁和悲观锁的理解及如何实现&#xff0c;有哪些实现方式&#xff1f;似乎有…...

大数据新视界 -- 大数据大厂之 Hive 临时表与视图:灵活数据处理的技巧(上)(29 / 30)

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…...

鸿蒙应用获取wifi连接的ip地址(官方文档获取的格式转换成192.168.1.xxx格式)

目录 一.背景 二.官网流程 wifiManager.getLinkedInfo9+ 三.转换成192.168.xxx.xxx格式 一.背景 本次来学习如何获取到鸿蒙设备连接wifi后的ip地址,由于官网文档中获取的ip地址和我们平时看到的192:168:xxx:xxx有所不同,需要进行下转换,所以记录下,如下的流程是在OpenH…...

Elastic Cloud Serverless:深入探讨大规模自动扩展和性能压力测试

作者&#xff1a;来自 Elastic David Brimley, Jason Bryan, Gareth Ellis 及 Stewart Miles 深入了解 Elasticsearch Cloud Serverless 如何动态扩展以处理海量数据和复杂查询。我们探索其在实际条件下的性能&#xff0c;深入了解其可靠性、效率和可扩展性。 简介 Elastic Cl…...

Leetcode经典题5--轮转数组

题目描述 给定一个整数数组 nums&#xff0c;将数组中的元素向右轮转 k 个位置&#xff0c;其中 k 是非负数。 输入输出示例 &#xff1a; 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3,4,5,6] 向右轮转 2 步: [6,7,1,2,3,4,5] 向右…...

【蓝桥杯每日一题】扫雷

扫雷 知识点 2024-12-3 蓝桥杯每日一题 扫雷 dfs &#xff08;bfs也是可行的&#xff09; 题目大意 在一个二维平面上放置这N个炸雷&#xff0c;每个炸雷的信息有$(x_i,y_i,r_i) $&#xff0c;前两个是坐标信息&#xff0c;第三个是爆炸半径。然后会输入M个排雷火箭&#xff0…...

以nlp为例,区分BatchNorm、LayerNorm、GroupNorm、RMSNorm

以nlp中一个小批次数据&#xff0c;详细区分BatchNorm、LayerNorm、GroupNorm、RMSNorm。这几种归一化的不同。如下表格&#xff0c;从计算范围、统计量、计算复杂度以及应用场景等方面的差异给出。 方法计算范围统计量计算复杂度应用场景BatchNorm跨所有句子的同一维度使用批…...

(软件测试文档大全)测试计划,测试报告,测试方案,压力测试报告,性能测试,等保测评,安全扫描测试,日常运维检查测试,功能测试等全下载

1. 引言 1.1. 编写目的 1.2. 项目背景 1.3. 读者对象 1.4. 参考资料 1.5. 术语与缩略语 2. 测试策略 2.1. 测试完成标准 2.2. 测试类型 2.2.1. 功能测试 2.2.2. 性能测试 2.2.3. 安全性与访问控制测试 2.3. 测试工具 3. 测试技术 4. 测试资源 4.1. 人员安排 4.2. 测试环境 4.2.…...

在MySQL中执行sum case when报错:SUM does not exist

1. 报错 在pgsql中能正常运行的一段SQL在MySQL中运行的时候报错了&#xff1a; SELECT DATE( hr.handle_time ) AS statsDate,SUM ( CASE WHEN hma.app_type IN ( 2, 5 ) THEN ch_money ELSE 0 END ) AS aliPayAmt,SUM ( CASE WHEN hma.app_type IN ( 1, 4 ) THEN ch_money EL…...

SQL面试题——日期交叉问题 合并日期重叠的活动

日期交叉问题—合并日期重叠的活动 今天的需求背景和前面我们的一个面试题目的背景一样,只不过是具体的需求变了,可以先看一下我们之前的文章SQL面试题——日期交叉问题 计算活动的总天数 +------+----------+----------+ | id| stt| ett| +------+--------…...

科普文:一文搞懂Postman

1. 概叙 1.1 Postman简介 Postman是一款强大的接口测试工具&#xff0c;‌主要用于测试HTTP请求&#xff0c;‌支持各种HTTP请求方法&#xff0c;‌包括GET、‌POST、‌PUT、‌DELETE等&#xff0c;‌并且提供了丰富的功能来模拟和测试各种网络请求。‌ Postman官网上这样介…...

LearnOpenGL学习(模型加载 -- Assimp,网格,模型)

完整代码见&#xff1a;zaizai77/Cherno-OpenGL: OpenGL 小白学习之路 Assimp 3D建模工具如Blender、3DS Max在导出模型文件时&#xff0c;会自动生成所有的顶点坐标、顶点法线和纹理坐标。 .obj 格式只包含了模型数据和材质信息&#xff08;颜色、贴图等&#xff09; Assi…...

基于Pyhton的人脸识别(Python 3.12+face_recognition库)

使用Python进行人脸编码和比较 简介 在这个教程中&#xff0c;我们将学习如何使用Python和face_recognition库来加载图像、提取人脸编码&#xff0c;并比较两个人脸是否相似。face_recognition库是一个强大的工具&#xff0c;它基于dlib的深度学习模型&#xff0c;可以轻松实…...

Scala的模式匹配(2)

package hfdobject Test34_2 {//match case匹配元组//能根据元组元素的个数来匹配&#xff0c;不是一一精确的匹配值def main(args: Array[String]): Unit {val d1(1,2,3) // val d1(1,2,3,4) // val d1(1,2,3,4,5)val d:Anyd1 //d的类型是Anyd match {case (x,y,z)>…...

Java 初学者的第一个 SpringBoot 系统

Java 初学者的第一个 SpringBoot 系统 对编程初学者而言&#xff0c;都存在一个 “第一个系统” 的问题。有些学习者找不到自己的 “第一个系统”&#xff0c;他们即使再努力也没有办法了解完整的系统&#xff0c;即使他们把教科书里的所有程序都跑通了。但是&#xff0c;面对…...

java IO面试题

目录 Java IO设计上使用了什么设计模式&#xff1f; 你怎么理解同步IO和异步IO? 字节流和字符流的区别? Java 流量有多少种类型? 如何将一个 java 将对象序列化到文件中? 如何实现 java 序列化? Filter流是什么? Filter流有哪些可用? 如何实现对象克隆? BIO、…...

Chocolatey软件包管理工具处理MSI升级的原理与实践

Chocolatey软件包管理工具处理MSI升级的原理与实践 在Windows环境下&#xff0c;Chocolatey作为一款强大的包管理工具&#xff0c;其处理MSI&#xff08;Microsoft Installer&#xff09;格式软件包升级的机制值得深入探讨。本文将详细介绍Chocolatey如何处理MSI升级&#xff…...

Navicat连接SQL Server及SpringBoot连接SQL Server(jtds)

Navicat连接SQL Server 安装自带的SQL Server客户端 去到Navicat安装目录&#xff0c;找到安装程序&#xff0c;安装即可。 安装对应版本的Microsoft ODBC Driver for SQL Server 打开Navicat输入对应的SQL Server相关信息 然后点测试连接&#xff0c;提示连接成功。 Spr…...

【Git】

博文将不断学习补充 Git下载 将下载链接复制到迅雷中&#xff0c;快速下载 Git安装 保持默认&#xff0c;傻瓜安装即可。 注册Gitee码云&#xff0c;设置公钥 在Git Bash中输入 ssh-keygen -t ed25519 -C "Gitee SSH Key" 找到对应的公钥文件 复制公钥&#xff0c;添…...

HttpServletRequest

HttpServletRequest 类确实是一个封装了完整 HTTP 请求信息的对象&#xff0c;而 Spring MVC 提供了更简化的方式来自动映射请求路径、请求参数等信息到控制器方法中。你不必直接使用 HttpServletRequest 来处理大部分常见的请求内容&#xff0c;因为 Spring MVC 会为你自动处理…...

Apache HttpClient 4和5访问没有有效证书的HTTPS

本文将展示如何配置Apache HttpClient 4和5以支持“接受所有”SSL。 目标很简单——访问没有有效证书的HTTPS URL。 SSLPeerUnverifiedException 在未配置SSL的情况下&#xff0c;尝试消费一个HTTPS URL时会遇到以下测试失败&#xff1a; Test void whenHttpsUrlIsConsumed…...

做异端中的异端 -- Emacs裸奔之路7: 怀念Vim的好

组合键的瑕疵 从Vim切换成Emacs之后&#xff0c;有一明显的不适就是感受Emacs的按键很硬&#xff0c; Vim移动是使用一个按完成的&#xff0c;而Emacs是组合键。 如果向前移动一个字&#xff0c;Vim只要在ESC模式下按w&#xff0c;而Emacs是Alt-f. 特别是当你对键盘改键之后不…...

asp.net core过滤器应用

筛选器类型 授权筛选器 授权过滤器是过滤器管道的第一个被执行的过滤器&#xff0c;用于系统授权。一般不会编写自定义的授权过滤器&#xff0c;而是配置授权策略或编写自定义授权策略。简单举个例子。 using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCo…...