[WiFi] WiFi 802.1x介绍及EAP认证流程整理
802.1X
Wi-Fi 802.1X 是一种网络访问控制协议,常用于保护无线网络。它提供了一种基于端口的网络访问控制机制,主要用于在用户和网络之间建立安全的连接。以下是 802.1X 的一些关键特点:
认证框架
802.1X 使用 EAP(可扩展认证协议)作为其认证框架,支持多种认证方法,如 EAP-TLS、PEAP 等。
三方模型
802.1X 采用客户端(被称为“请求者”)、认证服务器(如 RADIUS 服务器)和网络设备(如交换机或无线接入点,称为“验证者”)三方模型。
安全性
通过强制用户在访问网络之前进行身份验证,802.1X 提供了增强的安全性,防止未经授权的设备接入网络。
动态密钥管理
在认证过程中,802.1X 可以协商动态加密密钥,用于保护无线通信的机密性和完整性。
广泛应用
802.1X 广泛应用于企业无线网络中,确保只有经过认证的用户和设备才能访问网络资源。
通过使用 802.1X,网络管理员可以有效地管理和保护无线网络,防止未经授权的访问和潜在的安全威胁。
EAP
Wi-Fi EAP(Extensible Authentication Protocol)是一种用于无线网络的认证框架,广泛应用于企业级无线网络中。EAP本身并不是一种认证方法,而是一个支持多种认证方法的框架。以下是一些常见的EAP类型:
EAP-TLS(Transport Layer Security):使用TLS协议进行认证,提供了强大的安全性。需要客户端和服务器都安装证书。
EAP-TTLS(Tunneled Transport Layer Security):类似于EAP-TLS,但只需要服务器端的证书。客户端的认证信息通过一个安全的隧道传输。
PEAP(Protected Extensible Authentication Protocol):由微软、思科和RSA开发,类似于EAP-TTLS,使用TLS隧道保护EAP交换。
EAP-SIM:用于GSM移动网络,通过SIM卡进行认证。
EAP-AKA:用于UMTS网络,通过USIM卡进行认证。
EAP协议的选择通常取决于网络的安全需求和基础设施支持。企业网络通常选择EAP-TLS或PEAP以确保高安全性
802.1X认证过程
802.1X认证
IEEE 802.1x是一种基于端口的网络接入控制技术,该技术提供一个可靠的用户认证和密钥分发的框架,可以控制用户只有在认证通过以后才能连接网络。IEEE 802.1x本身并不提供实际的认证机制,需要和上层认证协议(EAP)配合来实现用户认证和密钥分发。EAP允许无线终端支持不同的认证类型,能与后台 不同的认证服务器进行通信,如远程接入用户服务(Radius)。
Bgate系列AC支持802.1X认证方式,这里以设备端PAE对EAP报文进行中继转发为例,IEEE 802.1X认证系统的基本业务流程如下图所示。
在WLAN网络中,WLAN客户端Station为客户端PAE,提供WLAN服务的设备为设备端PAE。设备端通过产生一个随机Challenge发送给客户端;客户端会使用配置的密钥对该Challenge进行加密处理并将处理后的信息返回设备端;设备端根据客户端返回的加密后的Challenge以及原始的Challenge进行比较判断,设备端完成对客户端的单项认证。
IEEE 802.1X认证系统的EAP方式业务流程
整个802.1x的认证过程可以描述如下
(1) 客户端向接入设备发送一个EAPoL-Start报文,开始802.1x认证接入;
(2) 接入设备向客户端发送EAP-Request/Identity报文,要求客户端将用户名送上来;
(3) 客户端回应一个EAP-Response/Identity给接入设备的请求,其中包括用户名;
(4) 接入设备将EAP-Response/Identity报文封装到RADIUS Access-Request报文中,发送给认证服务器;
(5) 认证服务器产生一个Challenge,通过接入设备将RADIUS Access-Challenge报文发送给客户端,其中包含有EAP-Request/MD5-Challenge;
(6) 接入设备通过EAP-Request/MD5-Challenge发送给客户端,要求客户端进行认证
(7) 客户端收到EAP-Request/MD5-Challenge报文后,将密码和Challenge做MD5算法后的Challenged-Pass-word,在EAP-Response/MD5-Challenge回应给接入设备
(8) 接入设备将Challenge,Challenged Password和用户名一起送到RADIUS服务器,由RADIUS服务器进行认证
(9)RADIUS服务器根据用户信息,做MD5算法,判断用户是否合法,然后回应认证成功/失败报文到接入设备。如果成功,携带协商参数,以及用户的相关业务属性给用户授权。如果认证失败,则流程到此结束;
(10) 如果认证通过,用户通过标准的DHCP协议 (可以是DHCP Relay) ,通过接入设备获取规划的IP地址;
(11) 如果认证通过,接入设备发起计费开始请求给RADIUS用户认证服务器;
(12)RADIUS用户认证服务器回应计费开始请求报文。用户上线完毕。
为了提高WLAN服务的数据安全性,IEEE 802.1X中使用了EAPOL-Key的协商过程,设备端和客户端实现动态密钥协商和管理;同时通过802.1X协商,客户端PAE和设备端PAE协商相同的一个种子密钥PMK,进一步提高了密钥协商的安全性。802.1X支持多种EAP认证方式,其中EAP-TLS为基于用户证书的身份验证。EAP-TLS 是一种相互的身份验证方法,也就是说,客户端和服务器端进行相互身份验证。在EAP-TLS 交换过程中,远程访问客户端发送其用户证书,而远程访问服务器发送其计算机证书。如果其中一个证书未发送或无效,则连接将终断。下图描述了EAP TLS认证方式过程:
EAP TLS认证消息序列图
当EAP TLS认证成功时,客户端PAE和Radius服务器会对应产生公用的对称的Radius Key,Radius服务器会在认证成功消息中将Radius Key通知设备端PAE。客户端PAE和设备端PAE会根据该Radius Key,客户端MAC地址以及设备端MAC地址,产生种子密钥PMK以及对应的索引PMKID。根据IEEE802.11i协议定义的算法,设备端PAE和客户端PAE可以获得相同的PMK,该种子密钥将在密钥协商过程(EAPOL-Key密钥协商)中使用。
- WPA
WPA采用了802.1x和TKIP来实现WLAN的访问控制、密钥管理与数据加密。802.1x是一种基于端口的访问控制标准,用户必须通过了认证并获得授权之后,才能通过端口使用网络资源。TKIP虽然与WEP同样都是基于RC4加密算法,但却引入了4个新算法:
● 扩展的48位初始化向量(IV)和IV顺序规则(IV Sequencing Rules);
● 每包密钥构建机制(per-packet key construction);
● Michael(Message Integrity Code,MIC)消息完整性代码;
● 密钥重新获取和分发机制。
WPA系统在工作的时候,先由AP向外公布自身对WPA的支持,在Beacons、Probe Response等报文中使用新定义的WPA信息元素(Information Element),这些信息元素中包含了AP的安全配置信息(包括加密算法和安全配置等信息)。STA根据收到的信息选择相应的安全配置,并将所选择的安 全配置表示在其发出的Association Request和Re-Association Request报文中。WPA通过这种方式来实现STA(一般为客户端Station)与AP之间的加密算法以及密钥管理方式的协商。
支持WPA的AP工作需要在开放系统认证方式下,STA以WPA模式与AP建立关联之后,如果网络中有RADIUS服务器作为认证服务器,那么 STA就使用802.1x方式进行认证;如果网络中没有RADIUS,STA与AP就会采用预共享密钥(PSK,Pre-Shared Key)的方式。
STA通过了802.1x身份验证之后,AP会得到一个与STA相同的Session Key, AP与STA将该Session Key作为PMK(Pairwise Master Key,对于使用预共享密钥的方式来说,PSK就是PMK)。随后AP与STA通过EAPOL-KEY进行WPA的四次握手(4-Way Handshake)过程,如图2所示。
图2 AP与STA的四次握手 |
在这个过程中,AP和STA均确认了对方是否持有与自己一致的PMK,如不一致,四次握手过程就告失败。为了保证传输的完整性,在握手过程中使 用了名为MIC(Message Integrity Code)的检验码。在四次握手的过程中,AP与STA经过协商计算出一个512位的PTK(Pairwise Transient Key),并将该PTK分解成为五种不同用途的密钥,如图3所示。
图3 PTK的产生过程
其中前128位用做计算和检验EAPOL-KEY报文的MIC的密钥,随后的128位作为加密EAPOL-KEY的密钥;接下来的128位作为 AP与该STA之间通信的加密密钥的基础密钥(即由该密钥再经过一定的计算后得出的密钥作为二者之间的密钥);最后两个64位的密钥分别作为AP与该 STA之间的报文的MIC计算和检验密钥。
由PTK分解出来的这一组(五个)密钥是AP与该STA之间使用的密钥(所以也叫每用户密钥,用于AP与STA之间的单播报文的加密),这些密 钥永远也不会以任何形式出现在无线网络上。在确认双方所持的PMK一致后, AP会根据自身是否支持每用户密钥的能力来指示STA是否安装并使用这个每用户密钥。
为了使现有的设备能够通过软件/固件升级实现WPA,协议规定AP可以不采用PTK方式,而是利用下面将要描述的GTK作为AP向STA发送单 播报文时的密钥。如果AP通知STA安装并使用PTK,那么STA在向AP发送一个EAPOL-KEY相应报文后,再把相应的密钥安装到无线网卡中。
四次握手成功后,AP要生成一个256位的GTK(Group Transient Key),GTK是一组全局加密密钥,所有与该AP建立关联的STA均使用相同的GTK,AP用这个GTK来加密所有与它建立关联的STA的通信报文, STA则使用这个GTK来解密由AP发送的报文并检验其MIC。该密钥可以分解为三种不同用途的密钥, 最前面的128位作为构造全局"每报文密钥"(Per-packet Encryption Key)的基础密钥(Base Key),后面的两个64位的密钥分别作为计算和检验WPA数据报文的MIC的密钥。AP使用EAPOL-KEY加密密钥将GTK加密并发送给STA,并 指明该GTK是否允许STA用作发送报文所使用,STA成功接收到该报文,将GTK解密后,向AP发送应答报文,并根据AP所指示的Key Index将其安装无线网卡的相应位置,如果AP使用GTK作为向某一STA单播传输的密钥,则该STA也需要使用GTK作为向AP发送单播报文的密钥。
TKIP并不直接使用由PTK/GTK分解出来的密钥作为加密报文的密钥,而是将该密钥作为基础密钥(Base Key),经过两个阶段的密钥混合过程,从而生成一个新的每一次报文传输都不一样的密钥,该密钥才是用做直接加密的密钥。 通过这种方式可以进一步增强WLAN的安全性。密钥的生成方式如图4所示。
图4 最终密匙的生成形式 |
在WPA中,AP支持WPA和WEP无线客户端的混合接入。在STA与AP建立关联时,AP可以根据STA的Association Request中是否带有WPA信息元素来确定哪些客户端支持使用WPA。但是在混合接入的时候,所有WPA客户端所使用的加密算法都得使用WEP,这就 降低了无线局域网的整体安全性。
相关文章:
[WiFi] WiFi 802.1x介绍及EAP认证流程整理
802.1X Wi-Fi 802.1X 是一种网络访问控制协议,常用于保护无线网络。它提供了一种基于端口的网络访问控制机制,主要用于在用户和网络之间建立安全的连接。以下是 802.1X 的一些关键特点: 认证框架 802.1X 使用 EAP(可扩展认证协议…...
前端通过new Blob下载文档流(下载zip或excel)
当后端返回这样的预览: 前端该如何下载呢?首先在axios请求里,加入第三个参数{ responseType: ‘blob’ }。 proxy.$post(url, params, { responseType: blob }).then((res)>{downloadFormat(res) });然后在一个函数里处理返回,…...
R 常用的内置软件包及功能介绍
R 中有许多内置包,提供了丰富的功能来帮助用户进行数据分析、统计建模、图形可视化等任务。以下是一些常用的内置包及其功能简介: 1. stats 包 stats 是 R 的一个核心包,几乎每个 R 用户都会使用它。它包含了许多统计分析的函数,…...
基于 HC_SR04的超声波测距数码管显示(智能小车超声波避障部分)
超声波测距模块HC-SR04 1、产品特色 ①典型工作用电压:5V ②超小静态工作电流:小于 5mA ③感应角度(R3 电阻越大,增益越高,探测角度越大): R3 电阻为 392,不大于 15 度 R3 电阻为 472, 不大于 30 度 ④探测距离(R3 电阻可调节增益,即调节探测…...
12月第十九讲:Redis应用Redis相关解决方案
1.数据库与缓存一致性方案 2.热key探测系统处理热key问题 3.缓存大value监控和切分处理方案 4.Redis内存不足强制回收监控告警方案 5.Redis集群缓存雪崩自动探测 限流降级方案 6.缓存击穿的解决方法 线上Redis比较严重的问题排序是:数据库和缓存一致性、热key…...
solon 集成 activemq-client (sdk)
原始状态的 activemq-client sdk 集成非常方便,也更适合定制。就是有些同学,可能对原始接口会比较陌生,会希望有个具体的示例。 <dependency><groupId>org.apache.activemq</groupId><artifactId>activemq-client&l…...
STM32-笔记7-继电器定时开闭
1、复制02项目,重命名08-继电器定时开闭 打开项目工程 在\Drivers\BSP\该路径下,新建alarm文件夹,该文件夹下里面包含alarm.c和alarm.h文件 加载进该项目中 为什么这里使用的是 这个单词,而不是继电器(relay&#…...
B4X编程语言:B4X的映射(数据地图Map)详解
B4X的映射(Map)是由多个键值对组成的数据集合,也称为数据地图。它和列表一样也是一个非可视化的数据容器,在B4X中作为变量使用,用于在单个变量下存储多个键值对。 映射中的键是唯一的。 这意味着,如果您添加了一个键/值对…...
windows C++ 判断文件大小,清空文件,写日志
windows C 判断文件大小,清空文件,写日志等几个常见的接口,记录一下备忘 #include <iostream> #include <vector> #include<Windows.h> #include<string> #include <iostream> #include <sys/types.h> …...
用Python设置Excel工作表的页眉和页脚
在处理和分析数据时,Excel作为一款功能强大的工具,被广泛应用于各个领域。当涉及到打印或分享工作表时,为文档添加专业的页眉和页脚不仅能提升文件的视觉效果,还能提供必要的信息,例如公司标识、日期、文件名或是页码等…...
electron-vite【实战】自定义标题栏【组件封装】(含异形标题栏,指定区域拖拽,窗口置顶,窗口最小化,窗口最大化,取消最大化,隐藏窗口到托盘等)
效果预览 技术要点 透明背景 src/main/index.ts 的 new BrowserWindow 中添加 transparent: true, // 设置窗口背景透明frame: false, // 隐藏窗口边框仅图标和标题部分可拖拽 仅图标和标题部分添加样式 drag .drag {-webkit-app-region: drag; }图标与标题栏的融合 标题栏的…...
MySQL复制问题和解决
目录 环境介绍 一,主库执行delete,从库没有该数据 模拟故障 修复故障 二,主库执行insert,从库已存在该数据 模拟故障 故障恢复 三,主库执行update,从库没有该数据 模拟故障 故障恢复 四…...
Spark和Hive的区别
1 、 Hive Hive 是基于 Hadoop 的数据仓库工具,同时又是查询引擎, Spark SQL 只是取代的 Hive 的查询引擎这一部分,企业可以使用HiveSpark SQL 进行开发。 Hive 的主要工作如下: 把HQL 翻译长 map-reduce 的代码,并…...
Type-C 接口电热毯:开启温暖智能新时代
在当今科技迅猛发展的时代,智能家居产品如同璀璨繁星般点缀着我们的生活,从智能灯光的温馨到温控系统的精准,处处都彰显着科技赋予生活的便捷与舒适。而在这股追求高效与智能化的洪流之中,一款极具创新的电热毯——Type-C 接口电热…...
React 19新特性探索:提升性能与开发者体验
React作为最受欢迎的JavaScript库之一,不断推出新版本以应对日益复杂的应用需求。React 19作为最新的版本,引入了一系列令人兴奋的新特性和改进,旨在进一步提升应用的性能、开发效率和用户体验。 本文将深入探讨React 19的新特性,…...
【数据库】SQL语句基础
【数据库】SQL语句基础 文章目录 【数据库】SQL语句基础一、SQL与数据库二、 SQL语句类型2.1 数据定义语言(DDL)1. 创建数据库:CREATE DATABASE2. 创建表:CREATE TABLE3. 删除表:DROP TABLE4. 修改表结构:A…...
性能】JDK和Jmeter的安装与配置
一、JDK环境配置 1. 下载JDK 官网下载地址:http://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase7-521261.html 选择对应系统的安装包,下载后安装,安装中记录JDK安装的地址,之后一直点击下一…...
Hadoop、Hbase使用Snappy压缩
1. 前期准备 系统环境:centos7.9 配置信息:8C8G100G hadoop和hbase为单节点部署模式 jdk版本jdk1.8.0_361 1.1. 修改系统时间 timedatectl set-timezone <TimeZone> 1.2. 修改主机名以及主机名和IP的映射 vim /etc/hosts #将自己的主机名以及…...
初试Docker
1. 查看版本 docker --version2. 拉取镜像并查看当前存在的镜像 docker pull hello-world查看是否成功拉取到docker docker images在Docker Desktop 可视化查看 3. 删除镜像 docker rmi xxx4. 启动容器 以下命令使用 mysql镜像启动一个容器,参数为以命令行模…...
【Rust自学】4.5. 切片(Slice)
4.5.0. 写在正文之前 这是第四章的最后一篇文章了,在这里也顺便对这章做一个总结: 所有权、借用和切片的概念确保 Rust 程序在编译时的内存安全。 Rust语言让程序员能够以与其他系统编程语言相同的方式控制内存使用情况,但是当数据所有者超…...
番外:ubuntu 下的sqlite3
What Is SQLite? SQLite is a C-language library that implements a small, fast, self-contained, high-reliability, full-featured, SQL database engine. SQLite is the most used database engine in the world ps:SQLite Home Page sqlite3 的安装: user…...
全脐点曲面当且仅当平面或者球面的一部分
S 是全脐点曲面当且仅当 S 是平面或者球面的一部分。 S_\text{ 是全脐点曲面当且仅当 }{S_\text{ 是平面或者球面的一部分。}} S 是全脐点曲面当且仅当 S 是平面或者球面的一部分。 证: 充分性显然,下证必要性。 若 r ( u , v ) r(u,v) r(u,v)是…...
Vue之版本演进
一、引言 Vue.js,发音为 /vjuː/,是一款轻量级的用于构建用户界面的渐进式JavaScript框架。自2014年由前Google工程师尤雨溪(Evan You)发布以来,Vue.js凭借其简洁的API、灵活的组件系统以及高效的性能,迅速…...
四川托普信息技术职业学院教案1
四川托普信息技术职业学院教案 【计科系】 周次 第 1周,第1次课 备 注 章节名称 第1章 XML语言简介 引言 1.1 HTML与标记语言 1.2 XML的来源 1.3 XML的制定目标 1.4 XML概述 1.5 有了HTML了,为什么还要发展XML 1.5.1 HTML的缺点 1.5.2 XML的特点 1.6 X…...
《Java核心技术I》Swing中的边框
边框 BorderFactory静态方法创建边框,凹斜面,凸斜面,蚀刻,直线,蒙版,空白。 边框添加标题,BorderFactory.createTitledBorder 组合边框,BorderFactory.createCompoundBorder JCo…...
xlua中自定义lua文件加载的一种方式
此种方法来自LoxodonFramework,这里只做记录 定义一个LoaderBase类,做一个到CustomLoader的隐式类型转换 public abstract class LoaderBase {protected abstract byte[] Load(ref string fileName);/// <summary>/// 隐式类型转换,将…...
Suno Api V4模型无水印开发「高清音频WAV下载」 —— 「Suno Api系列」第6篇
历史文章 Suno AI API接入 - 将AI音乐接入到自己的产品中,支持120并发任务 Suno Api V4模型无水印开发「灵感模式」 —— 「Suno Api系列」第1篇 Suno Api V4模型无水印开发「自定义模式」 —— 「Suno Api系列」第2篇 Suno Api V4模型无水印开发「AI生成歌词」…...
EE308FZ_Sixth Assignment_Beta Sprint_Sprint Essay1
AssignmentBeta SprintCourseEE308FZ[A] — Software EngineeringClass Link2401_MU_SE_FZURequirementsSixth Assignment——Beta SprintTeam NameFZUGOObjectiveSprint Essay 1_Day1-Day2 (12.11-12.12)Other Reference1. WeChat Mini Program Design Guide 2. Javascript St…...
github如何给本机绑定 ssh密钥(MACOS)
生成 SSH 密钥 如果没有现成的密钥,执行以下命令来生成一个新的 SSH 密钥: ssh-keygen -t rsa -b 4096 -C "替换为你的邮箱" 添加 SSH 密钥到 SSH 代理 在终端中运行以下命令,启动 SSH 代理: eval "$(ssh-agen…...
使用Python实现基于AR的教育应用:打破课堂的墙壁
友友们好! 我的新专栏《Python进阶》正式启动啦!这是一个专为那些渴望提升Python技能的朋友们量身打造的专栏,无论你是已经有一定基础的开发者,还是希望深入挖掘Python潜力的爱好者,这里都将是你不可错过的宝藏。 在这个专栏中,你将会找到: ● 深入解析:每一篇文章都将…...
【数据分析】层次贝叶斯
文章目录 一、 贝叶斯推理二、 层次贝叶斯模型三、 层次贝叶斯的特点四、 数学表述五、推断方法六、应用领域 层次贝叶斯(Hierarchical Bayesian)方法是一种基于贝叶斯推理的统计模型,用于处理具有多个层次结构的数据模型。 它允许我们在同一…...
linux top命令刷新速度的原理
top命令刷新速度的原理 top命令默认会按照一定的时间间隔(通常是3秒)更新系统资源使用情况的显示内容。它通过读取系统的/proc文件系统中的相关文件(如/proc/stat用于CPU信息、/proc/meminfo用于内存信息等)来获取最新的进程和资源…...
bestphp‘s revenge
bestphp’s revenge 知识点 php session反序列化 解题 <?php highlight_file(__FILE__); $b implode; call_user_func($_GET[f], $_POST); //参数二的位置固定为 $_POST 数组,我们很容易便想到利用 extract 函数进行变量覆盖,以便配合后续利用…...
中化信息与枫清科技深化合作:共探“AI+”产业新生态
随着数字化转型的浪潮席卷全球,数据已成为推动创新和经济增长的关键力量。为持续深化数据要素价值挖掘与应用实践,推动打造行业交流平台,驱动产业创新共荣,2024 年 12 月 18 日 -19 日,由中国通信标准化协会主办的“20…...
Java性能测试Benchmark使用总结
如何测量Java代码的性能 在 Java 中,可以使用多种方法来测量一段代码的执行性能。使用 System.currentTimeMillis()是最常见的方法 long startTime System.currentTimeMillis();// 需要测量的代码块 for (int i 0; i < 1000000; i) {// 示例代码 }long endTi…...
完整微服务设计 功能实现
我们将以一个简单的电商系统为例,实现微服务架构,逐步用Java代码详细实现每个模块,并配合注释帮助小白理解。在这个实现中,我们使用以下工具和框架: Spring Boot:用于构建微服务。Spring Cloud:…...
【Java基础面试题025】什么是Java的Integer缓存池?
回答重点 Java的Integer缓存池(Integer Cache)是为了提升性能和节省内存。根据实践发现大部分的数据操作都集中在值比较小的范围,因此缓存这些对象可以减少内存分配和垃圾回收的负担,提升性能 在 -128到127范围内的Integer对象会…...
道可云人工智能元宇宙每日资讯|浙江工商大学发布“人工智能时代创新型人才培养行动计划”
道可云元宇宙每日简报(2024年12月20日)讯,今日元宇宙新鲜事有: 浙江工商大学发布“人工智能时代创新型人才培养行动计划” 12月18日,浙江工商大学发布了《人工智能时代创新型人才培养行动计划》,提出人工…...
树莓派4B 搭建openwrt内置超多插件docker,nas等等使用教程
刷入固件 (想要固件的加我vx wyy7293) bleachwrt-plus-20241112-bcm27xx-bcm2711-rpi-4-squashfs-factory.img上电,并且把网线两头分别插在pi网口上和电脑的网口上(电脑必须断网) 等待网口灯亮,进入192.168.1.1 默认账密 root password 进入系统后更改openwrt的网关地址相关…...
excel 列名是数据表 的字段名 ,单元格的值 是数据表对应字段的值,生成sql插入语句
在 Excel 中,按 Alt F11 打开 VBA 编辑器。在菜单栏选择 插入 -> 模块,在新模块中粘贴以下代码。 VBA 代码 Sub GenerateSQLInsertStatementsToFile()Dim ws As WorksheetDim lastRow As Long, lastCol As Long, i As Long, j As LongDim sql As S…...
【Rust自学】4.3. 所有权与函数
4.3.0 写在正文之前 在学习了Rust的通用编程概念后,就来到了整个Rust的重中之重——所有权,它跟其他语言都不太一样,很多初学者觉得学起来很难。这个章节就旨在让初学者能够完全掌握这个特性。 本章有三小节: 所有权࿱…...
OpenShift 4 - 多云管理(2) - 配置多集群观察功能
《OpenShift / RHEL / DevSecOps 汇总目录》 本文在 OpenShift 4.17 RHACM 2.12 环境中进行验证。 文章目录 多集群观察技术架构安装多集群观察功能监控多集群的运行状态监控多集群的应用运行在被管集群监控应用运行在管理集群监控被管集群的应用运行 参考 多集群观察技术架构…...
【机器学习】机器学习的基本分类-强化学习(Reinforcement Learning, RL)
强化学习(Reinforcement Learning, RL)是一种基于试错的方法,旨在通过智能体与环境的交互,学习能够最大化累积奖励的策略。以下是强化学习的详细介绍。 强化学习的核心概念 智能体(Agent) 执行动作并与环境…...
Docker 设置代理的三种方法(2024年12月19日亲自测试)
Docker 设置代理的三种方法 在 Docker 中设置代理是非常常见的需求,尤其是在某些需要通过代理访问外部资源的网络环境下。本文将介绍三种配置 Docker 使用代理的常见方法:通过 daemon.json 配置镜像加速器、通过 daemon.json 配置 HTTP/HTTPS 代理、以及…...
Pycharm配置Python开发环境
Pycharm配置Python开发环境 在之前的文章中,安装好了Pyhton和Pycharm。 打开Pycharm,如下图 配置完成之后,如下图所示:...
【信息系统项目管理师】高分论文:论信息系统项目的进度管理(一体化智能公共数据平台)
更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 论文1、规划进度管理2、定义活动3、排列活动顺序5、制定进度计划6、控制进度论文 2022年9月,我作为项目经理参加了XX市的一体化智能公共数据平台项目的建设工作,2022年是XX市政府数字化改革的元年,全市上下…...
Chromium CDP 开发(十):Chromium 中增加自己的Domain
1. 引言 在深入了解了 Chromium CDP(Chrome DevTools Protocol)的开发过程之后,接下来我们将探讨如何创建一个自定义的 CDP Domain。通过为特定功能创建自己的 CDP Domain,可以避免对已有的 CDP 进行侵入式修改,从而更…...
《基于 Python 的网页爬虫详细教程》
一、引言 在当今信息时代,从互联网上获取大量有价值的数据对于许多领域的研究和分析至关重要。网页爬虫是一种自动化程序,可以从网页上抓取所需的数据。Python 作为一种强大的编程语言,拥有丰富的库和工具,使得网页爬虫的开发变得…...
前端知识图谱 - JavaScript基础(变量和类型)
变量和类型 1. JavaScript 规定了几种语言类型? JavaScript 语言的每一个值都属于某一种数据类型,它规定了 7 种语言类型。语言类型广泛用于变量、函数参数、表达式、函数返回值等场合,根据最新的语言标准,这 7 种语言类型如下&…...
五十个网络安全学习项目——(九)无线网络安全分析
五十个网络安全学习项目——(九)无线网络安全分析 这个系列灵感来源是:50个网络安全项目创意:覆盖新手至专家级,本人打算把这些项目都做一遍,做好记录,也算是对自己的提升。 本文将对WAPI 协议…...