工业控制(ICS)---modbus

Modbus

Modbus,市场占有率高、出题频率高,算是最常见的题目,因为这个协议也是工控领域最常见的协议之一,主要有三类

Modbus/RTU

从机地址1B+功能码1B+数据字段xB+CRC值2B

最大长度256B,所以数据字段最大长度252B

Modbus/ASCII

由Modbus/RTU衍生,采用0123456789ABCDEF 表示原本的从机地址、功能码、数据字段,并添加开始结束标记,所以长度翻倍

开始标记:(0x3A)1B+从机地址2B+功能码2B+数据字段xB+LRC值2B+结束标记\r\n2B

最大长度513B,因为数据字段在RTU中是最大252B,所以在ASCII中最大504B

Modbus/TCP

不再需要从机地址,改用UnitID;不再需要CRC/LRC,因为TCP自带校验

传输标识符2B+协议标识符2B+长度2B+从机ID 1B+功能码1B+数据字段xB

题目中一般只考Modbus/TCP类型

功能码(常见)

1:读线圈
2:读离散输入
3:读保持
4:读输入
5:写单个线圈
6:写单个保持
15:写多个线圈
16:写多个保持

筛选出所有Modbus协议流量,发现有多种功能码,一个一个查询是否有异常流量

首先是17,发现请求包中无其他参数,查看前面几个回包均发现060000数据,猜测此为正常流量,于是将060000作为不查询条件
modbus and modbus.func_code == 17 and modbus.data!=06:00:00
在这里插入图片描述

没有其余流量,判断功能码17无问题,将17作为不查询条件接着查看下一个功能码

功能码109:查询和返回都有数据,先将查询的数据54不选中,得到大量返回包,将其数据00不选中

没有异常流量,查询下一功能码

功能码67:方式同上,这里将返回数据有多种情况

最终在功能码1中发现异常

(modbus.func_code == 1) && (modbus.bit_cnt != 8)

在这里插入图片描述

有请求包就有返回包,四个包都是异常的,但是异常一定是有请求数据异常导致,所以实际上只需找到请求包即可

筛选条件有多种方式

(((((modbus.func_code == 1)) && !(modbus.reference_num == 0)) && !(modbus.reference_num == 1536)) && !(frame[63:1] == 00)) && !(frame[63:1] == fe)

在这里插入图片描述

参考:https://blog.csdn.net/song123sh/article/details/128387982

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/385.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DFS之剪枝2

