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

增强 HTNN 服务网格功能:基于 Istio 的BasicAuth 与 ACL 插件开发实战

目录

1.引言

什么是HTNN?

为什么开发 BasicAuth 和 ACL 插件?

2.技术背景

技术栈概览

Istio 与服务网格简述

HTNN 框架与插件机制概览

3.插件开发详解:BasicAuth 与 ACL

3.1 BasicAuth插件

功能点

实现细节

3.2 ACL插件

功能点

实现细节

4.实践过程

4.1本地构建自定义HTNN镜像

1.修改源码并添加插件

2.构建Docker镜像

4.2 在 Kubernetes 中部署插件

1.将构建好的数据面和控制面的镜像先导入到Kubernetes集群

2.修改Helm Chart的 values.yaml文件

4.3 测试验证流程


1.引言

什么是HTNN?

HTNN 是一个基于 Istio 构建的服务网格增强项目,通过插件机制来扩展和定制流量控制、安全策略等能力。与 Istio 原生的 Mixer 插件体系不同,HTNN 提供了更加灵活和轻量的插件注册与运行方式,适合快速验证和迭代。

项目地址:https://github.com/mosn/htnn

为什么开发 BasicAuth 和 ACL 插件?

在 HTNN 官方仓库中,虽然提供了如 key-authhmac-auth 等认证插件,但对于传统的用户名密码认证(BasicAuth)以及基于源 IP 的访问控制(ACL)仍未支持。在一些面向公网服务或细粒度控制场景中,这类插件是非常常用且必要的。

因此,我基于 HTNN 插件机制,自行开发并集成了:

basicAuth 插件:用于支持 HTTP Basic Authentication,适用于快速接入第三方平台或内部服务接口保护。

acl 插件:实现对来源 IP 的白名单与黑名单策略配置,增强服务边界的访问控制能力。

2.技术背景

技术栈概览

技术作用
Go编写插件逻辑,HTNN 本身使用 Go 开发
Protobuf定义插件配置结构、实现插件与框架间的序列化通信
Docker构建包含自定义插件的 HTNN 镜像
Kubernetes部署测试 HTNN 与插件,验证实际运行效果
Linux本地开发与测试环境,使用 shell 工具辅助调试
Istio服务网格的核心组件,HTNN 作为其增强层构建在上方

Istio 与服务网格简述

Istio 是当前主流的服务网格框架,提供流量管理、安全控制、可观测性等能力。在微服务架构中,Istio 通过 sidecar(通常是 Envoy)注入方式拦截进出流量,实现服务间的无侵入治理。然而,Istio 自身对于某些认证或访问控制的定制化支持较为复杂或不够灵活,这正是 HTNN 出现的背景。

HTNN 框架与插件机制概览

热插拔机制:插件通过 plugins.RegisterPlugin 接口注册,支持动态加载与配置。

统一请求拦截点:插件可以在请求进入 Envoy 之前对其进行处理(如验证、拦截)。

可配置结构:通过 Protobuf 配置文件或 ConfigMap 传递运行参数,实现运行时灵活控制。

与 Istio 无缝集成:在 Istio 的 service mesh 中以 sidecar 的形式运行,兼容 Istio 原生组件。

3.插件开发详解:BasicAuth 与 ACL

3.1 BasicAuth插件

功能点

1.基于 HTTP Basic Auth 的认证:

验证 HTTP 请求中的 Authorization 头部,确保用户提供了正确的用户名和密码。

如果认证失败,返回 HTTP 401 状态码。

2.支持多用户凭据:

插件支持配置多个用户名和密码对,允许不同用户访问。

3.动态配置:

用户名和密码通过配置文件动态加载,支持灵活调整

4.安全性:

使用 Base64 解码解析 Authorization 头部中的凭据。

如果凭据无效或缺失,拒绝请求。

实现细节

1. 配置结构

配置文件定义在 [config.go] 中:

type Config struct {Credentials map[string]string `json:"credentials,omitempty"`
}

Credentials 字段

