轻量级UDP流量重放工具的技术实现与场景应用(C/C++代码实现)
在网络协议测试、安全攻防演练、性能调优等领域,精确控制数据包传输行为是核心需求。udp_replay
作为一款专注于UDP流量的开源工具,通过简洁的设计实现了对pcap文件中UDP数据流的灵活重放。本文将从技术实现原理、核心功能亮点及典型应用场景三个维度展开分析。
一、技术实现原理
-
协议解析与过滤机制
工具通过libpcap
库读取pcap文件,逐层解析以太网帧、IP头和UDP头。代码中特别设计了VLAN标签跳过逻辑(while (ntohs(eth->ether_type) == ETHERTYPE_VLAN)
),确保能正确识别被封装的原始UDP数据。对于非IP或非UDP协议的数据包,通过ntohs(eth->ether_type)
和ip->ip_p
双重校验实现精准过滤。 -
网络传输控制
• 多路复用支持:通过setsockopt
配置多播接口(IP_MULTICAST_IF
)、TTL(IP_MULTICAST_TTL
)和广播模式(SO_BROADCAST
),支持复杂网络拓扑下的数据发送。
• 时序控制算法:提供两种时间控制模式:
◦ 固定间隔模式:通过-c
参数指定毫秒级间隔,适用于需要稳定流量负载的场景。
◦ 动态速率模式:基于pcap原始时间戳和-s
参数实现相对速度调节,支持流量加速/减速模拟。 -
资源管理优化
采用pcap_open_offline_with_tstamp_precision
实现非实时文件读取,结合clock_nanosleep
的高精度定时机制,确保微秒级时间控制精度。循环发送逻辑(-r
参数)通过文件指针重置实现数据流复用,避免内存重复加载。
二、核心功能亮点
-
全链路可控性
• 支持接口绑定(-i
参数)、MAC层过滤及VLAN穿透,适应SDN、虚拟化网络环境。
• TTL设置(-t
参数)与广播模式(-b
参数)使能跨网段流量模拟,适用于网络设备压力测试。 -
灵活的流量调度
• 通过-s
参数实现0.1x~10x的速率调节,可模拟网络拥塞或突发流量场景。
• 重复播放(-r
参数)支持无限循环(-1
),满足长时间稳定性测试需求。 -
低侵入式设计
代码采用纯C++实现,无外部依赖,编译后仅生成单一可执行文件。内存占用稳定在5-10MB区间,适合嵌入式设备部署。
三、典型应用场景
-
网络设备性能验证
在数据中心交换机压力测试中,可通过重放真实业务流量(如DNS查询、视频流)验证设备在40Gbps+速率下的丢包率与延迟表现。例如,使用-s 2.0
参数模拟流量洪峰,观察设备负载均衡能力。 -
安全攻防演练
• DDoS模拟:重放SYN Flood或UDP Flood攻击流量,测试防火墙的防护阈值。
• 协议漏洞验证:针对特定UDP服务(如CoAP、SIP)构造畸形数据包,检测服务健壮性。 -
物联网设备调试
在智能家居场景中,通过重放传感器上报数据(如温湿度、位置信息),可离线验证云端平台的消息解析能力与并发处理性能。 -
音视频传输优化
对RTP/RTCP流进行时间轴拉伸(-s 0.8
)或压缩(-s 1.2
),测试编解码器在不同网络抖动下的容错能力,优化QoS策略。
四、技术延伸与扩展
尽管udp_replay
已具备基础功能,未来可探索以下方向:
- 协议增强:增加对QUIC协议的支持,适应HTTP/3流量重放需求。
- 智能调度:集成机器学习模型,根据网络实时状态动态调整发送策略。
- 可视化监控:添加Prometheus指标导出,实时展示丢包率、吞吐量等关键指标。
五、 轻量级UDP流量重放工具的技术实现与场景应用(C/C++代码实现)
int main(int argc, char *argv[]) {...while ((opt = getopt(argc, argv, "i:bls:c:r:t:")) != -1) {switch (opt) {case 'i':ifindex = if_nametoindex(optarg);if (ifindex == 0) {std::cerr << "if_nametoindex: " << strerror(errno) << std::endl;return 1;}break;case 'l':loopback = 1;break;case 's':speed = std::stod(optarg);if (speed < 0) {std::cerr << "speed must be positive" << std::endl;}break;case 'c':interval = std::stoi(optarg);if (interval < 0) {std::cerr << "interval must be non-negative integer" << std::endl;return 1;}break;case 'r':repeat = std::stoi(optarg);if (repeat != -1 && repeat <= 0) {std::cerr << "repeat must be positive integer or -1" << std::endl;return 1;}break;case 't':ttl = std::stoi(optarg);if (ttl < 0) {std::cerr << "ttl must be non-negative integer" << std::endl;return 1;}break;case 'b':broadcast = 1;break;default:goto usage;}}
...int fd = socket(AF_INET, SOCK_DGRAM, 0);if (fd == -1) {std::cerr << "socket: " << strerror(errno) << std::endl;return 1;}if (ifindex != 0) {ip_mreqn mreqn;memset(&mreqn, 0, sizeof(mreqn));mreqn.imr_ifindex = ifindex;if (setsockopt(fd, IPPROTO_IP, IP_MULTICAST_IF, &mreqn, sizeof(mreqn)) ==-1) {std::cerr << "setsockopt: " << strerror(errno) << std::endl;return 1;}}if (loopback != 0) {if (setsockopt(fd, IPPROTO_IP, IP_MULTICAST_LOOP, &loopback,sizeof(loopback)) == -1) {std::cerr << "setsockopt: " << strerror(errno) << std::endl;return 1;}}if (broadcast != 0) {if (setsockopt(fd, SOL_SOCKET, SO_BROADCAST, &broadcast,sizeof(broadcast)) == -1) {std::cerr << "setsockopt: " << strerror(errno) << std::endl;return 1;}}if (ttl != -1) {if (setsockopt(fd, IPPROTO_IP, IP_MULTICAST_TTL, &ttl, sizeof(ttl)) == -1) {std::cerr << "setsockopt: " << strerror(errno) << std::endl;return 1;}}
...timespec start = {-1, -1};timespec pcap_start = {-1, -1};pcap_pkthdr header;const u_char *p;while ((p = pcap_next(handle, &header))) {if (start.tv_nsec == -1) {if (clock_gettime(CLOCK_MONOTONIC, &start) == -1) {std::cerr << "clock_gettime: " << strerror(errno) << std::endl;return 1;}pcap_start.tv_sec = header.ts.tv_sec;pcap_start.tv_nsec =header.ts.tv_usec; }if (header.len != header.caplen) {continue;}auto eth = reinterpret_cast<const ether_header *>(p);while (ntohs(eth->ether_type) == ETHERTYPE_VLAN) {p += 4;eth = reinterpret_cast<const ether_header *>(p);}if (ntohs(eth->ether_type) != ETHERTYPE_IP) {continue;}auto ip = reinterpret_cast<const struct ip *>(p + sizeof(ether_header));if (ip->ip_v != 4) {continue;}if (ip->ip_p != IPPROTO_UDP) {continue;}auto udp = reinterpret_cast<const udphdr *>(p + sizeof(ether_header) +ip->ip_hl * 4);if (interval != -1) {deadline.tv_sec += interval / 1000L;deadline.tv_nsec += (interval * 1000000L) % NANOSECONDS_PER_SECOND;} else {int64_t delta =(header.ts.tv_sec - pcap_start.tv_sec) * NANOSECONDS_PER_SECOND +(header.ts.tv_usec -pcap_start.tv_nsec); if (speed != 1.0) {delta *= speed;}deadline = start;deadline.tv_sec += delta / NANOSECONDS_PER_SECOND;deadline.tv_nsec += delta % NANOSECONDS_PER_SECOND;}if (deadline.tv_nsec > NANOSECONDS_PER_SECOND) {deadline.tv_sec++;deadline.tv_nsec -= NANOSECONDS_PER_SECOND;}timespec now = {};if (clock_gettime(CLOCK_MONOTONIC, &now) == -1) {std::cerr << "clock_gettime: " << strerror(errno) << std::endl;return 1;}if (deadline.tv_sec > now.tv_sec ||(deadline.tv_sec == now.tv_sec && deadline.tv_nsec > now.tv_nsec)) {timespec duration;duration.tv_sec = deadline.tv_sec - now.tv_sec;duration.tv_nsec = deadline.tv_nsec - now.tv_nsec;if (duration.tv_nsec < 0) {--duration.tv_sec;duration.tv_nsec += NANOSECONDS_PER_SECOND;}if (nanosleep(&duration, nullptr) == -1) {std::cerr << "nanosleep: " << strerror(errno) << std::endl;return 1;}}...addr.sin_addr = {ip->ip_dst};auto n = sendto(fd, d, len, 0, reinterpret_cast<sockaddr *>(&addr),sizeof(addr));if (n != len) {std::cerr << "sendto: " << strerror(errno) << std::endl;return 1;}}pcap_close(handle);}return 0;
}
测试:
udp_replay -i eth0 example.pcap
If you need the complete source code, please add the WeChat number (c17865354792)
总结
为 UDP 流量重放提供了轻量级解决方案。通过精准的协议解析与时序控制,它不仅简化了UDP流量测试流程,更为复杂网络场景下的问题定位提供了高效解决方案。
Welcome to follow WeChat official account【程序猿编码】
相关文章:
轻量级UDP流量重放工具的技术实现与场景应用(C/C++代码实现)
在网络协议测试、安全攻防演练、性能调优等领域,精确控制数据包传输行为是核心需求。udp_replay作为一款专注于UDP流量的开源工具,通过简洁的设计实现了对pcap文件中UDP数据流的灵活重放。本文将从技术实现原理、核心功能亮点及典型应用场景三个维度展开…...
时序数据库 TDengine × Excel:一份数据,两种效率
在日常工作中,很多人都离不开 Excel。不论是设备运维工程师、数据分析师,还是业务人员,一份熟悉的电子表格往往就是他们的“第一张报表”。 现在,TDengine 也可以与 Excel 实现无缝连接,用户可以直接在 Excel 中查询时…...
video自动播放
文章目录 前言在iOS系统中,H5页面的自动播放功能受到了一些限制,为了提升用户体验和保护用户隐私,Safari浏览器对于自动播放的行为做了一些限制。 一、自动播放的限制二、解决方案 前言 在iOS系统中,H5页面的自动播放功能受到了一…...
如何利用AI智能生成PPT,提升工作效率与创意表现
如何利用AI智能生成PPT,提升工作效率与创意表现!在这个信息爆炸的时代,制作一份既专业又富有创意的PPT,已经不再是一个简单的任务。尤其是对于每天都需要做报告、做展示的职场人士来说,PPT的质量直接影响着工作效率和个…...
Java8+Spring Boot + Vue + Langchain4j 实现阿里云百炼平台 AI 流式对话对接
1. 引言 在本文中,我们将介绍如何使用 Spring Boot、Vue.js 和 Langchain4j,实现与 阿里云百炼平台 的 AI 流式对话对接。通过结合这些技术,我们将创建一个能够实时互动的 AI 聊天应用。 这是一个基于 Spring Boot Vue.js Langchain4j 的智…...
【scikit-learn基础】--『数据加载』之外部数据集
这是scikit-learn数据加载系列的最后一篇,本篇介绍如何加载外部的数据集。 外部数据集不像之前介绍的几种类型的数据集那样,针对每种数据提供对应的接口,每个接口加载的数据都是固定的。 而外部数据集加载之后,数据的字段和类型是…...
Redis原理:keys命令
语法: keys pattern 返回所有符合pattern的key 支持 glob-style patterns: h?llo matches hello, hallo and hxlloh*llo matches hllo and heeeelloh[ae]llo matches hello and hallo, but not hilloh[^e]llo matches hallo, hbllo, ... but not helloh[a-b]llo ma…...
4.7学习总结 可变参数+集合工具类Collections+不可变集合
可变参数: 示例: public class test {public static void main(String[] args) {int sumgetSum(1,2,3,4,5,6,7,8,9,10);System.out.println(sum);}public static int getSum(int...arr){int sum0;for(int i:arr){sumi;}return sum;} } 细节:…...
高级java每日一道面试题-2025年3月24日-微服务篇[Nacos篇]-使用Nacos如何实现配置管理?
如果有遗漏,评论区告诉我进行补充 面试官: 使用Nacos如何实现配置管理? 我回答: 在Java高级面试中讨论如何使用Nacos实现配置管理的综合回答 在Java高级面试中,关于如何使用Nacos实现配置管理,可以从以下几个方面进行全面、深入的阐述&am…...
Exce格式化批处理工具详解:高效处理,让数据更干净!
Exce格式化批处理工具详解:高效处理,让数据更干净! 1. 概述 在数据分析、报表整理、数据库管理等工作中,数据清洗是不可或缺的一步。原始Excel数据常常存在格式不统一、空值、重复数据等问题,影响数据的准确性和可用…...
CExercise_06_1指针和数组_1查找数组的最大值和最小值
题目: 查找数组的最大值和最小值,但要将最大值作为返回值返回,最小值则依靠传入的指针完成赋值。 要求不能使用"[]"运算符。 函数的声明如下: int max_min(int *arr, int len, int *pmin); 关键点 1) * 运算符用于解引用…...
redis中的hash
Redis中的hash是什么 Hash: 哈希,也叫散列,是一种通过哈希函数将键映射到表中位置的数据结构,哈希函数是关键,它把键转换成索引。 Redis Hash(散列表)是一种 field-value pairs(键值对&#x…...
【学习笔记】李沐斯坦福21秋季:实用机器学习中文版
这里写自定义目录标题 数据处理数据获取数据标注数据清洗特征工程 数据处理 数据获取 爬虫 实际工作中大部分都是从数据库里取数 数据标注 只有一小部分有标签 大部分无标签的话 半监督学习:没标注数据和有标注数据共同使用 做法1:半监督学习 基于有标签的小部分…...
UE5学习笔记 FPS游戏制作43 UI材质
文章目录 实现目标制作UI材质使用UI材质 实现目标 把图片变为灰色 制作UI材质 右键新建一个材质 左侧细节栏,材质域改为用户界面,混合模式改为半透明 此时输出节点应该有两个属性 在内容浏览器里找到要用的图片,然后向上拖动到材质标题…...
QT控件 修改QtTreePropertyBrowser自定义属性编辑器源码,添加第一列标题勾选,按钮,右键菜单事件等功能
头阵子遇到一个需要修改QtTreePropertyBrowser控件的需求,QT开发做这么久了,这个控件倒是第一次用,费了点时间研究,在这里做个简单的总结。 QtTreePropertyBrowser控件 是 Qt 解决方案 (Qt Solutions) 中的一个组件,用…...
MFC工具栏CToolBar从专家到小白
CToolBar m_wndTool; //创建控件 m_wndTool.CreateEx(this, TBSTYLE_FLAT|TBSTYLE_NOPREFIX, WS_CHILD | WS_VISIBLE | CBRS_FLYBY | CBRS_TOP | CBRS_SIZE_DYNAMIC); //加载工具栏资源 m_wndTool.LoadToolBar(IDR_TOOL_LOAD) //在.rc中定义:IDR_TOOL_LOAD BITMAP …...
Golang 项目平滑重启
引言 平滑重启(Graceful Restart)技术作为一种常用的解决方案,通过允许新进程接管而不中断现有的请求,确保了系统的稳定运行和业务连续性。同时目前公司的服务重启绝大部分也都适用的 go 的平滑重启技术。 本部分将对平滑重启的…...
Vue2 插槽 Slot
提示:插槽的目的是让我买原来的设备具备更多的扩展性。 文章目录 前言在组件中定义插槽(子组件视角)1. 默认插槽2. 具名插槽(带名称的插槽)3. 作用域插槽(带数据的插槽) 使用插槽(父…...
关于sqlsugar实体多层List映射的问题
如上图所示,当一个主表(crm_fina_pay_req)的子表list<文件附件关系表>( List<crm_fina_payreq_evidofpay_relation> )中,还包含有sysfile(SysFile SysFiles)类型的文件信…...
使用stm32cubeide stm32f407 lan8720a freertos lwip 实现udp client网络数据转串口数据过程详解
1前言 项目需要使用MCU实现网络功能,后续确定方案stm32f407 外接lan8720a实现硬件平台搭建,针对lan8720a也是用的比较多的phy,网上比较多的开发板,硬件上都是选用了这个phy,项目周期比较短,选用了这个常用…...
LangChain4j(4):预设角色(系统消息SystemMessage)
1 预设角色(系统消息SystemMessage) 基础大模型是没有目的性的, 你聊什么给什么,但是如果我们开发的事一个智能票务助手, 我需要他以一个票务助手的角色跟我对话, 并且在我跟他说”退票”的时候, 让大模型一定要告诉我…...
自然语言处理利器NLTK:从入门到核心功能解析
文章目录 一、NLP领域的基石工具包二、NLTK核心模块全景解析1 数据获取与预处理2 语言特征发现3 语义与推理 三、设计哲学与架构优势1 四维设计原则2 性能优化策略 四、典型应用场景1 学术研究2 工业实践 五、生态系统与未来演进 一、NLP领域的基石工具包 自然语言工具包&…...
常见接口协议介绍
1. I2C(Inter-Integrated Circuit) 定义:两线制串行总线(SDA数据线 SCL时钟线),支持主从模式多设备通信。特点: 地址机制:每个设备有唯一地址,主设备通过地址选择从设备…...
宝塔面板使用CDN 部署后获取真实客户端 IP教程
在宝塔面板环境中配置 CDN 加速服务后,服务器日志默认记录的是 CDN 节点 IP,这给网站流量分析带来不便。本文将为您提供多种解决方案,帮助您在 CDN 生效的同时获取真实访客 IP。 一、Nginx 配置调整方案 日志格式优化 在宝塔面板中打开 Ngi…...
生鲜果蔬便利店实体零售门店商城小程序
——线上线下融合赋能社区零售新生态 随着新零售模式的深化和消费者需求的升级,生鲜果蔬便利店亟需通过数字化工具实现经营效率与用户体验的双重提升。结合线下实体门店与线上商城的一体化小程序,成为行业转型的核心工具。以下从功能模块、运营策略及行…...
C++(初阶)(十)——vector模拟实现
vector vector构造尾插(删)和扩容inert(插入)迭代器失效erase(删除)resize(调整空间)深浅拷贝迭代器拷贝和赋值(v2(v1)和v1 v3)多个数据插入迭代器区间初始化…...
利用解析差异SSRF + sqlite注入 + waf逻辑漏洞 -- xyctf 2025 fate WP
本文章附带TP(Thinking Process)! #!/usr/bin/env python3 # 导入所需的库 import flask # Flask web框架 import sqlite3 # SQLite数据库操作 import requests # HTTP请求库 import string # 字符串处理 import json # JSON处理app flask.Flask(__name__) # 创建Flask应…...
VScode无法激活conda虚拟环境,不显示虚拟环境名称
在VScode中终端中激活环境时出现下面的情况 PS F:\Model\stMMR-main> conda activate env_mamba usage: conda-script.py [-h] [--no-plugins] [-V] COMMAND ... conda-script.py: error: argument COMMAND: invalid choice: activate (choose from clean, compare, config…...
vscode Colipot 编程助手
1、登录到colipot,以github账号,关联登录 点击【continue】按钮,继续。 点击【打开Visual Studio Code】,回到vscode中。 2、问一下11? 可以看出,很聪明,一下子就算出来了。 3、帮我们写一个文件…...
vscode中REST Client插件
最近发现vscode中REST Client插件也可以测试接口 简介 在 VS Code 中,REST Client 是一个非常受欢迎的插件,用于测试和调试 RESTful API。以下是关于该插件的安装、使用和功能的详细介绍: 安装 REST Client 插件 打开 VS Code。点击左侧的扩…...
路由器工作在OSI模型的哪一层?
路由器主要工作在OSI模型的第三层,即网络层。网络层的主要功能是将数据包从源地址路由到目标地址,路由器通过检查数据包中的目标IP地址,并根据路由表确定最佳路径来实现这一功能。 路由器的主要功能: a、路由决策:路…...
(PROFINET 转 EtherCAT)EtherCAT/Ethernet/IP/Profinet/ModbusTCP协议互转工业串口网关
型号 协议转换通信网关 PROFINET 转 EtherCAT MS-GW31 概述 MS-GW31 是 PROFINET 和 EtherCAT 协议转换网关,为用户提供两种不同通讯协议的 PLC 进行数据交互的解决方案,可以轻松容易将 EtherCAT 网络接入 PROFINET 网络中,方便扩展&…...
【教程】MacBook 安装 VSCode 并连接远程服务器
目录 需求步骤问题处理 需求 在 Mac 上安装 VSCode,并连接跳板机和服务器。 步骤 Step1:从VSCode官网(https://code.visualstudio.com/download)下载安装包: Step2:下载完成之后,直接双击就能…...
Solidity基础入门—web3
Remix介绍 官网地址 Remix 是一个基于浏览器的 Solidity 开发环境,主要用于编写、测试、调试和部署以太坊智能合约。 Solidity基本数据类型 类型说明示例uint / int无符号 / 有符号整数uint256, int8, int256bool布尔类型(true / false)bo…...
微信小程序 request 流式数据处理
什么是流式数据处理? 流式数据处理(Streaming Data)指逐步接收并处理数据片段的技术,无需等待全部数据加载完成。适用于大文件下载、实时日志、AI生成报告等场景,可显著降低内存占用并提升用户体验。 微信小程序中的…...
Kotlin与HttpClient编写视频爬虫
想用Apache HttpClient库和Kotlin语言写一个视频爬虫。首先,我需要确定用户的具体需求。视频爬虫通常涉及发送HTTP请求,解析网页内容,提取视频链接,然后下载视频。可能需要处理不同的网站结构,甚至可能需要处理动态加载…...
数据结构:通俗解释AOE 网中事件的最早发生时间和最迟发生时间
1. 事件的最早发生时间 在 AOE 网(Activity On Edge Network,边表示活动的网络)中,事件的最早发生时间指从源点(起点)到该事件结点的最长路径长度(即所需时间)。它决定了所有以该事…...
爬虫中遇到的问题
网页假请求导致的阻塞 可以在requests请求当中添加timeout参数,来让网站重新请求 在爬虫请求中,timeout参数的主要作用是控制请求的最大等待时间,避免因服务器响应缓慢或网络问题导致程序长时间阻塞,从而提升爬虫的效率和稳定性…...
聊一聊没有接口文档时如何开展测试
目录 一、前期准备与信息收集 二、使用抓包工具分析接口 三、逆向工程构造测试用例 四、安全测试 五、 模糊测试(Fuzz Testing) 六、记录并维护发现的接口信息 七、 推动团队规范流程 其它注意事项 在我们进行接口测试时,总会遇到各种…...
第一部分:MCP协议与多智能体系统基础-第1课:MCP服务协议核心架构解析
以下是为《MCP服务协议核心架构解析》设计的课件内容,采用“概念解析→代码实践→运行验证”三段式教学结构,结合可视化图表与可运行代码示例,增强学生对MCP协议核心组件的理解与实操能力: 一、课程导入:MCP协议定位与…...
WEB安全--内网渗透--捕获NET-NTLMv2 Hash
一、前言 在LM&NTLM基础篇中我们了解到了NTLM协议的流程与加密的方式,以及具体的在type3的response中Net-ntlm hash v2的生成方式。 思考: 如果我们入侵的服务器中有域管理员的登录后的密码缓存,那就能用工具(mimikatz&…...
使用 J-Flash 读取芯片 Flash 数据的方法
基本读取步骤 硬件连接 确保 J-Link 调试器正确连接到目标板 给目标板供电(可通过 J-Link 供电或外部电源) 创建/打开项目 启动 J-Flash 软件 选择 "File" > "New Project" 创建新项目 选择正确的目标芯片型号(或…...
Spring MVC 返回 JSON 视图的方式及对比(6种)
Spring MVC 返回 JSON 视图的方式及对比(新增 MappingJackson2JsonView) 1. 方式一:ResponseBody 注解 作用:直接返回对象,由消息转换器(如 Jackson)序列化为 JSON。 适用场景:简单…...
SpringMVC的数据响应
1)页面跳转 直接返回字符串 通过ModelAndView对象返回 //方式三(model和view拆开)RequestMapping("/quick4")public String save4(Model model){model.addAttribute("username","lisi3");return "success";}//方式二RequestMapping(&…...
GraphRAG与知识图谱
一、GraphRAG介绍 1.1 什么是 Graph RAG? Graph RAG(Retrieval-Augmented Generation),是一种基于知识图谱的检索增强技术, 通过构建图模型的知识表达,将实体和关系之间的联系用图的形式进行展示ÿ…...
hive通过元数据库删除分区操作步骤
删除分区失败: alter table proj_60_finance.dwd_fm_ma_kpi_di_mm drop partition(year2025,month0-3,typeADJ); 1、查询分区的DB_ID、TBL_ID – 获取数据库ID-26110 SELECT DB_ID FROM DBS WHERE NAME ‘proj_60_finance’; – 获取表ID-307194 SELECT TBL_ID FR…...
LINUX 5 cat du head tail wc 计算机拓扑结构 计算机网络 服务器 计算机硬件
计算机网络 计算机拓扑结构 计算机按性能指标分:巨型机、大型机、小型机、微型机。大型机、小型机安全稳定,小型机用于邮件服务器 Unix系统。按用途分:专用机、通用机 计算机网络:局域网‘、广域网 通信协议’ 计算机终端、客户端…...
flink 增量快照同步文件引用关系和恢复分析
文章目录 文件引用分析相关代码分析从state 恢复,以rocksdb为例不修改并行度修改并行度keyGroupRange过程问题 文件引用分析 每次生成的checkpoint 里都会有所有文件的引用信息 问题,引用分析里如何把f1,f2去掉了,可以参考下面的代码&#…...
属性修改器 (AttributeModifier)
主页面设置组件 import { MyButtonModifier } from ../datastore/MyButtonModifier;Entry ComponentV2 struct MainPage {// 支持用状态装饰器修饰,行为和普通的对象一致Local modifier: MyButtonModifier new MyButtonModifier();build() {Column() {Button(&quo…...
汽车BMS技术分享及其HIL测试方案
一、BMS技术简介 在全球碳中和目标的战略驱动下,新能源汽车产业正以指数级速度重塑交通出行格局。动力电池作为电动汽车的"心脏",其性能与安全性不仅直接决定了车辆的续航里程、使用寿命等关键指标,更深刻影响着消费者对电动汽车的…...