给定两个整数 n , x n,x n,x。 你可以对 x x x 进行任意次以下操作: 选择 x x x 的一位数字 y y y,将 x x x 替换为 x y x \times y xy。 请你计算通过使用上述操作,将 x x x 变为一个 n n n 位数字(不含前导 0 0 0&…

C++笔记:引用

目录 概念: ​编辑 引用的特性: 引用中的权限问题: 引用与指针的区别: 引用的使用: 概念: 引用是给已存在变量取一个别名,编译器不会为引用变量开辟内存空间。 引用的符号:&…

NLP(3)--利用nn反向计算参数

前言 仅记录学习过程,有问题欢迎讨论 获取数据 自定义一个方程,获取一批数据X,Y import matplotlib.pyplot as pyplot import math import sysX [0.01 * x for x in range(100)] Y [2*x**2 3*x 4 for x in X] print(X) print(Y) pyplot.scatter(…

KV Cache 技术分析

原文:Notion – The all-in-one workspace for your notes, tasks, wikis, and databases. 1 什么是KV Cache LLM(大型语言模型)中的 Attention 机制中的 KV Cache(键值缓存)主要作用是存储键值对,以避免在…

ChatGPT又多了一个强有力的竞争对手:Meta发布Llama 3开源模型!附体验地址

大家好,我是木易,一个持续关注AI领域的互联网技术产品经理,国内Top2本科,美国Top10 CS研究生,MBA。我坚信AI是普通人变强的“外挂”,所以创建了“AI信息Gap”这个公众号,专注于分享AI全维度知识…

ChatPDF代码解读2

这段代码定义了一个名为`ChatPDF`的类,它结合了文本相似性模型和生成模型,用于处理和生成基于特定文档语料库的自然语言回答。以下是对代码的详细解读: 1. **导入依赖**:代码开始处导入了多个Python库,包括`argparse`(命令行参数解析)、`hashlib`(哈希函数)、`os`(操…

力扣:两数之和

知识点&#xff1a; 动态数组的创建&#xff1a; #include<stdlib.h> arr (int*)malloc(len * sizeof(int)); 如何使用sacnf输入数组&#xff1a; scanf 函数在读取输入时&#xff0c;会自动跳过空格&#xff08;空格、制表符、换行符等&#xff09;和换行符&#…

vscode绿绿主题setting config

下载插件Green Tree Theme 选greentree ctrl shift p找到setting {"workbench.colorTheme": "Green Tree","editor.fontSize": 16.5, // 字号"workbench.colorCustomizations": {"[Green Tree]": {"activityBarBadge.…

日志事件ID

日志排查时&#xff0c;通常会根据事件ID搜索日志。 1、安全日志 用户登录事件&#xff1a; 4624&#xff1a;登录成功 4625&#xff1a;登录失败 4634&#xff1a;注销本地登录用户 4647&#xff1a;注销远程登录的用户 4648&#xff1a;使用显式凭证尝试登录 4672&am…

用pigeon kotlin swift写一个自己的插件

文章目录 1. 创建一个flutter plugin项目2. 引入依赖3. 创建pigeons文件夹和message.dart4. 执行生成各个平台文件的命令5. base_plugin.dart6. BasePlugin.kt7. BasePlugin.swift8. 遇到的问题9. [源码](https://github.com/githubityu/base_plugin) 1. 创建一个flutter plugi…

算法一:数字 - 两数之和

给定一个整数数组 nums 和一个目标值 target&#xff0c;请你在该数组中找出和为目标值的那 两个 整数&#xff0c;并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素不能使用两遍。 来源&#xff1a;力扣(LeetCode) 链接&#xf…

scala---基础核心知识(变量定义,数据类型,流程控制,方法定义,函数定义)

一、什么是scala Scala 是一种多范式的编程语言&#xff0c;其设计初衷是要集成面向对象编程和函数式编程的各种特性。Scala运行于Java平台&#xff08;Java虚拟机&#xff09;&#xff0c;并兼容现有的Java程序。 二、为什么要学习scala 1、优雅 2、速度快 3、能融合到hado…

管道流设计模式结合业务

文章目录 流程图代码实现pomcontextEventContextBizTypeAbstractEventContext filterEventFilterAbstractEventFilterEventFilterChainFilterChainPipelineDefaultEventFilterChain selectorFilterSelectorDefaultFilterSelector 调用代码PipelineApplicationcontrollerentitys…

浅析binance新币OMNI的前世今生

大盘跌跌不休&#xff0c;近期唯一的指望就是binance即将上线的OMNI 。虽然目前查到的空投数量不及预期&#xff0c;但OMNI能首发币安&#xff0c;确实远超预期了。 OMNI代币总量1亿&#xff0c;初始流通仅10,391,492枚&#xff0c;其中币安Lanchpool可挖350万枚 对于OMNI这个…

设计模式——模版模式21

模板方法模式在超类中定义了一个事务流程的框架&#xff0c; 允许子类在不修改结构的情况下重写其中一个或者多个特定步骤。下面以ggbond的校招礼盒发放为例。 设计模式&#xff0c;一定要敲代码理解 模版抽象 /*** author ggbond* date 2024年04月18日 17:32* 发送奖品*/ p…

50.HarmonyOS鸿蒙系统 App(ArkUI)web组件实现简易浏览器

50.HarmonyOS鸿蒙系统 App(ArkUI)web组件实现简易浏览器 配置网络访问权限&#xff1a; 跳转任务&#xff1a; Button(转到).onClick(() > {try {// 点击按钮时&#xff0c;通过loadUrl&#xff0c;跳转到www.example1.comthis.webviewController.loadUrl(this.get_url);} …

代码随想录第39天|62.不同路径 63. 不同路径 II

62.不同路径 62. 不同路径 - 力扣&#xff08;LeetCode&#xff09; 代码随想录 (programmercarl.com) 动态规划中如何初始化很重要&#xff01;| LeetCode&#xff1a;62.不同路径_哔哩哔哩_bilibili 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标…

Codeforces Round 782 (Div. 2) D. Reverse Sort Sum

题目 思路&#xff1a; #include <bits/stdc.h> using namespace std; #define int long long #define pb push_back #define fi first #define se second #define lson p << 1 #define rson p << 1 | 1 const int maxn 1e6 5, inf 1e9, maxm 4e4 5; co…

Rust常见陷阱 | 线程间传递消息导致主线程无法结束

在多线程编程中,线程之间的通信是一个不可或缺的话题。尤其是在Rust语言中,由于其特有的所有权机制,线程通信需要更加仔细地处理。本文将深入讨论使用Rust标准库中的消息通道时如何避免主线程被阻塞的问题,并提供详尽的代码示例来辅助理解。 问题描述 当我们在Rust中使用…

【WP】猿人学4 雪碧图、样式干扰

https://match.yuanrenxue.cn/match/4 探索 首先打开Fiddler&#xff0c;发现每个包的除了page参数一样&#xff0c;然后重放攻击可以实现&#xff0c;尝试py复现 Python可以正常拿到数据&#xff0c;这题不考请求&#xff0c;这题的难点原来在于数据的加密&#xff0c;这些数字…