键是用户名,值是对应的密码。

示例配置:

{"credentials": {"user1": "password1","user2": "password2"}
}

2. 插件注册

插件通过 plugins.RegisterPlugin 注册到框架中:

func init() {plugins.RegisterPlugin(basicauth.Name, &plugin{})
}

3. 核心逻辑

核心逻辑实现于 [filter.go] 中:

func (f *filter) DecodeHeaders(headers api.RequestHeaderMap, endStream bool) api.ResultAction {authHeader, ok := headers.Get("Authorization")if !ok || !strings.HasPrefix(authHeader, "Basic ") {return &api.LocalResponse{Code: 401, Msg: "missing or invalid Authorization header"}}encodedCredentials := strings.TrimPrefix(authHeader, "Basic ")decoded, err := base64.StdEncoding.DecodeString(encodedCredentials)if err != nil {return &api.LocalResponse{Code: 401, Msg: "invalid Authorization header"}}parts := strings.SplitN(string(decoded), ":", 2)if len(parts) != 2 {return &api.LocalResponse{Code: 401, Msg: "invalid Authorization header"}}username, password := parts[0], parts[1]if validPassword, ok := f.config.Credentials[username]; !ok || validPassword != password {return &api.LocalResponse{Code: 401, Msg: "invalid username or password"}}return api.Continue
}

逻辑说明:

检查 Authorization 头部是否存在,且是否以 Basic  开头。

使用 Base64 解码凭据,并解析出用户名和密码。

验证用户名和密码是否匹配配置中的凭据。

如果验证失败,返回 HTTP 401;否则继续处理请求。

4. 单元测试

单元测试位于 [filter_test.go]:

func TestBasicAuthFilter(t *testing.T) {tests := []struct {name     stringconf     stringheaders  map[string][]stringexpected int}{{name: "valid credentials",conf: `{"credentials": {"user1": "password1","user2": "password2"}}`,headers: map[string][]string{"Authorization": {"Basic " + base64.StdEncoding.EncodeToString([]byte("user1:password1"))},},expected: 0,},{name: "invalid credentials",conf: `{"credentials": {"user1": "password1","user2": "password2"}}`,headers: map[string][]string{"Authorization": {"Basic " + base64.StdEncoding.EncodeToString([]byte("user1:wrongpassword"))},},expected: 401,},}
}

测试覆盖了以下场景:

有效的用户名和密码。

无效的用户名或密码。

缺失 Authorization 头部

3.2 ACL插件

功能点

1.基于IP地址的访问控制:

支持通过 allow_list 和 deny_list 配置访问规则。

优先检查 deny_list,如果匹配则拒绝访问。

2.CIDR支持:

支持 CIDR 格式的 IP 地址范围匹配。

3.动态配置:

通过配置文件动态加载访问控制规则。

4.安全性:

如果请求的 IP 地址不在 allow_list 中,默认拒绝访问。

实现细节

1.配置结构

配置文件定义在 [config.go] 中:

type Config struct {AllowList []string `json:"allow_list,omitempty"`DenyList  []string `json:"deny_list,omitempty"`
}

AllowList 和 DenyList 字段

AllowList:允许访问的 IP 地址或 CIDR 范围。

DenyList:拒绝访问的 IP 地址或 CIDR 范围。

示例配置:

{"allow_list": ["192.168.1.0/24"],"deny_list": ["10.0.0.1"]
}

2.插件注册

插件通过 plugins.RegisterPlugin 注册到框架中:

func init() {plugins.RegisterPlugin(acl.Name, &plugin{})
}

3.核心逻辑

核心逻辑实现于 [filter.go] 中:

func (f *filter) DecodeHeaders(headers api.RequestHeaderMap, endStream bool) api.ResultAction {clientIP, ok := headers.Get("X-Forwarded-For")if !ok {return &api.LocalResponse{Code: 403, Msg: "client IP not found"}}for _, denyIP := range f.config.DenyList {if isIPMatch(clientIP, denyIP) {return &api.LocalResponse{Code: 403, Msg: "access denied"}}}for _, allowIP := range f.config.AllowList {if isIPMatch(clientIP, allowIP) {return api.Continue}}return &api.LocalResponse{Code: 403, Msg: "access denied"}
}

