【A2DP】深入解读A2DP中通用访问配置文件(GAP)的互操作性要求
目录
一、模式支持要求
1.1 发现模式
1.2 连接模式
1.3 绑定模式
1.4 模式间依赖关系总结
1.5 注意事项
1.6 协议设计深层逻辑
二、安全机制(Security Aspects)
三、空闲模式操作(Idle Mode Procedures)
3.1 支持要求
3.2 关键差异与设计逻辑
3.3 安全与空闲模式的关联性
四、设计要点总结
五、实际开发建议
六、总结
七、参考资料
蓝牙技术通过定义多种配置文件(Profile)实现不同设备间的互操作性。其中,高级音频分发规范(A2DP) 负责无线传输高质量音频流(如音乐),而 通用访问配置文件(GAP) 是蓝牙设备的基础框架,定义了设备发现、连接和安全等核心功能。A2DP要求设备必须兼容GAP的规范,本文将从模式要求、安全机制和空闲模式操作三个方面解析两者的互操作性要求。
一、模式支持要求
A2DP设备需支持GAP中定义的三种核心模式:发现模式(Discoverability)、连接模式(Connectability) 和 绑定模式(Bonding)。具体要求如下:
关键规则:
-
发现模式互斥性:设备在同一时间只能处于一种发现模式(如不可发现/有限可发现/一般可发现)。
-
隐私与兼容性平衡:若设备需要短时间可见(如配对时),需支持有限可发现模式,但必须同时支持不可发现模式以保护隐私。
-
必选覆盖:所有A2DP设备必须至少支持一种可发现模式(有限或一般),确保可被发现并建立连接。
应用场景:
-
示例1:蓝牙音箱(SNK)首次开机时启用有限可发现模式(持续30秒广播),配对后自动切换为不可发现模式。
-
示例2:手机(SRC)在“蓝牙设置”界面启用一般可发现模式,允许其他设备持续扫描发现。
1.1 发现模式
发现模式决定了设备在蓝牙环境中被其他设备发现的方式与程度。在高级音频分发配置文件中,涉及三种发现模式:
-
非可发现模式(Non - Discoverable mode):对于源设备(SRC)和接收设备(SNK)而言,若设备支持有限可发现模式,那么非可发现模式为强制支持;否则,非可发现模式为可选支持。意味着在某些场景下,设备可选择隐藏自身,避免被随意发现,增强了设备的隐私性与安全性。例如,一些专业音频设备可能在特定工作模式下不希望被无关设备干扰,就可设置为非可发现模式。
-
有限可发现模式(Limited discoverable mode):设备要么支持有限可发现模式,要么支持通用可发现模式。有限可发现模式下,设备仅在有限时间内被可发现,适用于对连接及时性有一定要求,但又不希望长时间暴露在蓝牙环境中的场景,如某些临时音频连接需求。
-
通用可发现模式(General discoverable mode):同样,设备需在有限可发现模式和通用可发现模式中选择支持其一。通用可发现模式使设备可被任何进行蓝牙扫描的设备发现,适合需要广泛连接的音频设备,比如公共场所的蓝牙音箱,以便用户随时连接使用。
1.2 连接模式
-
非连接模式(Non - Connectable mode):无论是 SRC 还是 SNK,都不支持非连接模式。因为在高级音频分发场景中,设备的核心功能是实现音频的传输与接收,必然需要建立连接,非连接模式不符合其业务需求。
-
可连接模式(Connectable mode):可连接模式是 SRC 和 SNK 都必须支持的。只有支持可连接模式,设备之间才能建立起稳定的蓝牙连接,进而实现音频数据的传输,这是实现高级音频分发的基础前提。
1.3 绑定模式
-
非绑定模式(Non - bondable mode):非绑定模式为可选支持。在非绑定模式下,设备每次连接都需重新进行配对等连接流程,适用于一些对安全性要求不高,且连接场景较为临时的情况。允许但不推荐。
-
可绑定模式(Bondable mode):可绑定模式是 SRC 和 SNK 都必须支持的。可绑定模式下,设备之间完成首次配对后,后续连接可直接使用之前保存的配对信息,简化了连接流程,提高了连接效率,尤其适用于经常使用的音频设备组合,如用户常用的蓝牙耳机与手机之间的连接。
1.4 模式间依赖关系总结
①发现模式的关联性
-
C1条件优先级:若设备支持有限可发现模式 → 必须实现不可发现模式(如智能手表仅在充电时开放发现)。
-
C2二选一规则:设备不能同时不支持有限和一般可发现模式,否则违反协议。
②连接与绑定的强制组合
-
A2DP设备必须同时支持可连接模式(M)和可绑定模式(M),两者共同保障音频传输的可靠性与用户便捷性。
-
不可连接(X)与不可绑定(O)的组合被协议禁止或强烈不推荐。
1.5 注意事项
①模式切换逻辑设计
-
实现状态机管理不同模式的切换(如发现模式在配对成功后自动关闭)。
-
确保模式切换时不影响音频流的持续传输(如避免因模式切换触发断开连接)。
②测试验证重点
-
覆盖C1/C2条件分支:分别测试设备支持/不支持有限可发现模式时的行为。
-
绑定兼容性:验证与不同厂商设备的绑定成功率及密钥存储稳定性。
③用户交互优化
-
默认启用有限可发现模式,缩短用户等待时间。
-
提供可视化提示(如LED闪烁)表明设备当前处于可发现/可连接状态。
1.6 协议设计深层逻辑
①安全与便利的权衡
-
通过C1强制要求不可发现模式,防止设备长期暴露在扫描攻击中。
-
通过C2确保设备至少支持一种可发现模式,避免“完全隐身”导致无法配对。
②角色无差异化设计
-
SRC(音源设备,如手机)和SNK(接收设备,如耳机)在模式要求上完全一致,简化协议兼容性设计。
二、安全机制(Security Aspects)
A2DP未对GAP的安全要求进行额外修改,完全继承GAP的安全规范。其核心安全机制包括以下三部分:
安全功能 | 实现要求 | A2DP应用场景示例 |
认证(Authentication) | 强制支持配对流程(如PIN码、Passkey或Numeric Comparison) | 手机与耳机首次配对时需输入配对码 |
加密(Encryption) | 可选支持链路加密(默认使用AES-CCM算法) | 传输高保真音乐时启用加密防止数据窃听 |
隐私保护(Privacy) | 支持随机设备地址(Random Address)避免被长期追踪 | 耳机在公共场合隐藏真实MAC地址以保护隐私 |
注意事项:
-
兼容性验证:需测试与旧版本蓝牙设备(如BT 4.0)的加密算法兼容性(如是否支持AES-CCM)。
-
用户交互优化:在配对流程中提供清晰的提示(如屏幕显示配对码),避免用户误操作。
三、空闲模式操作(Idle Mode Procedures)
3.1 支持要求
在空闲模式下,设备可进行一系列操作以准备连接或获取其他设备信息。
A2DP对空闲模式程序的支持要求如下:
-
发起通用查询(Initiation of general inquiry):源设备(SRC)必须支持发起通用查询,而接收设备(SNK)为可选支持。通用查询用于设备搜索周围所有可发现的蓝牙设备,SRC 通过发起通用查询,可寻找潜在的音频接收设备,以便建立连接进行音频传输。
-
发起有限查询(Initiation of limited inquiry):SRC 和 SNK 对发起有限查询均为可选支持。有限查询用于搜索处于有限可发现模式的设备,适用于特定场景下对特定设备的搜索需求。
-
发起名称发现(Initiation of name discovery):SRC 和 SNK 对发起名称发现均为可选支持。名称发现可帮助设备获取其他设备的名称信息,方便用户识别和选择连接对象。
-
发起设备发现(Initiation of device discovery):SRC 和 SNK 对发起设备发现均为可选支持。设备发现过程可获取设备的详细信息,如设备类、所支持的服务等,为后续连接和功能适配提供依据。
-
发起绑定(Initiation of bonding):SRC 和 SNK 对发起绑定均为可选支持。当设备需要与其他设备建立长期稳定的连接关系时,可发起绑定操作,保存配对信息,方便后续快速连接。
3.2 关键差异与设计逻辑
①SRC强制通用查询
-
原因:音频源设备(如手机)需主动搜索接收设备(如音箱/耳机),确保用户可快速找到目标设备。
-
功耗权衡:通用查询虽耗电,但作为SRC的核心功能必须支持。开发者可通过优化扫描间隔(如周期扫描)降低功耗。
②SNK可选通用查询
-
原因:接收设备(如耳机)通常作为被连接方,无需主动扫描其他设备。协议允许禁用此功能以延长续航。
-
例外场景:支持多设备切换的耳机(如同时连接手机和平板)可能需要启用有限查询。
③其他操作为可选
-
灵活性设计:协议允许厂商根据产品需求选择性地实现名称发现、设备发现等功能。例如:
-
低功耗耳机可禁用设备发现,仅保留名称发现。
-
智能音箱可能启用完整设备发现以展示更多周边设备信息。
-
3.3 安全与空闲模式的关联性
①隐私保护与查询操作的冲突:若SNK启用隐私模式(随机地址),可能影响SRC的设备发现结果。需通过绑定后的身份解析密钥(IRK) 解决随机地址识别问题。
②绑定流程的空闲模式触发
-
当用户在SRC端手动发起绑定(如点击“配对新设备”),设备可能自动执行以下操作:
-
启动通用查询 → 发现设备 → 名称发现 → 绑定。
-
-
开发者需确保各步骤的时序兼容性(如查询完成后保留足够时间等待用户选择设备)。
四、设计要点总结
-
模式优先级:可连接和可绑定模式必须实现,发现模式需至少支持一种(有限或一般)。
-
安全兼容性:直接沿用GAP的安全机制,无需额外开发。
-
角色差异:SRC需强制支持通用查询,SNK可选择性实现以降低功耗。
-
角色差异化设计:SRC作为“主动方”承担更多功能(如强制通用查询),SNK作为“被动方”降低功能复杂度,体现蓝牙协议的主从架构思想。
-
可选功能的灵活性:通过将多数空闲模式操作设为可选(O),允许设备厂商根据产品定位(如高端vs.入门级)灵活取舍功能,平衡成本与用户体验。
五、实际开发建议
-
测试场景覆盖:验证设备在不可发现模式下的隐私保护能力。
-
功耗优化:SNK可禁用非必要的空闲操作(如有限查询)以延长续航。
-
用户体验:默认启用有限可发现模式,缩短用户配对等待时间。
-
空闲模式功耗优化
策略 | 适用角色 | 实现方式 |
动态扫描间隔 | SRC | 用户打开蓝牙设置界面时启动高频扫描,退出后切换为低频或暂停扫描 |
禁用非核心功能 | SNK | 关闭设备发现与有限查询功能,仅保留必要的通用查询响应能力 |
快速退出空闲模式 | 两者 | 收到连接请求后立即终止扫描操作,减少无效功耗 |
-
安全增强实践
-
强制绑定加密:即使协议未强制要求,建议A2DP设备在传输音频流时默认启用加密。
-
防止中间人攻击:在配对流程中启用MITM(Man-in-the-Middle)保护,要求用户确认配对码。
-
-
用户场景兼容性测试
测试场景 | 验证目标 |
多设备查询冲突 | SRC在扫描时,SNK同时被其他设备扫描,验证地址解析与响应稳定性 |
隐私模式切换 | SNK在绑定后启用随机地址,验证SRC能否通过IRK识别设备并自动重连 |
高低功耗模式切换 | SRC在省电模式下禁用设备发现,验证手动触发扫描时功能恢复速度 |
六、总结
A2DP作为蓝牙技术中用于高质量音频传输的配置文件,其对GAP的支持要求是确保设备间互操作性和安全性的基础。通过明确模式支持、安全方面和空闲模式程序的要求,A2DP确保了设备能够按照统一的标准进行发现、连接和绑定,从而为用户提供稳定、安全的音频传输体验。开发者需重点关注SRC与SNK的角色差异,通过合理的功耗优化与安全加固设计,在满足协议规范的同时提升用户体验。实际开发中,建议结合具体应用场景(如运动耳机vs.智能音箱)对空闲模式功能进行定制化裁剪。
七、参考资料
-
Advanced Audio Distribution Profile, Version 1.4 or later
相关文章:
【A2DP】深入解读A2DP中通用访问配置文件(GAP)的互操作性要求
目录 一、模式支持要求 1.1 发现模式 1.2 连接模式 1.3 绑定模式 1.4 模式间依赖关系总结 1.5 注意事项 1.6 协议设计深层逻辑 二、安全机制(Security Aspects) 三、空闲模式操作(Idle Mode Procedures) 3.1 支持要求 …...
CUDA编程之内存
CUDA的内存类型有全局内存、共享内存、常量内存、纹理内存、本地内存、寄存器等。我们需要分别了解它们的特点和使用场景。在CUDA编程中,合理利用各种内存类型对性能优化至关重要。 1. 全局内存(Global Memory) 特点:设…...
【Agent实战】货物上架位置推荐助手(RAG方式+结构化prompt(CoT)+API工具结合ChatGPT4o能力Agent项目实践)
本文原创作者:姚瑞南 AI-agent 大模型运营专家,先后任职于美团、猎聘等中大厂AI训练专家和智能运营专家岗;多年人工智能行业智能产品运营及大模型落地经验,拥有AI外呼方向国家专利与PMP项目管理证书。(转载需经授权) 目录 结论 效果图示 1.prompt 2. API工具封…...
ffmpeg面试题整理
1. 基础概念 问题:FFmpeg 是什么?它的核心功能有哪些? 编解码:支持几乎所有音视频格式(如 H.264, AAC, MP3)。转换:在不同容器格式之间转换(如 MP4 → MKV)。流处理&…...
Idea运行项目报错:java.lang.OutOfMemoryError: Java heap space 解决方法
问题描述 Maven构建的时候,一直报错java.lang.OutOfMemoryError: Java heap space 尝试解决 找了几个JAVA高级小伙伴,一起去百度了各种可能,设置内存大小,发现都不行,还不断的重装了IDEA,以为是这个版本…...
解决 Linux /dev/mapper/ubuntu--vg-ubuntu--lv 磁盘空间不足的问题
解决 Linux /dev/mapper/ubuntu–vg-ubuntu–lv 磁盘空间不足的问题 https://blog.csdn.net/weixin_47908992/article/details/139882219 查看LVM卷组的信息 vgdisplay rootubuntu:~# vgdisplay--- Volume group ---VG Name ubuntu-vgSystem ID Fo…...
前端UI编程基础知识:基础三要素(结构→表现→行为)
以下是重新梳理的前端UI编程基础知识体系,结合最新技术趋势与实战要点,以更适合快速掌握的逻辑结构呈现: 一、基础三要素(结构→表现→行为) 1. HTML5 核心能力 • 语义化标签:<header>, <nav&g…...
Trae:与AI结伴,开启编程新体验
Trae:与AI结伴,开启编程新体验 在数字化时代,编程已经成为推动技术发展的核心力量。然而,随着项目复杂度的增加,开发者面临着诸多挑战,例如代码编写效率低下、代码质量难以把控等。如今,Trae作…...
如何用正则表达式爬取古诗文网中的数据(python爬虫)
一、了解正则表达式的基本内容: 什么是正则表达式 正则表达式(Regular Expression,简称 regex)是一种用于匹配字符串的模式。它通过特定的语法规则,可以高效地搜索、替换和提取文本中的特定内容。正则表达式广泛应用于…...
深度学习 Deep Learning 第1章 深度学习简介
第1章 深度学习简介 概述 本章介绍人工智能(AI)和深度学习领域,讨论其历史发展、关键概念和应用。解释深度学习如何从早期的AI和机器学习方法演变而来,以及如何有效解决之前方法无法应对的挑战。 关键概念 1. 人工智能的演变 …...
ByteByteGo学习笔记:通知系统设计
引言 在当今这个信息爆炸的时代,通知系统已经成为了现代应用程序中不可或缺的重要组成部分。无论是突发新闻的即时推送、产品更新的及时告知、促销活动的精准触达,还是用户交互的实时反馈,通知都扮演着至关重要的角色。一个高效、可靠、可扩…...
[设计模式]1_设计模式概览
摘要:设计模式原则、设计模式的划分与简要概括,怎么使用重构获得设计模式并改善代码的坏味道。 本篇作概览与检索用,后续结合源码进行具体模式深入学习。 目录 1、设计模式原理 核心原则(语言无关) 本质原理图 原…...
Python + Qt Designer构建多界面GUI应用程序:Python如何调用多个界面文件
引言 Qt Designer是一个用户友好的图形用户界面设计工具,它可以帮助开发人员通过拖放的方式快速创建界面。在实际开发中,往往需要设计多个界面文件,并在Python代码中进行统一管理和使用。本文将介绍如何在Python中使用Qt Designer设计好的多…...
AGI大模型(7):提示词应用
1 生成数据 LLM具有⽣成连贯⽂本的强⼤能⼒。使⽤有效的提示策略可以引导模型产⽣更好、更⼀致和更真实的响应。LLMs还可以特别有⽤地⽣成数据,这对于运⾏各种实验和评估⾮常有⽤。例如,我们可以使⽤它来为情感分类器⽣成快速样本,如下所示: 提示: ⽣成10个情感分析的范…...
【倒霉bug2025】找不到vc_runtimeMinimum_x64.msi
今天是倒霉的一天,当喉咙痛到无法出门玩耍的我打开steam准备开始玩《冰封世界》时,游戏启动直接报错 在选择安装之后弹出一个经典窗口 然后在C:\ProgramData\PackageCache中找msi到位置点击确定继续报错说msi版本不对 上网一搜,找不到vc_ru…...
什么是强哈希算法pbkdf2(Password-Based Key Derivation Function)
文章目录 什么是pbkdf2使用场景 在线工具 什么是pbkdf2 维基百科:https://zh.wikipedia.org/zh-cn/PBKDF2 PBKDF2(Password-Based Key Derivation Function 2)是一种基于密码的密钥派生函数。它的主要作用是从密码和盐(salt&…...
Python 基础语法详解
一、变量和数据类型 变量 在 Python 中,变量无需声明类型,直接赋值即可。变量名区分大小写。 # 整数类型 age 25 print(age) # 输出:25# 浮点数类型 height 1.75 print(height) # 输出:1.75# 字符串类型 name "张三&…...
AI Agent 时代开幕-Manus AI与OpenAI Agent SDK掀起新风暴
【本周AI新闻: AI Agent 时代开幕-Manus AI与OpenAI Agent SDK掀起新风暴】 https://www.bilibili.com/video/BV1bkQyYCEvQ/?share_sourcecopy_web&vd_source32ed33e1165d68429b2e2eb4749f3f26 最近AI圈子里最火的话题非Manus莫属!这款由中国武汉创业公司“蝴…...
为什么会出现redis数据库?redis是什么?
什么是 Redis? 为什么要用 Redis? 下面我将从 Redis 出现的背景、Redis 的解决方案个来回答。 1、Redis 出现的背景 互联网的应用越来越多,例如社交网络、电商、实时服务发展的十分迅速,这就导致了传统技术栈(如关系型数据库)…...
每日一题---dd爱框框(Java中输入数据过多)
dd爱框框 实例: 输入: 10 20 1 1 6 10 9 3 3 5 3 7 输出: 3 5 这道题要解决Java中输入的数过多时,时间不足的的问题。 应用这个输入模板即可解决: Java中输入大量数据 import java.util.*; import java.io.*;pu…...
Flink-学习路线
最近想学习一下Flink,公司的实时需求还是不少的,因此结合ai整理了一份学习路线,记录一下。 当然,公司也有Scala版本Flink框架,也学习了一下。这里只说Java版本 1. Java基础 目标: 掌握Java编程语言的基础知识。 内容…...
一次Milvus迁移的记录
前言 希望把Linux上生产环境中使用docker compose运行的milvus迁移到本地(mac os)的docker compose中 操作过程 找到了官方有两个相关的项目: https://github.com/zilliztech/milvus-backup https://github.com/zilliztech/vts 但是…我都没用,因为使…...
矩阵的转置
对于的矩阵,使用两个指针变量,可以方便实现(i,j)处元素与(j,i)处元素交换位置。令指针Arow&A[i][0],则Arow[j]可实现对第i行j列元素的访问。令指针Bptr&A[0][i],则*Bptr就可以访问(0,i)处元素,然后,…...
使用 VLOOKUP 和条件格式在 Excel 中查找并标红匹配的串号
使用 VLOOKUP 和条件格式在 Excel 中查找并标红匹配的串号 你的步骤非常详细且清晰,能够帮助用户在 Excel 中通过 VLOOKUP 和条件格式来查找并标红匹配的串号。以下是对你提供的步骤的简要总结和补充说明: 1. 添加“是否匹配”列 在 a.xlsx 中新增一列…...
Python Matplotlib面试题精选及参考答案
目录 绘制函数 y=2x+5 在区间 [1,10] 的折线图,设置标题和坐标轴标签 在同一图中绘制 sin (x) 和 cos (x) 曲线,添加图例和网格线(x∈[0,2π]) 绘制分段函数:当 x<0 时 y=0,x≥0 时 y=x,设置不同线段颜色 绘制带数据点的折线图,使用红色虚线样式和圆形标记(数据…...
在线 SQL 转 SQLAlchemy:一键生成 Python 数据模型
一款高效的在线 SQL 转 SQLAlchemy 工具,支持自动解析 SQL 语句并生成 Python SQLAlchemy 模型代码,适用于数据库管理、后端开发和 ORM 结构映射。无需手写 SQLAlchemy 模型,一键转换 SQL 结构,提升开发效率,简化数据库…...
基于自定义线程池手写一个异步任务管理器
我们在后端执行某些耗时逻辑操作时往往会导致长时间的线程阻塞,在这种情况之下,我们往往会引一条异步线程去处理这些异步任务,如果每次都创建新的线程来处理这些任务,不仅会增加代码冗余,还可能造成线程管理混乱&#…...
基恩士PLC编程小技巧八:脚本过长如何实现换行及替换
基恩士PLC编程小技巧八:脚本过长如何实现换行? 一、问题点 我们在使用基恩士编程软件KV STUDIO 进行脚本编程时,经常遇到这样的问题:脚本的一行过长,程序不好阅读及维护。 IF MR1000 OR MR1001 OR MR1002 OR MR1003 OR…...
每日一题---数组中两个字符串的最小距离
数组中两个字符串的最小距离 给定一个字符串数组strs,再给定两个字符串str1和str2,返回在strs中str1和str2的最小距离,如果str1或str2为null,或不在strs中,返回-1。 链接:数组中两个字符串的最小距离__牛…...
【PTA题目解答】7-1利用STL比较数据大小并排序(15分)c++
1.题目: 2.算法原理 根据题目要求,模拟即可,set容器会帮我们把插入的数自动排序好 题目说输入非整型数据就停止,不用特意判断输入的数据是整型还是非整型,如果用户输入的是字符(例如 a)&#…...
如何用Deepseek制作流程图?
使用Deepseek制作流程图,本质上是让AI根据你的需求,生成相关流程图的代码,然后在流程图编辑器中渲染,类似于Python一样,ChatGPT可以生成代码,但仍需在IDE中执行。 你知道绘制流程图最高效的工具是什么吗&a…...
【09】单片机编程核心技巧:变量赋值,从定义到存储的底层逻辑
【09】单片机编程核心技巧:变量赋值,从定义到存储的底层逻辑 🌟 核心概念 单片机变量的定义与赋值是程序设计的基础,其本质是通过 RAM(随机存储器) 和 ROM(只读存储器) 的协作实现…...
vscode python相对路径的问题
vscode python相对路径的问题 最近使用使用vscode连接wsl2写python时,经常遇到找不到包中的方法的问题,最终发现vscode在执行python代码时目录不是从当前python文件开始算起,而是从当前工作区的目录开始算起,比如说我打开的是/ho…...
C语言中的指针与函数
引言 在C语言编程中,指针是一个非常重要且强大的概念。它不仅帮助我们高效地管理内存,还能提升程序的灵活性和性能。而指针与函数的结合使用,是C语言中非常常见且极具挑战性的一个话题。正确理解和使用指针与函数的关系,不仅能帮助程序员提高代码质量,还能优化程序的执行…...
深度学习-服务器训练SparseDrive过程记录
1、cuda安装 1.1 卸载安装失败的cuda 参考:https://blog.csdn.net/weixin_40826634/article/details/127493809 注意:因为/usr/local/cuda-xx.x/bin/下没有卸载脚本,很可能是apt安装的,所以通过执行下面的命令删除: a…...
理解langchain langgraph 官方文档示例代码中的MemorySaver
以下是langchain v0.3官方示例代码 from langgraph.checkpoint.memory import MemorySaver from langgraph.graph import START, MessagesState, StateGraph# 可以理解为:定义一个流程,这个流程中用到的数据类型是Messages。 <---定义一个有向图&…...
JumpServer基础功能介绍演示
堡垒机可以让运维人员通过统一的平台对设备进行维护,集中的进行权限的管理,同时也会对每个操作进行记录,方便后期的溯源和审查,JumpServer是由飞致云推出的开源堡垒机,通过简单的安装配置即可投入使用,本文…...
Spring @Bean注解使用场景二
bean:最近在写一篇让Successfactors顾问都能搞明白的sso的逻辑的文章,所以一致在研究IAS的saml2.0的协议,希望用代码去解释SP、idp的一些概念,让顾问了解SSO与saml的关系,在github找代码的时候发现一些代码的调用关系很难理解&…...
创业者认知、思辨、成长指南
一、为什么要创业? 1、因为没有家产继承和家庭关系,不能躺平; 比如父母留下了大量的财富,靠钱生钱吃利息,收租,做做投资这些形式,就可以活得很好; 再比如父母或者血亲有资源&#…...
ECharts中Map(地图)样式配置、渐变色生成
前言 ECharts是我们常用的图表控件,功能特别强大,每次使用都要查API比较繁琐,这里就记录开发中常用的配置。 官网:https://echarts.apache.org/handbook/zh/get-started 配置项:https://echarts.apache.org/zh/opti…...
PostgreSQL存储管理体系结构学习笔记2
1.表和元组的组织方式 在PostgreSQL中,同一个表中的元组按照创建顺序依次插入到表文件中。元组之间不进行关联,这样的表文件称之为堆文件。PostgreSQL系统中包含了四种堆文件:普通堆,临时堆,序列,TOAST表。…...
【PTA题目解答】7-3 字符串的全排列(20分)next_permutation
1.题目 给定一个全由小写字母构成的字符串,求它的全排列,按照字典序从小到大输出。 输入格式: 一行,一个字符串,长度不大于8。 输出格式: 输出所有全排列,每行一种排列形式,字典序从小到大。 输入样例…...
SOME/IP:用Python实现协议订阅、Offer、订阅ACK与报文接收
文章目录 前言一、代码层次二、详细代码1. eth_scapy_sd.py2、eth_scapy_someip.py3、network_define.py4、packet_define.py5、unpack_define.py6、someip_controller.py 前言 1、需要pip安装scapy库 2、需要修改根据实际情况配置network_define.py 3、执行someip_controller…...
嵌入式八股ARM篇
前言 ARM篇主要介绍一下寄存器和中断机制,至于汇编这一块…还请大家感兴趣自行学习 1.寄存器 R0 - R3 R4 - R11 寄存器 R0 - R3一般用作函数传参 R4 - R11用来保存程序运算的中间结果或函数的局部变量 在函数调用过程中 注意在发生异常的时候 cortex-M0架构会自动将R0-R3压入…...
剑指 Offer II 087. 复原 IP
comments: true edit_url: https://github.com/doocs/leetcode/edit/main/lcof2/%E5%89%91%E6%8C%87%20Offer%20II%20087.%20%E5%A4%8D%E5%8E%9F%20IP/README.md 剑指 Offer II 087. 复原 IP 题目描述 给定一个只包含数字的字符串 s ,用以表示一个 IP 地址…...
RCE-Labs超详细WP-Level10(无字母命令执行_二进制整数替换)
温馨提示 这关涉及的知识点较多, 写的很长, 中间留了很多错误引导(本人在实验时遇到的问题, 或许你们也会遇到), 在后文才逐步解释源码分析 跟前几关一样, 更改了 WAF 的过滤字段这个关卡, 只有0, 1, (单引号), $, <, \ , ( , )可以用解题分析(实验这些命令, 可以先在自己本…...
数据结构(泛型)
1,装箱 int i 10;Integer j Integer.valueOf(i);2.拆箱 Integer i 10;int j i.intValue(); 3.自动装箱 int i 10;Integer j i;int i 10;Integer j (Integer) i; 4,自动拆箱 Integer i 10;int j i;Integer i 10;int j (int) i; 有一段代码需要解析一下: …...
Android Dagger2 框架辅助工具模块深度剖析(六)
一、引言 在 Android 开发领域,依赖注入(Dependency Injection,简称 DI)作为一种至关重要的设计模式,能显著降低代码间的耦合度,提升代码的可测试性与可维护性。Dagger2 作为一款强大的依赖注入框架&#…...
LVGL第三方库的使用(中文库)
一、第三方库文档 3rd party libraries(第三方库) — LVGL 文档 FreeType 中文字库 SDL 模拟器使用freetype中文字库 1.开启字库 2.安装freetype 字库 sudo apt-get update sudo apt-get install libfreetype6-dev 3.修改makefile 添加字库 4.显示中…...
【愚公系列】《高效使用DeepSeek》009-PPT大纲自动生成
标题详情作者简介愚公搬代码头衔华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,亚马逊技领云博主,51CTO博客专家等。近期荣誉2022年度…...