ACl访问控制列表
ACL的原理
ACL也称为访问控制列表,主要有包过滤的功能,同时也是包过滤防火前的本质
其方式主要是定立规则,这些规则控制着数据包的允许或者通过
ACL的场景
如下图,在全网互通的情况下,控制特定的数据包走向
例如控制PC1可以访问R1,但是PC2不能去访问R1
ACL的列表
ACL是一个列表,在这个列表中可以有很多条语句,而不只一跳
而ACL是被调用在接口下的,既然是调用在接口下,那么就有两个方向,出接口和入接口
那么我们如何去执行ACL呢?
1、为了控制特定的流量,所以我们先要去匹配特定流量信息,如上述例子,要求PC1不能访问R1,所以我们就先需要去匹配PC2的流量信息
而匹配流量的方式,主要是通过三层的IP报头和四层的port报头进行匹配
2、定义匹配后的动作,相当于捕捉到流量之后,我们就对这些流量进行一定的操作,如允许或者拒绝它们通过
ACL的通配符/反掩码
ACL的通配符,也被叫做反掩码
反掩码,顾名思义,就是将正掩码反过来,如正掩码为255.255.255.0,则反掩码为0.0.0.255
而通配符/反掩码的作用主要是用于匹配最终的IP网络地址
如IP:192.168.0.1+反掩码:0.0.0.255=最终IP网络地址为192.168.0.0/24这个网络地址
事实上,我们判断是否匹配,只需要记住0为匹配,1为不匹配即可,即0匹不1
还是上述的例子,IP:192.168.0.1+反掩码:0.0.0.255
前三位转换成二进制都是0,说明其对应的十进制必须要要匹配,即192.168.0是已经被固定下来了
而255转换成二进制都是1,说明IP地址十进制中第四位是不需要匹配的,是什么数都可以
所以在这个例子中,如果有一个IP地址想要进行匹配,只需要比较是十进制的前三位,二进制的前24位即可
上述就是IP+反掩码匹配的过程
如下练习
反掩码 | 二进制比较的位数 |
---|---|
0.0.0.255 | 比较前24位 |
0.0.3.255 | 比较前22位 |
0.0.0.0 | 这个比较特殊,是一个精确IP地址匹配,也就是只有一个IP地址能够进行匹配 |
255.255.255.255 | 与上一个相反的是,这个反掩码几乎匹配的是任何的IP地址,随便哪个IP地址都可以 |
奇偶匹配
我们通过观察一个例子,来发现奇偶匹配的神奇之处
十进制 | 二进制 |
---|---|
1 | 0001 |
2 | 0010 |
3 | 0011 |
4 | 0100 |
5 | 0101 |
6 | 0110 |
7 | 0111 |
8 | 1000 |
在上述的二进制转十进制中,我们可以发现奇数转换成二进制后末位为1,偶数转换成二进制后末位为0
在我们的子网掩码计算中,通常都是n个2的n次方相加,但是除了2的0次方外,其它的都是偶数
根据偶+0=偶和偶+奇=奇的原则,我们就可以得出以下结论
在我们面对254,255等数字时,我们可以直接通过判读该数字的奇偶性就能看出其二进制末尾是0还是为1
如果将奇偶匹配与反掩码匹配网络IP地址相结合的话
举一个例子,一个数字为254,将254转换成二进制后为11111110
可以看到如果反掩码中出现254,则说明在与其相对应的十进制转二进制中,只需要末尾相同即可
例如,十进制为11,反掩码为254。因为将11是一个奇数,所以末尾一定为2的0次方,即可以匹配所有的奇数,如13、15等
在如十进制为10,反掩码为254。因为10是一个偶数,所以末尾一定为2的1次方,即可以匹配所有的偶数,如20、22等
还是那句话,反掩码只是用来匹配网络IP地址的,不能代表其它东西,不要想太多
举个大例子,IP为192.168.11.10反掩码为0.0.254.255,问:匹配哪些网络IP地址
反掩码的前两位我们已经知道是0.0了,由此可知,192.168是固定不变的,而通过上述内容我们可以得知254这个反掩码表示只需要匹配二进制的最后一位
而对应的11是一个奇数,所以11二进制的最后一位必然是为1,由此得知上述IP+反掩码可以匹配192.168.X.Y,X代表0255任意的奇数,Y代表0255任意的数字
ACL的ACE
在ACL中,可以存在读个表项/语句,而每条语句都被称为ACE,换句话说,ACL就是由一个或多个ACL产生的
ACL的顺序是自上而下的,一旦ACL中的某条ACE被匹配成功,那么就会跳出这个ACL然后去执行相应的动作
需要注意的是,在所有的ACE最后,默认有一条ACE为:deny any any(但不会显示出来)
ACE所对应的规则有只有两种,1、permit,2、deny
举个例子:permit 172.16.0.0 0.0.0.255 和 deny 172.16.0.1 0.0.0.0
经过上面的学习,我们可以轻松的得知,这个ACL分别表示允许172.16.0.0/24这个网络地址段的IP和拒绝172.16.0.1这一个IP
但这是个ACL,需要将两者结合起来考虑,所以这整个ACL的含义,还需另作打算
1、因为ACL的顺序是自上而下的,所以一旦匹配到permit 172.16.0.0 0.0.0.255就会跳出这个ACL,导致后面的deny 172.16.0.1 0.0.0.0不再生效
我们总结出,在书写ACL规则时,需要先写小范围后写大范围
即先deny 172.16.0.1 0.0.0.0 再写 172.16.0.0 0.0.0.255
ACL书写格式:(标准)
R1(config)#ip access-list standard 1
R1(config-std-nacl)#10 permit 192.168.1.0 0.0.0.255
R1(config-std-nacl)#20 deny 192.168.2.0 0.0.0.255
ACL的类型
ACL主要有两种类型,1、标准ACL(standard),2、扩展ACL(extended)
它们两者的相同点都是permit或者deny作为处理动作
不同点是,标准ACL是基于源IP的。扩展ACL是基于源IP、目的IP以及端口号的
例如,标准ACL只能拒绝来自192.168.1.0/24的信息。而扩展ACL却可以拒绝192.168.1.0/24发给192.168.2.1的80端口的信息
由此可见,扩展ACL更加灵活一点
除此之外,还有MAC扩展ACL:原理是基于源MAC和目的MAC
而MAC扩展ACL的使用地点就需要涉及到一个问题了:data–>二层–>三层,在数据包经过二层和三层的时候,MAC地址是否改变
答案是二层不变,但三层变。原因是二层就是通过MAC地址进行转发的,自然不会改变
而三层却因为要进行逐条转发从而变换MAC地址
所以由此得出结论,MAC扩展ACL更加适用广播域内,但现在通常对网络进行标识的时候通常是使用的IP地址
另外还有专家级ACL,这是一种更加高级的ACL,它可以定义到数据包中的具体内容,例如一个数据包中的前80bit的内容
标准acl格式,主要通过standard关键字来标识
扩展acl格式,主要是通过extended关键字来标识,可以匹配的东西也比标准acl多
ACL的命名
ACL主要有两种命名方式
1、数字命名的方式,199和13001999为标识标准ACL的编号,100199和20001699为扩展ACL的编号
2、自定义命名,自定义的名称通常是为了命名一些有意义的名称,如拒绝VLAN10,则命名为DENY_VLAN10
关于host和反掩码0.0.0.0的等价匹配,如下,下面是两条不同语句的ACE
R1(config-std-nacl)#10 deny 192.168.1.10 0.0.0.0
R1(config-std-nacl)#20 deny host 192.168.1.10
The entry is existed or the sequence number has been allocated
但它们代表的意思都是精确匹配192.168.1.10这一个IP地址,如果这样配置的话,将会提示“该条目已存在或序列号已分配”
而在书写ACE的时候,一定要注意,一个ACL中必须要有一个permit语句,如下,一个全部为deny语句的ACL是一个无意义的ACL
在书写ACE的时候,我们要时刻谨记着有一条默认存在但不显示的ACE为deny any any
上述的内容很明显,我们是想要仅仅拒绝192.168.1.0/24和192.168.2.0/24这两个网段的地址,但这样做的结果会使得所有路由都被拒绝了
想要避免这样的问题,就必须在所有ACE的末尾加上一条permit any any ,使得permit any any生效后就直接跳出ACL,从而避免了deny any any,标准ACL则是permit any,因为标准ACL是基于源地址的
还有一种情况,对于扩展ACL,当涉及到端口而不是网络IP地址的时候,我们就不再是permit ip了,而是permit tcp了
ACL应用的位置
我们的ACL是应用在接口上的,既然是接口,那么就要区分ACL是在接口的入方向,还是出方向
我们可以通过数据包的来源来判断是数据包的出还是入方向
例如,拒绝PC1到PC2,则数据包开始的流向是从左到右的,可以很明显的看出是在SW1接口g0/1的入方向或是g0/0/的出方向,亦或是R1接口g0/0的入方向或g0/1的出方向
而接口类型也不仅限与是g0/1或g0/0这一类的物理接口,也可以是SVI接口
在不同的情况下在不同的设备上启用ACL,如下图,SW1是接入交换机,SW2是汇聚交换机
这时就需要看PC1和PC2之间的关系
1、PC1和PC2是VLAN内的关系时,只需要在SW1接入交换机上开启ACL即可
2、PC1和PC2是VLAN间的关系的时候,需要在SW2汇聚交换机上开启ACL了
如下例子,要求仅禁止PC1去访问PC2,应该将标准/扩展ACL放在哪个路由器上哪个端口上哪个方向(PC1:192.168.1.1,PC2:192.168.2.1)
1、首先是标准ACL,我们先分析ACL的语句一定是deny 192.168.1.1 0.0.0.0,如果放在R1处呢?
deny 192.168.1.1 0.0.0.0,将这条ACL放在R1处则会导致PC1访问不了PC2,但同时PC1也访问不了外网,偏离我们原本的计划
如果放在R2处?其实这样子就恰到好处,并且是将ACL应用到R2的g0/0的出方向
2、其次我们来讨论一下如果是扩展ACL应该怎么办,扩展ACL的语句是permit ip host 192.168.1.1 host 192.168.2.1
仔细一想,扩展ACL这么精确,实际上放那一台路由器都是可以的,所以为了节省路由器不必要的资源开销,我们可以选择放在R1上
这样就避免了R2和R3的资源开销,并且我们是选择应用在R1的g0/1的出方向
由此我们得出一个结论
1、如果是标准ACL,那么应该放在离目的设备近的地方
2、如果是扩展ACL,那么应该放在离源设备近的地方
下面我们来几个ACL语句练习,如下图
1、要求拒绝人力部访问财务部
在G2的出方向上deny 172.16.3.0 0.0.0.255
但仅仅有这个是不够的,还记得我们提到过的,一个ACL必须有一个permit的语句,所以我们这种做法不仅仅使人力部访问不到财务部了,连IT部也无法访问到财务部了
所以还要加一条ACE为permit any any
2、只允许172.16.3.1访问财务部
在G2的出方向上permit host 172.16.3.1即可
ACL的实际应用
ACL在实际生产环境中,可以防止病毒的传播,因为病毒的产生不可怕,最可怕的是病毒的传播能力强
如永恒之蓝就是从tcp的445端口进行渗透的
还可规定基于时间的ACL,其主要作用是使ACL在特定的时间生效
而这个基于时间的ACL分为两种,1、绝对时间段(absolute),2、周期时间段(periodic)
1、绝对时间段,是定义一个绝对的时间,使ACL在这个时间段内生效
2、周期时间段,定义了一个循环往复的时间段,使ACL过一段时间又再次生效
配置基于时间的ACL主要分为两个步骤
1、需要先使用time-range WORD定义一个时间组,在这里就可以区分出时间组的类型是absolute和periodic
2、定义完时间段后,需要在ACL上调用这个时间组
如下,定义1:仅在工作日的早上9点到下午18点提供192.168.1.10访问,其它时间不能访问(周期时间段)
定义2:仅在2021年7月28日早上9点到12点提供192.168.1.20访问,其它时间不能访问(绝对时间段)
R3(config)#time-range work_time //定义时间组
R3(config-time-range)#absolute start 9:00 28 july 2021 end 12:00 28 july 2021 //定义1
R3(config-time-range)#periodic weekdays 9:00 to 18:00 //定义2
R3(config)#ip access-list standard 1
R3(config-std-nacl)#10 permit host 192.168.1.10 time-range work_time //将接口调用到ACL上
R3(config-std-nacl)#ex
R3(config)#int g0/0
R3(config-if-GigabitEthernet 0/0)#ip access-group 1 in //将ACL调用到接口g0/0的入方向
ACL实验
实验topo如下
前提要求:使用OSPF,要求全网贯通
PC1上
VPCS> ip 192.168.1.10 255.255.255.0 192.168.1.1
PC2上
VPCS> ip 192.168.4.10 255.255.255.0 192.168.4.1
R1上
Ruijie>en
Ruijie#conf
Ruijie(config)#hostname R1
R1(config)#int g0/0
R1(config-if-GigabitEthernet 0/0)#no switchport
R1(config-if-GigabitEthernet 0/0)#ip address 192.168.1.1 24
R1(config-if-GigabitEthernet 0/0)#int g0/1
R1(config-if-GigabitEthernet 0/1)#no switchport
R1(config-if-GigabitEthernet 0/1)#ip add 192.168.2.1 24
R1(config-if-GigabitEthernet 0/1)#ex
R1(config)#router ospf 1
R1(config-router)#network 192.168.1.0 0.0.0.255 area 0
R1(config-router)#network 192.168.2.0 0.0.0.255 area 0
R3上
Ruijie>en
Ruijie#conf
Ruijie(config)#hostname R3
R3(config)#int g0/0
R3(config-if-GigabitEthernet 0/0)#no switchport
R3(config-if-GigabitEthernet 0/0)#ip add 192.168.2.2 24
R3(config-if-GigabitEthernet 0/0)#int g0/1
R3(config-if-GigabitEthernet 0/1)#no switchport
R3(config-if-GigabitEthernet 0/1)#ip add 192.168.3.1 24
R3(config-if-GigabitEthernet 0/1)#ex
R3(config)#router ospf 1
R3(config-router)#network 192.168.2.0 0.0.0.255 area 0
R3(config-router)#network 192.168.3.0 0.0.0.255 area 0
R3(config-router)#ex
R2上
Ruijie>en
Ruijie#conf
Ruijie(config)#hostname R2
R2(config)#int g0/1
R2(config-if-GigabitEthernet 0/1)#no switchport
R2(config-if-GigabitEthernet 0/1)#ip add 192.168.3.2 24
R2(config-if-GigabitEthernet 0/1)#int g0/0
R2(config-if-GigabitEthernet 0/0)#no sw
R2(config-if-GigabitEthernet 0/0)#ip add 192.168.4.1 24
R2(config-if-GigabitEthernet 0/0)#ex
R2(config)#router ospf 1
R2(config-router)#network 192.168.3.0 0.0.0.255 area 0
R2(config-router)#network 192.168.4.0 0.0.0.255 area 0
要求1:使用标准ACL达到拒绝PC1访问PC2的目的
在R2上创建ACL,创建ACL时,不一定非要进入ACL的视图内,也可以像ACL1这样在全局模式下配置ACL
但无论是在哪里配置ACL,ACL1和ACL2都是表示相同含义的
ACL1
R2(config)#access-list 1 deny host 192.168.1.10
R2(config)#access-list 1 permit any
ACL2
R2(config)#ip access-list standard 1
R2(config-std-nacl)#10 deny host 192.168.1.10
R2(config-std-nacl)#20 permit any
而若是想删除掉某一个ACE,如删除掉inedx为20的ACE,则只需要在ACL视图内,输入no 20的命令即可删除
随后我们就需要将ACL应用在接口上和决定出/入方向,g0/1的in方向和g0/0的out方向二者选其一即可
R2(config)#int g0/0
R2(config-if-GigabitEthernet 0/0)#ip access-group 1 out
此时会达到一个PC1ping不同PC2,但是R1却ping的通PC2的现象
要求2:配置标准ACL,只允许PC1访问PC2,这里面有一个隐含信息,按要求来说,此时R1是访问不了PC2的
还是在R2上
在这个要求中,我们可以借助在ACL中存在的那条deny any any 来帮助我们达到这个目的,只允许PC1通过
R2(config)#no access-list 1 //先删掉ACL1避免影响新ACL的效果
R2(config)#access-list 2 permit host 192.168.1.10
此时我们就要考虑一下,到底应该将ACL放在哪个端口
如果放在g0/1端口上,我们就要面临着一个问题,因为我们在入接口上设置了ACL,将会禁止其路由信息通过,最终导致OSPF的邻居关系断开
从下图中我们可以看到,当ACL应用在g0/1的in方向后,OSPF邻居关系就被断开了
R2(config)#int g0/1
R2(config-if-GigabitEthernet 0/1)#ip access-group 2 in
综上所述,我们最好还是将ACL应用在R2的g0/0的out方向
R2(config)#int g0/2
R2(config-if-GigabitEthernet 0/2)#ip access-group 2 out
此时的现象为PC1ping的通PC2,但R1ping不同PC2
要求3:使用扩展ACL,拒绝R1telentR2,但是R1可以ping(icmp)通R2
既然是使用扩展ACL,按照我们原则来说,就需要将扩展ACL定义在R1上
先把R2的ACL删除,避免影响要求3的效果
其中在配置如telent这一类应用时,通常是将端口和应用的关系绑定起来,如下图ACL中端口的范围也是有讲究的
关键字 | 含义 |
---|---|
eq | 等于某端口号(port) |
gt | 大于某port |
lt | 小于某port |
neq | 反选port |
range | port的范围 |
我们还可以看到,可以用具体的端口数值来表示应用,一些简单的应用(如www,telnet等)可以直接输入具体的名称来匹配
并且一定要注意,一旦涉及到应用之间的通信,ACL中就需要通过tcp或udp来匹配,而不是ip
R1上
R1(config-ext-nacl)#deny tcp host 192.168.2.1 host 192.168.3.2 eq telnet
R1(config-ext-nacl)#permit ip any any
应用在R1的g0/1的out方向上
R1(config)#int g0/1
R1(config-if-GigabitEthernet 0/1)#ip access-group 101 out
从上图结果看,我们已经达到不能telnet但能ping通R3的目的了
那么我们可以想一下,怎么样才能telnet,但不能ping通R2呢?提示一下ping的协议时icmp
来匹配
[外链图片转存中…(img-ldxoOygH-1734930411759)]
并且一定要注意,一旦涉及到应用之间的通信,ACL中就需要通过tcp或udp来匹配,而不是ip
R1上
R1(config-ext-nacl)#deny tcp host 192.168.2.1 host 192.168.3.2 eq telnet
R1(config-ext-nacl)#permit ip any any
应用在R1的g0/1的out方向上
R1(config)#int g0/1
R1(config-if-GigabitEthernet 0/1)#ip access-group 101 out
[外链图片转存中…(img-fYUXqTuW-1734930411759)]
从上图结果看,我们已经达到不能telnet但能ping通R3的目的了
那么我们可以想一下,怎么样才能telnet,但不能ping通R2呢?提示一下ping的协议时icmp
相关文章:
ACl访问控制列表
ACL的原理 ACL也称为访问控制列表,主要有包过滤的功能,同时也是包过滤防火前的本质 其方式主要是定立规则,这些规则控制着数据包的允许或者通过 ACL的场景 如下图,在全网互通的情况下,控制特定的数据包走向 例如控…...
android 用户空间切换流程
在Android开发中,创建和切换用户是一个重要的功能,特别是在需要多用户支持的应用中,下面讲述一下用户切换的流程。 一、CarUserManager.java 准备创建新用户,可以减少真正创建用户的时间 @RequiresPermission(anyOf = {Manifest.permission.MANAGE_USERS,Manifest.permis…...
突破续航瓶颈:数字样机技术引领新能源汽车复合制动新方向
随着我国经济快速发展和人民生活水平不断提升,汽车保有量截至2023年9月底就已达到了3.3亿,同比增长6.32%。庞大的汽车保有量对我国的环境和能源都产生了巨大的压力,具备节能环保优势的新能源汽车对于有效解决环境恶化和能源危机问题具有重要意…...
51单片机仿真摇号抽奖机源程序 12864液晶显示
资料下载地址:51单片机仿真摇号抽奖机源程序12864液晶显示仿真程序 一、功能介绍 单片机连接12864(st7920)液晶显示器和1个按键接INT0,模拟一个抽奖机。 实现效果: 1、液晶初始显示“祝你好运!”ÿ…...
路由器的原理
✍作者:柒烨带你飞 💪格言:生活的情况越艰难,我越感到自己更坚强;我这个人走得很慢,但我从不后退。 📜系列专栏:网路安全入门系列 目录 路由器的原理一,路由器基础及相关…...
Vue(四)
1.Vuex 1.1 Vuex是什么 Vuex 是一个插件,可以帮我们管理 Vue 通用的数据。例如:购物车数据、个人信息数据。 1.2 vuex的使用 1.安装 vuex 安装 vuex 与 vue-router 类似,vuex 是一个独立存在的插件,如果脚手架初始化没有选 v…...
今日总结 2024-12-23
项目初始化 拉取代码与环境配置: 难点:Git 命令不熟悉,依赖文件定位不准,启动脚本含义不明。解决办法:系统学习 Git 基础操作,如通过官方文档、优质的 Git 教程视频,反复练习克隆、分支切换等常…...
Vue常用指令
1. 插值表达式 {{}} <script setup> let msg="hello vue!" </script> <template> <h1>{{ msg }}--{{ 1+1 }}--{{ msg+sb }}</h1> </template> 2. Vue 常用指令 (以v- 开头) 2.1 v-html 替换标签元素内容,包含标签…...
欢乐力扣1-10
文章目录 前言1、合并两个有序数组1.1.描述 2、移除元素2.1.描述2.2.思路 3、删除有序数组中的重复元素3.1.描述3.2.思路 4、输出有序数组中的重复项二4.1.描述4.2.思路 5、多数元素5.1.描述5.2.思路 6、轮转数组6.1.描述6.2.思路 7、买卖股票最佳时机一7.1.思路 8、买卖股票最…...
[创业之路-204]:《华为战略管理法-DSTE实战体系》- 5-平衡记分卡绩效管理
目录 一、平衡计分卡概述 1、平衡计分卡的基本概念 2、平衡计分卡的发展阶段 3、平衡计分卡在华为的应用 4、平衡计分卡的优缺点 五、财务(股东)、顾客(用户)、内部运营(内部)及学习与发展࿰…...
算法设计期末复习
文章目录 1. 什么是算法,算法有哪些特征,算法设计的基本步骤,算法的时间复杂度的确定2. 什么是算法分析,算法分析的主要内容是什么?怎么确定算法的时间复杂度?3. 什么是分治算法,分治算法通常用…...
芝法酱学习笔记(2.2)——sql性能优化2
一、前言 在上一节中,我们使用实验的方式,验证了销售单报表的一些sql性能优化的猜想。但实验结果出乎我们的意料,首先是时间查询使用char和datetime相比,char可能更快,使用bigint(转为秒)和cha…...
Linux 安装 nvm
Linux 安装 nvm 网上用curl命令安装的方式都下载不成功,直接使用压缩包安装 ####### wget https://github.com/nvm-sh/nvm/archive/refs/tags/v0.39.1.tar.gz mkdir -p /root/.nvm tar xvf nvm-0.39.1.tar.gz -C /root/.nvm#######vi ~/.bashrc,在~/.bashrc的末尾…...
图像处理基础 | 查看两张图像的亮度差异,Y通道相减
两张图像的Y通道相减通常用于图像差异分析或比较,尤其是在亮度方面。具体来说,这一操作是基于YCbCr颜色空间中的Y通道进行的,其中Y通道代表图像的亮度信息(亮度成分),而Cb和Cr通道分别代表色度成分…...
机器学习-43-可解释性机器学习库LIME
文章目录 1 LIME1.1 LIME的特点1.2 LIME的步骤2 应用LIME2.1 分类模型2.1.1 创建模型和解释器2.1.2 解释样本2.2 回归模型2.2.1 创建模型和解释器2.2.2 解释样本2.3 文本模型2.3.1 创建模型和解释器2.3.2 解释样本2.4 图像模型2.4.1 创建模型和解释器2.4.2 解释样本3 附录3.1 l…...
RestTemplate关于https的使用详解
RestTemplate关于https的使用详解 一、restTemplate注入到bean里面。 Configuration public class RestTempleConfig {BeanPrimarypublic RestTemplate restTemplate() {return new RestTemplate();}/*** https 请求的 restTemplate* return* throws Exception*/Beanpublic R…...
【23种设计模式·全精解析 | 行为型模式篇】11种行为型模式的结构概述、案例实现、优缺点、扩展对比、使用场景、源码解析
Hiヽ(゜▽゜ )-欢迎来到蓝染Aizen的CSDN博客~ 🔥 博客主页: 【✨蓝染 の Blog😘】 💖感谢大家点赞👍 收藏⭐ 评论✍ 文章目录 行为型模式1、模板方法模式(1)概述(2&…...
CNN、RNN、LSTM和Transformer之间的区别和联系
文章目录 CNN、RNN、LSTM和Transformer之间的区别和联系前言CNN(卷积神经网络)RNN(循环神经网络)LSTM(长短期记忆网络)Transformer四者之间的联系与区别Yolo算法简介Yolo和CNN的关系YOLO各版本 CNN、RNN、L…...
sqlite3,一个轻量级的 C++ 数据库库!
宝子们,今天咱来唠唠 sqlite3 这个超棒的轻量级 C 数据库库。它就像是一个小巧但功能齐全的“数据仓库”,能帮咱们轻松地存储、查询和管理数据,无论是开发小型的桌面应用,还是做一些简单的数据处理程序,它都能派上大用…...
重温设计模式--观察者模式
文章目录 观察者模式(Observer Pattern)概述观察者模式UML图作用:实现对象间的解耦支持一对多的依赖关系易于维护和扩展 观察者模式的结构抽象主题(Subject):具体主题(Concrete Subject…...
基于Java+Swing+Mysql的超市客户关系管理系统
基于JavaSwingMysql的超市客户关系管理系统 一、系统介绍二、效果展示三、其他系统实现四、获取源码 一、系统介绍 系统实现管理员对客户信息进行增删改查,信息包括客户编号,姓名,手机号,会员评级;可以对客户消费记录…...
JavaWeb Servlet的反射优化、Dispatcher优化、视图(重定向)优化、方法参数值获取优化
目录 1. 背景2. 实现2.1 pom.xml2.2 FruitController.java2.3 DispatcherServlet.java2.4 applicationContext.xml 3. 测试 1. 背景 前面我们做了Servlet的一个案例。但是存在很多问题,现在我们要做优化,优化的步骤如下: 每个Fruit请求都需…...
基础I/O -> 如何谈文件与文件系统?
文件的基础理解 空文件也要在磁盘上占据空间。文件 文件内容文件属性。文件操作 对内容的操作 对属性的操作或者是对内容和属性的操作。标定一个文件,必须使用:文件路径 文件名(具有唯一性)。如果没有指明对应的文件路径&…...
安装配置git
1、下载git:https://git-scm.com 2、配置git,进入git bash #配置用户名 git config-global user.name "petter7226" #配置邮箱 git config-global user.email "894266014qq.com" 3、配置ssh免密登录 可参考这个文档 https://gitee.com/help/article…...
cad学习 day4 day5
平面布置 客厅平面布置 端景柜: 一般玄关区域、走廊、过道尽头做造型端景柜,可以组展示、柜体、艺术品陈设窗帘盒 200mm 电动窗帘盒 250mm, 镜像命令: MI 做对称使用沙发: 归类FF - 移动家私木门: 归类FF - 平面内门地台床: 使用bo快速生成, 绘制后外围偏移O 50mm pl连接作为灯…...
Java的基础概念(一)
一、注释 **注意!:**注释内容不会参与编译和运行,仅仅是对代码的解释说明。 Java支持单行注释、多行注释、文档注释。 单行注释 以//开头 ,格式【 //注释内容 】 例子如下: 多行注释 格式【 / 注释内容 / 】 例…...
Qt5 cmake引用private头文件
Qt5 cmake引用private头文件 如何引用Qt的qzipreader_p.h头文件 、xlsxzipreader_p.h头文件 使用 target_include_directories target_include_directories(TestQtXlsx PRIVATE${Qt${QT_VERSION_MAJOR}Gui_PRIVATE_INCLUDE_DIRS}${Qt${QT_VERSION_MAJOR}Xlsx_PRIVATE_INCLUD…...
重温设计模式--代理、中介者、适配器模式的异同
文章目录 1、相同点2、不同点 1、相同点 目的都是为了更好地处理对象之间的关系:这三种模式都是在软件设计中用于处理对象之间的关联和交互,以达到优化系统结构、增强可维护性等目的。它们都在一定程度上隐藏了对象之间的某些细节或者复杂性,…...
拦截器魔法:Spring MVC中的防重放守护者
目录 简介HandlerInterceptorAdapter vs HandlerInterceptor创建一个防重放拦截器注册拦截器路径模式匹配适配器模式的魅力总结 简介 在构建安全可靠的Web应用程序时,防止请求重放攻击是一项关键任务。当用户或系统发出的请求被恶意第三方捕获并重复发送给服务器…...
MVC 发布
关于MVC发布,我为您整理了以下信息: SpringMVC发布:SpringMVC是Spring框架的一部分,它基于MVC架构,具有解耦合、轻量级和对注解的广泛支持等优点。发布SpringMVC项目通常涉及配置中央调度器、编写控制器类和设置视图解…...
AI在传统周公解梦中的技术实践与应用
本文深入探讨了人工智能在传统周公解梦领域的技术实践与应用。首先介绍了传统周公解梦的背景与局限性,随后详细阐述了 AI 技术如何应用于梦境数据的采集、整理与分析,包括自然语言处理技术对梦境描述的理解,机器学习算法构建解梦模型以及深度…...
Go怎么做性能优化工具篇之基准测试
一、什么是基准测试(Benchmark) 在 Go 中,基准测试是通过创建以 Benchmark 开头的函数,并接收一个 *testing.B 类型的参数来实现的。testing.B 提供了控制基准测试执行的接口,比如设置测试执行的次数、记录每次执行的…...
社区管理系统:实现社区信息数字化管理的实践
3.1可行性分析 开发者在进行开发系统之前,都需要进行可行性分析,保证该系统能够被成功开发出来。 3.1.1技术可行性 开发该社区管理系统所采用的技术是vue和MYSQL数据库。计算机专业的学生在学校期间已经比较系统的学习了很多编程方面的知识,同…...
Java设计模式 —— 【结构型模式】外观模式详解
文章目录 概述结构案例实现优缺点 概述 外观模式又名门面模式,是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式。该模式对外有一个统一接口,外部应用程序不用关心内部子系统的具体的细节,这…...
基于 Python 的二手电子设备交易平台
标题:基于 Python 的二手电子设备交易平台 内容:1.摘要 基于 Python 的二手电子设备交易平台的摘要:本文介绍了一个基于 Python 的二手电子设备交易平台。该平台旨在为用户提供一个便捷、安全的交易环境,促进二手电子设备的流通和再利用。文章首先介绍了…...
Vue.js组件开发-插槽(Slots)的使用
插槽(Slots)是 Vue.js 中一个非常强大的特性,允许在组件内部指定可重用的内容片段,这些内容片段可以由父组件动态地填充。它能够让父组件决定组件内部应该渲染什么内容。 默认插槽 默认插槽是最简单的插槽类型。在子组件的模板中…...
python:面向对象简单示例
编写 se2ball.py 如下 # -*- coding: utf-8 -*- """ python 面向对象简单示例 """ import randomclass Random_ball(object):""" 随机选双色球 """def __init__(self, reds33, blues16):""" 初始…...
Stealthy Attack on Large Language Model based Recommendation
传统RS依赖id信息进行推荐,攻击:生成虚假用户,这些用户对特定目标物体给于高评价,从而影响模型的训练。 基于llm的RS:llm利用语义理解,将用户兴趣转化为语义向量,通过计算用户兴趣向量与物品向…...
云原生周刊:利用 eBPF 增强 K8s
开源项目推荐 Slurm-operator Slurm-operator 是一个高效可扩展的框架,用于在 K8s 环境中部署和运行 Slurm 工作负载。 它结合了 Slurm 的可靠性和 Kubernetes 的灵活性,支持快速部署 Slurm 集群、动态扩展 HPC 工作负载,并提供高度灵活的定…...
Ubuntu20.04安装openMVS<成功>.colmap<成功>和openMVG<失败(已成功)>
一、安装openMVS 官方文档:https://github.com/cdcseacave/openMVS/wiki/Building sudo apt-get -y install git mercurial cmake libpng-dev libjpeg-dev libtiff-dev libglu1-mesa-dev eigen git clone https://gitlab.com/libeigen/eigen --branch 3.4 mkdi…...
第22天:信息收集-Web应用各语言框架安全组件联动系统数据特征人工分析识别项目
#知识点 1、信息收集-Web应用-开发框架-识别安全 2、信息收集-Web应用-安全组件-特征分析 一、ICO图标: 1、某个应用系统的标示,如若依系统有自己特点的图标;一旦该系统出问题,使用该系统的网站都会受到影响; 2、某个公…...
Sourcegraph 概述
Sourcegraph 报告 Sourcegraph 是一款强大的代码搜索和智能导航工具,专为大型代码库、分布式系统和跨多个仓库的开发环境设计。它能显著提高开发者对复杂系统的理解和维护效率,帮助团队在庞大的代码库中快速找到关键信息。本文将详细讲解 Sourcegraph 的…...
Redis常见阻塞原因总结
O(n) 命令 Redis 中的大部分命令都是 O(1)时间复杂度,但也有少部分 O(n) 时间复杂度的命令,例如: KEYS *:会返回所有符合规则的 key。HGETALL:会返回一个 Hash 中所有的键值对。LRANGE:会返回 List 中指定…...
MyBatis执行完sql后,返回的数值代表的意思
在 MyBatis 中,常见的数据库操作方法返回的数值(如 insert、update 和 delete)代表了 受影响的行数,即数据库操作成功后,实际修改(插入、更新或删除)的记录数量。每个方法返回的数值有不同的含义…...
MySQL超详细安装配置教程(亲测有效)
目录 1.下载mysql 2.环境配置 3.安装mysql 4.navicat工具下载与连接 5总结 1.下载mysql mysql下载--MySQL :: 下载 MySQL 社区服务器 下载的时候这里直接逃过就行 我这里的版本是最新的mysql8.0.37 下载完成之后,将压缩包进行解压 这里我建议大…...
MacroSan 2500_24A配置
双控制器电源同时按下,切记/切记/切记 默认信息 默认地址:192.168.0.210 输入ODSP授权后设置密码## 配置端口 物理资源–>设备–>网口–>eth-1:0:0或eth-2:0:0 创建存储池 存储资源–>存储池 介质类型:混合(支持机械及SSD)全闪(仅支持SSD) RAID类型:CRAID-P(基于磁…...
vue3+vite一个IP对站点名称的前端curd更新-会议系统优化
vue3-tailwind-todo https://github.com/kgrg/vue3-tailwind-todo 基于这个项目,把ip到sta的映射做了前端管理. 核心代码是存储和获得的接口,需要flask提供. def redis2ipdic():global ipdicipdic.clear()tmdiccl.hgetall(IPDIC_KEY)for k in tmdic.keys():ipdic[k.decode() …...
GraalVM完全指南:云原生时代下使用GraalVM将Spring Boot 3应用转换为高效Linux可执行文件
一、前言 在现代软件开发中,启动速度和资源利用率常常是衡量应用性能的关键指标。对于基于Spring Boot的应用来说,虽然它们易于开发和部署,但JVM的启动时间有时会成为一个瓶颈。本文介绍如何使用GraalVM将Spring Boot 3应用编译成原生Linux可执行文件,从而显著提高启动速度…...
《Swift 字面量》
《Swift 字面量》 介绍 在 Swift 编程语言中,字面量是一种表示源代码中固定值的表达方式。字面量可以直接表示数字、字符串、布尔值等基本数据类型,为编程提供了简洁和直观的方式。Swift 支持多种类型的字面量,包括整数字面量、浮点数字面量…...
国标GB28181平台EasyGBS在安防视频监控中的信号传输(电源/视频/音频)特性及差异
在现代安防视频监控系统中,国标GB28181协议作为公共安全视频监控联网系统的国家标准,该协议不仅规范了视频监控系统的信息传输、交换和控制技术要求,还为不同厂商设备之间的互联互通提供了统一的框架。EasyGBS平台基于GB28181协议,…...