逻辑说明:

获取请求头中的 X-Forwarded-For 字段,提取客户端 IP。

检查 IP 是否匹配 deny_list,如果匹配则拒绝访问。

检查 IP 是否匹配 allow_list,如果匹配则允许访问。

如果未匹配任何规则,默认拒绝访问。

4.单元测试

单元测试位于 [filter_test.go]:

func TestACLFilter(t *testing.T) {tests := []struct {name     stringconf     stringheaders  map[string][]stringexpected int}{{name: "deny list match",conf: `{"allow_list": ["192.168.1.0/24"],"deny_list": ["10.0.0.1"]}`,headers: map[string][]string{"X-Forwarded-For": {"10.0.0.1"},},expected: 403,},{name: "allow list match",conf: `{"allow_list": ["192.168.1.0/24"],"deny_list": ["10.0.0.1"]}`,headers: map[string][]string{"X-Forwarded-For": {"192.168.1.50"},},expected: 0,},}
}

测试覆盖了以下场景

匹配 deny_list

匹配 allow_list

未匹配任何规则。

4.实践过程

4.1本地构建自定义HTNN镜像

1.修改源码并添加插件

分别在types\plugins(实现配置)和plugins\plugins(实现逻辑)目录下新增basicauth和acl目录。

分别在两个目录下的主插件入口调用RegisterPlugin(...)注册。

2.构建Docker镜像

先检查实现.editorconfig文件的代码格式规范,避免因系统版本不兼容导致换行符等问题影响镜像的构建

dockerfile文件直接复用 htnn\manifests\images\cp\Dockerfile 和htnn\manifests\images\dp\Dockerfile 就行

cd到 htnn\manifests\Makefile 目录下执行 make 命令完成构建:

make build-proxy-imagemake build-controller-image

4.2 在 Kubernetes 中部署插件

1.将构建好的数据面和控制面的镜像先导入到Kubernetes集群
minikube image load your-image-name1:tagminikube image load your-image-name2:tag
2.修改Helm Chart的 values.yaml文件
#文件 htnn\manifests\charts\htnn-controller\values.yaml
hub: ""image: htnn-controllertag: "latest"imagePullPolicy: "Never" # 不使用远程镜像
#文件 manifests\charts\htnn-gateway\values.yaml
gateway:name: istio-ingressgatewayimage: m.daocloud.io/docker.io/envoyproxy/envoy:latestimagePullPolicy: Neverenv:ISTIO_DELTA_XDS: "true"
#默认的manifests\charts\htnn-gateway\values.schema.json文件中没有镜像参数
#需要在json文件中添加该结构参数

3.部署或更新 HTNN 到 Kubernetes

首次部署:

控制面

helm install htnn-controller 本地Path\htnn\manifests\charts\htnn-controller --namespace istio-system --create-namespace -f 本地Path\htnn\manifests\charts\htnn-controller\values.yaml

 数据面

helm install htnn-gateway 本地Path\htnn\manifests\charts\htnn-gateway -n istio-system -f 本地Path\htnn\manifests\charts\htnn-gateway\values.yaml 

已有部署则使用升级命令 upgrade 替换 install

4.查看 istio-system 命名空间下所有 Pod 的运行状态

PS C:\WINDOWS\system32> kubectl -n istio-system get pods
NAME                                    READY   STATUS    RESTARTS       AGE
istio-ingressgateway-674cd8d4c9-lg692   1/1     Running   3 (3d2h ago)   3d20h
istiod-6b6c464bb7-2df62                 1/1     Running   3 (3d2h ago)   3d20h

如果出现异常状态,用以下命令查看原因

kubectl -n istio-system describe pod <pod-name>

4.3 测试验证流程

分别进行后端服务部署、入口流量管理、路由规则定义和安全认证策略配置,配置到kubernetes环境中

部署后端服务

//backend.yaml
---
apiVersion: v1
kind: Service
metadata:name: backendnamespace: istio-systemlabels:app: backend
spec:ports:- port: 80name: httptargetPort: 5678selector:app: backend
---
apiVersion: apps/v1
kind: Deployment
metadata:name: backendnamespace: istio-system
spec:replicas: 1selector:matchLabels:app: backendtemplate:metadata:labels:app: backendspec:containers:- name: backendimage: hashicorp/http-echoargs:- "-text=hello from backend"ports:- containerPort: 5678

 定义入口网关

//gateway.yaml
apiVersion: networking.istio.io/v1beta1
kind: Gateway
metadata:name: htnn-gatewaynamespace: istio-system
spec:selector:istio: ingressgatewayservers:- port:number: 80name: httpprotocol: HTTPhosts:- "*"

 定义虚拟服务路由规则

//vs-basicauth.yaml
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:name: vs-basicauthnamespace: istio-system
spec:hosts:- "*"gateways:- htnn-gatewayhttp:- match:- uri:prefix: /route:- destination:host: backend.istio-system.svc.cluster.localport:number: 80

 定义 basicAuth 插件的策略

//basicauthpolicy.yaml
apiVersion: htnn.mosn.io/v1
kind: FilterPolicy
metadata:name: basicauth-policynamespace: istio-system
spec:targetRef:group: networking.istio.iokind: VirtualServicename: vs-basicauthfilters:basicAuth:config:credentials:admin: "admin123"user: "user123"

先通过 status 检查下策略是否被接受:

$ kubectl -n istio-system get filterpolicies.htnn.mosn.io policy -o yaml···​
status:conditions:- lastTransitionTime: "2025-05-15T13:56:42Z"message: The policy has been acceptedobservedGeneration: 1reason: Acceptedstatus: "True"type: Accepted
kind: List
metadata:resourceVersion: ""

让我们在一个终端上执行 port-forward,让本地的客户端可以访问到 k8s 里面的服务:

kubectl port-forward -n istio-system svc/istio-ingressgateway 30474:80

在另一个终端上,我们可以通过 30474 端口访问到 HTNN:

//正确的用户名和密码
curl -v --user admin:admin123 http://localhost:30474/get
HTTP/1.1 200 OK
//不正确的
curl -v --user admin:admin121 http://localhost:30474/get
HTTP/1.1 401 Unauthorized

以上是basicauth插件的测试流程,acl的流程是一样的,先将配置文件写好,再应用策略:

//aclpolicy.yaml
apiVersion: htnn.mosn.io/v1
kind: FilterPolicy
metadata:name: acl-policynamespace: istio-system
spec:targetRef:group: networking.istio.iokind: VirtualServicename: vs-aclfilters:acl:config:allow_list:- "192.168.1.0/24"deny_list:- "10.0.0.1"

 让我们在一个终端上执行 port-forward,让本地的客户端可以访问到 k8s 里面的服务:

kubectl port-forward -n istio-system svc/istio-ingressgateway 30474:80

在另一个终端上,我们可以通过 30474 端口访问到 HTNN:

curl -v --header "Host: backend.local" --header "X-Forwarded-For: 192.168.1.100" http://localhost:30474/getHTTP/1.1 200 OKcurl -v --header "Host: backend.local" --header "X-Forwarded-For: 10.0.0.1" http://localhost:30474/getHTTP/1.1 403 Forbidden

相关文章:

增强 HTNN 服务网格功能:基于 Istio 的BasicAuth 与 ACL 插件开发实战

目录 1.引言 什么是HTNN&#xff1f; 为什么开发 BasicAuth 和 ACL 插件&#xff1f; 2.技术背景 技术栈概览 Istio 与服务网格简述 HTNN 框架与插件机制概览 3.插件开发详解&#xff1a;BasicAuth 与 ACL 3.1 BasicAuth插件 功能点 实现细节 3.2 ACL插件 功能点 …...

c++从入门到精通(四)--动态内存,模板与泛型编程

文章目录 动态内存直接管理内存Shared_ptr类Unique_ptrWeak_ptr动态数组allocator类文本查询程序 模板与泛型编程定义模板函数模板类模板模板参数成员模板控制实例化 模板实参推断重载与模板可变参数模板模板特例化 动态内存 c中动态内存的管理是通过new和delete运算符来实现的…...

C盘清理秘籍:快速提升系统性能

C盘清理的重要性 C盘作为系统盘&#xff0c;存储着操作系统和关键程序文件。随着使用时间的增加&#xff0c;C盘空间会逐渐被占用&#xff0c;导致系统运行缓慢、程序启动延迟等问题。定期清理C盘可以有效提升系统性能&#xff0c;延长硬盘寿命。 清理临时文件 Windows系统在…...

从 Vue3 回望 Vue2:组件设计升级——Options API vs Composition API

文章目录 从 Vue3 回望 Vue2&#xff1a;组件设计升级——Options API vs Composition API1、组件范式&#xff1a;框架设计思想的投影2、Vue2&#xff1a;Options API 的结构与局限结构清晰&#xff1a;新手友好、职责分明核心痛点&#xff1a;逻辑分散&#xff0c;难以聚合复…...

寻找两个正序数组的中位数 - 困难

************* Python topic: 4. 寻找两个正序数组的中位数 - 力扣&#xff08;LeetCode&#xff09; ************* Give the topic an inspection. Do the old topic will give you some new sparks. Before that, I do some really good craetive things about my logo. …...

国产密码新时代!华测国密 SSL 证书解锁安全新高度

在数字安全被提升到国家战略高度的今天&#xff0c;国产密码算法成为筑牢网络安全防线的关键力量。华测国密SSL证书凭借其强大性能与贴心服务&#xff0c;为企业网络安全保驾护航&#xff0c;成为符合国家安全要求的不二之选&#xff01;​ 智能兼容&#xff0c;告别浏览器适配…...

【金仓数据库征文】从云计算到区块链:金仓数据库的颠覆性创新之路

目录 一、引言 二、金仓数据库概述 2.1 金仓数据库的背景 2.2 核心技术特点 2.3 行业应用案例 三、金仓数据库的产品优化提案 3.1 性能优化 3.1.1 查询优化 3.1.2 索引优化 3.1.3 缓存优化 3.2 可扩展性优化 3.2.1 水平扩展与分区设计 3.2.2 负载均衡与读写分离 …...

互联网大厂Java求职面试:AI与大模型集成的云原生架构设计

互联网大厂Java求职面试&#xff1a;AI与大模型集成的云原生架构设计 引言 在现代互联网企业中&#xff0c;AI与大模型技术的应用已经成为不可或缺的一部分。特别是在短视频平台、电商平台和金融科技等领域&#xff0c;如何高效地将大模型集成到现有的云原生架构中是一个巨大…...

股指期货套期保值怎么操作?

股指期货套期保值就是企业或投资者通过持有与其现货市场头寸相反的期货合约&#xff0c;来对冲价格风险的一种方式。换句话说&#xff0c;就是你在股票市场上买了股票&#xff08;现货&#xff09;&#xff0c;担心股价下跌会亏钱&#xff0c;于是就在期货市场上卖出相应的股指…...

基于IBM BAW的Case Management进行项目管理示例

说明&#xff1a;使用IBM BAW的难点是如何充分利用其现有功能根据实际业务需要进行设计&#xff0c;本文是示例教程&#xff0c;因CASE Manager使用非常简单&#xff0c;这里重点是说明如何基于CASE Manager进行项目管理&#xff0c;重点在方案设计思路上&#xff0c;其中涉及的…...

黑马k8s(七)

1.Pod介绍 查看版本&#xff1a; 查看类型,这里加s跟不加s没啥区别&#xff0c;可加可不加 2.Pod基本配置 3.镜像拉去策略 本地没有这个镜像&#xff0c;策略是Never&#xff0c;启动失败 查看拉去策略&#xff1a; 更改拉去策略&#xff1a; 4.启动命令 运行的是nginx、busv…...

九、HQL DQL七大查询子句

作者&#xff1a;IvanCodes 日期&#xff1a;2025年5月15日 专栏&#xff1a;Hive教程 Apache Hive 的强大之处在于其类 SQL 的查询语言 HQL&#xff0c;它使得熟悉 SQL 的用户能够轻松地对存储在大规模分布式系统&#xff08;如 HDFS&#xff09;中的数据进行复杂的查询和分析…...

基于中心点预测的视觉评估与可视化流程

基于中心点预测的视觉评估与可视化流程 基于中心点预测的视觉评估与可视化流程一、脚本功能概览二、可视化与评分机制详解1. 真实框解析2. 调用模型处理帧3. 预测中心点与真实值的对比4. 打分策略5. 图像可视化三、目录结构要求四、运行方式五、应用场景与拓展思路六、总结七,…...

RTSP 播放器技术探究:架构、挑战与落地实践

RTSP 播放器为什么至今无法被淘汰&#xff1f; 在实时视频传输领域&#xff0c;RTSP&#xff08;Real-Time Streaming Protocol&#xff09;作为最基础、最常见的协议之一&#xff0c;至今依然被广泛用于监控设备、IP Camera、视频服务器等设备中。然而&#xff0c;要构建一个稳…...

实验5 DNS协议分析与测量

实验5 DNS协议分析与测量 1、实验目的 了解互联网的域名结构、域名系统DNS及其域名服务器的基本概念 熟悉DNS协议及其报文基本组成、DNS域名解析原理 掌握常用DNS测量工具dig使用方法和DNS测量的基本技术 2、实验环境 硬件要求&#xff1a;阿里云云主机ECS 一台。 软件要…...

编程日志5.8

二叉树练习题 1.965. 单值二叉树 - 力扣(LeetCode) /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) :…...

【鸿蒙开发】性能优化

语言层面的优化 使用明确的数据类型&#xff0c;避免使用模糊的数据类型&#xff0c;例如ESObject。 使用AOT模式 AOT就是提前编译&#xff0c;将字节码提前编译成机器码&#xff0c;这样可以充分优化&#xff0c;从而加快执行速度。 未启用AOT时&#xff0c;一边运行一边进…...

2025-05-13 学习记录--Python-循环:while循环 + while-else循环 + for循环 + 循环控制

合抱之木&#xff0c;生于毫末&#xff1b;九层之台&#xff0c;起于累土&#xff1b;千里之行&#xff0c;始于足下。&#x1f4aa;&#x1f3fb; 一、循环 ⭐️ &#xff08;一&#xff09;、while循环 &#x1f36d; 初始条件设置 -- 通常是重复执行的 计数器while 条件(判…...

Vue3学习(组合式API——生命周期函数基础)

目录 一、Vue3组合式API中的生命周期函数。 &#xff08;1&#xff09;各阶段生命周期涉及函数简单介绍。 <1>创建挂载阶段的生命周期函数。 <2>更新阶段的生命周期函数。 <3>卸载阶段的生命周期函数。 <4>错误处理的生命周期函数。 &#xff08;2&…...

全面指南:Xinference大模型推理框架的部署与使用

全面指南:Xinference大模型推理框架的部署与使用 Xinference(Xorbits Inference)是一个功能强大的分布式推理框架,专为简化各种AI模型的部署和管理而设计。本文将详细介绍Xinference的核心特性、版本演进,并提供多种部署方式的详细指南,包括本地部署、Docker-Compose部署…...

计量——检验与代理变量

1.非嵌套模型的检验 1Davidson-Mackinnon test 判断哪个模型好 log&#xff08;y&#xff09;β0β1x1β2x2β3x3u log&#xff08;y&#xff09;β0β1log&#xff08;x1&#xff09;β2log&#xff08;x2&#xff09;β3log&#xff08;x3&#xff09;u 1.对log&#xff…...

Cocos Creator 3.8.5 构建依赖环境配置文档

Cocos Creator 3.8.5 构建依赖环境配置文档 文章目录 Cocos Creator 3.8.5 构建依赖环境配置文档✅ 构建依赖汇总表✅ 构建平台配置说明&#x1f449; Windows 构建&#x1f449; Android 构建 ✅ 推荐构建环境组合&#xff08;稳定&#xff09;✅ 常见问题提示 适用于打包 An…...

实验五:以太网UDP全协议栈的实现(通过远程实验系统)

文章目录 FPGA以太网:从ARP到UDP的完整协议栈一、引言二、核心模块详解1. ARP协议处理模块1.1 `arp_cache`:ARP缓存模块1.2 `arp_tx`:ARP请求与应答发送模块1.3 `arp_rx`:ARP接收与解析模块2. MAC层处理模块2.1 `mac_layer`:MAC层顶层模块2.2 `mac_tx_mode`:MAC发送模式选…...

HTML-实战之 百度百科(影视剧介绍)

本系列可作为前端学习系列的笔记&#xff0c;代码的运行环境是在HBuilder中&#xff0c;小编会将代码复制下来&#xff0c;大家复制下来就可以练习了&#xff0c;方便大家学习。 系列文章目录 HTML-1.1 文本字体样式-字体设置、分割线、段落标签、段内回车以及特殊符号 HTML…...

了解光学影像

本文来源 &#xff1a; 腾讯元宝 光学影像是一种通过光学技术捕捉、记录和处理图像的技术&#xff0c;广泛应用于医学、工业、安防、科研等多个领域。以下是关于光学影像的详细介绍&#xff1a; 1. ​​基本原理​​ 光学影像基于光的传播、反射、折射和散射等物理现象。通过…...

计算机视觉---目标追踪(Object Tracking)概览

一、核心定义与基础概念 1. 目标追踪的定义 定义&#xff1a;在视频序列或连续图像中&#xff0c;对一个或多个感兴趣目标&#xff08;如人、车辆、物体等&#xff09;的位置、运动轨迹进行持续估计的过程。核心任务&#xff1a;跨帧关联目标&#xff0c;解决“同一目标在不同…...

Weblogic SSRF漏洞复现(CVE-2014-4210)【vulhub靶场】

漏洞概述&#xff1a; Weblogic中存在一个SSRF漏洞&#xff0c;利用该漏洞可以发送任意HTTP请求&#xff0c;进而攻击内网中redis、fastcgi等脆弱组件。 漏洞形成原因&#xff1a; WebLogic Server 的 UDDI 组件&#xff08;uddiexplorer.war&#xff09;中的 SearchPublicR…...

fakeroot 在没有超级用户权限的情况下模拟文件系统的超级用户行为

fakeroot 是一个在 Linux 环境中使用的工具&#xff0c;它允许用户在没有超级用户权限的情况下模拟文件系统的超级用户行为。它是一个在 Linux 环境中广泛使用的工具&#xff0c;通常包含在大多数 Linux 发行版的软件仓库中。‌ 主要功能 ‌模拟 root 权限‌&#xff1a;fake…...

AI大模型应用:17个实用场景解锁未来

任何新技术的普及都需要经历一段漫长的过程&#xff0c;人工智能大模型也不例外。 尽管某些行业的从业者已经开始将大模型融入日常工作&#xff0c;但其普及程度仍远未达到“人手必备”的地步。 那么&#xff0c;究竟是什么限制了它的广泛应用&#xff1f;普通人如何才能用好…...

激光雷达点云畸变消除:MCU vs CPU 方案详解

在移动机器人、自动驾驶等场景中&#xff0c;激光雷达&#xff08;LiDAR&#xff09;用于获取高精度的空间点云数据。然而&#xff0c;当雷达在运动中扫描时&#xff0c;不同点的采集时刻对应的位置不同&#xff0c;就会出现“运动畸变&#xff08;Motion Distortion&#xff0…...