BGP路由选择实验

测试环境拓扑图

在这里插入图片描述
每一种规则测试完后记得恢复初始状态!!
各设备BGP Router_ID为loopback 0的地址。

AR1 配置

[V200R003C00]
#
 sysname AR1
#
interface GigabitEthernet0/0/0
 ip address 10.1.12.1 255.255.255.0 
#
interface LoopBack0
 ip address 1.1.1.1 255.255.255.255 
#
interface LoopBack66
 ip address 66.66.66.66 255.255.255.255 
#
bgp 100
 router-id 1.1.1.1
 peer 10.1.12.2 as-number 200 
 #
 ipv4-family unicast
  undo synchronization
  peer 10.1.12.2 enable
#

AR2 配置

[V200R003C00]
#
 sysname AR2
#
interface GigabitEthernet0/0/0
 ip address 10.1.12.2 255.255.255.0 
#
interface GigabitEthernet0/0/1
 ip address 10.1.23.2 255.255.255.0 
#
interface LoopBack0
 ip address 2.2.2.2 255.255.255.255 
#
bgp 200
 router-id 2.2.2.2
 peer 3.3.3.3 as-number 200 
 peer 3.3.3.3 connect-interface LoopBack0
 peer 10.1.12.1 as-number 100 
 #
 ipv4-family unicast
  undo synchronization
  peer 3.3.3.3 enable
  peer 3.3.3.3 next-hop-local 
  peer 10.1.12.1 enable
#
ospf 1 router-id 2.2.2.2 
 area 0.0.0.0 
  network 2.2.2.2 0.0.0.0 
  network 10.1.23.2 0.0.0.0 
#
return

AR3 配置

[V200R003C00]
#
 sysname AR3
#
interface GigabitEthernet0/0/0
 ip address 10.1.23.3 255.255.255.0 
#
interface GigabitEthernet0/0/1
 ip address 10.1.34.3 255.255.255.0 
#
interface LoopBack0
 ip address 3.3.3.3 255.255.255.255 
#
bgp 200
 router-id 3.3.3.3
 peer 2.2.2.2 as-number 200 
 peer 2.2.2.2 connect-interface LoopBack0
 peer 4.4.4.4 as-number 200 
 peer 4.4.4.4 connect-interface LoopBack0
 #
 ipv4-family unicast
  undo synchronization
  peer 2.2.2.2 enable
  peer 4.4.4.4 enable
#
ospf 1 router-id 3.3.3.3 
 area 0.0.0.0 
  network 3.3.3.3 0.0.0.0 
  network 10.1.23.3 0.0.0.0 
  network 10.1.34.3 0.0.0.0 
#

AR4 配置

[V200R003C00]
#
 sysname AR4
#
interface GigabitEthernet0/0/0
 ip address 10.1.45.4 255.255.255.0 
#
interface GigabitEthernet0/0/1
 ip address 10.1.34.4 255.255.255.0 
#
interface LoopBack0
 ip address 4.4.4.4 255.255.255.255 
#
bgp 200
 router-id 4.4.4.4
 peer 3.3.3.3 as-number 200 
 peer 3.3.3.3 connect-interface LoopBack0
 peer 10.1.45.5 as-number 300 
 #
 ipv4-family unicast
  undo synchronization
  peer 3.3.3.3 enable
  peer 3.3.3.3 next-hop-local 
  peer 10.1.45.5 enable
#
ospf 1 router-id 4.4.4.4 
 area 0.0.0.0 
  network 4.4.4.4 0.0.0.0 
  network 10.1.34.4 0.0.0.0 
#

AR5 配置

[V200R003C00]
#
 sysname AR5
#
interface GigabitEthernet0/0/0
 ip address 10.1.45.5 255.255.255.0 
#
interface LoopBack0
 ip address 5.5.5.5 255.255.255.255 
#
interface LoopBack66
 ip address 66.66.66.66 255.255.255.255 
#
bgp 300
 router-id 5.5.5.5
 peer 10.1.45.4 as-number 200 
 #
 ipv4-family unicast
  undo synchronization
  peer 10.1.45.4 enable
#

丢弃下一跳不可达的路由

测试方法:

1、将AR1和AR5上的loopback66接口地址宣告到BGP中。

2、预先已经在AR2和AR4上向AR3配置了peer 3.3.3.3 next-hop-local,所以AR3上会有两条去往66.66.66.66/32的路由。

在这里插入图片描述

可以看到,在默认情况下,BGP所有选路规则中前10条都无法比较出,直至匹配了Router_ID小的路由,所以选择了对等体2.2.2.2的路由,
而将4.4.4.4的路由标记为有效,但不是最优。
可以通过display bgp routing-table 66.66.66.66 32查看具体原因:(不是首选的Router_ID
在这里插入图片描述

3、将AR2上的next-hop-local配置undo,再次观察AR3的路由表情况。

[AR2-bgp]undo peer 3.3.3.3 next-hop-local

配置上述命令后可能需要等待更新周期才能看到路有变化,可使用下列命令进行刷新:
refresh bgp internal export|import 或者 refresh bgp external export|import
在这里插入图片描述
可以看到,原来优选了对等体2.2.2.2的路由现在下一跳地址变为了10.1.12.1,因为路由器会将从EBGP学习到的路由信息原封不动的发送给其他对等体,而peer 3.3.3.3 next-hop-local这条命令就是告诉其他对等体,我发给你们的路由,下一跳来找我。所以对于AR3来说10.1.12.1是不可达的,所以将该条路由标记为无效也不是最优的路由。从而选择了对等体4.4.4.4发来的。

1 优选Preferred-Value值最大的路由

恢复拓扑初始状态,查看AR3的BGP路由表信息:
在这里插入图片描述

测试方法:

1、在AR3上将来自对等体4.4.4.4的路由信息的PrefVal属性值调大。

[AR3-bgp]peer 4.4.4.4 route-policy PrefVal import 
Route-policy : PrefVal
  permit : 10 (matched counts: 2)
    Apply clauses : 
      apply preferred-value 100   #该路由策略的意思是直接将来自4.4.4.4对等体的所有路由的preferred-value属性值都标记为100

查看AR3的BGP 路由表信息。
在这里插入图片描述
可以看到,来自对等体4.4.4.4的路由的PrefVal属性值被标记为100,且被选为最优路由。
查看具体原因:
在这里插入图片描述
针对来自对等体2.2.2.2的路由,显示:PreVal不是最优的。

2 优选Local-Preference属性值最大的路由

先恢复初始配置。
AR3的初始BGP路由信息:
在这里插入图片描述
可以看到,初始的LocPrf属性值默认为100。

测试方法:

1、在AR3上对来自对等体4.4.4.4的路由,将其LocPrf调整为101。

[AR3-bgp]peer 4.4.4.4 route-policy LocPrf import
#
route-policy LocPrf permit node 10 
 apply local-preference 101 
#

观察AR3的BGP路由表信息:
在这里插入图片描述
可以看到,对等体4.4.4.4的路由的LocPrf属性值被标记为101,并成为最优路由。
查看具体原因:
在这里插入图片描述
针对对等体2.2.2.2的路由,显示不是最优的Local_Pref。

3 本地始发路由优于从对等体学习到的路由

本地始发具体规则为:
手动聚合>自动聚会>Network>import>从对等体学习到的路由
为了验证上述选路规则,本实验将从后往前匹配条件进行验证。
在初始情况下,AR3上的BGP路由表信息如下:
在这里插入图片描述
可以从NextHop信息看到,去往66.66.66.66/32的路由是来自不同对等体的

1、在AR3的lo66接口上配置该地址,并引入BGP中,查看AR3的BGP路由表信息。(测试import>从对等体学习到的)

相关命令如下:

	import-route direct route-policy 66
	
	Route-policy : 66
	  permit : 10 (matched counts: 10)
	    Match clauses : 
	      if-match ip-prefix 66
	    Apply clauses : 
	      apply as-path 200 additive  #确保AR3本地引入的相关属性与其他路与相同
	      apply local-preference 100  #同上
	
	Prefix-list 66
	Permitted 8
	Denied 0
	        index: 10               permit  66.66.66.66/32

确保之前的属性值(PreVal、LocPrf)相同的情况下: 在这里插入图片描述
此时可以看到,BGP路由表中对于66.66.66.66/32条目而言,选择了自身引入的路由为最优。
查看具体路由信息:
在这里插入图片描述

2、测试Network>import>从对等体学习到的路由

将AR3上配置的loopback66接口地址66.66.66.66/32使用Network宣告到BGP中。
在这里插入图片描述可以看到两条来自本地的66.66.66.66/32的路由,查看具体路由信息:
在这里插入图片描述
可以看到,最优选择了Network方式发布的路由。

3、测试自动聚合优于Network

为了测试更为直观,现在改为使用88.0.0.0/8 的路由条目作为测试,AR2、AR4上配置一条静态路由ip route-static 88.0.0.0 8 NULL 0,并引入BGP中。
在AR3BGP中宣告一条88.0.0.0 8的路由,同时配置两条静态路由:

ip route-static 88.0.0.0 255.0.0.0 NULL0
ip route-static 88.128.0.0 255.128.0.0 NULL0

观察AR3BGP路由表信息:
在这里插入图片描述

启用自动聚合功能:

[AR3-bgp]summary automatic

在这里插入图片描述
此时静态路88.128.0.0/9聚合后会被抑制,变为无效路由,查看具体路由信息:
在这里插入图片描述
可以看到,最终选了自动聚合的路由,而Network不是最优的路由类型。

4、测试手动聚合优于自动聚合

保持前面配置不变,在AR3的BGP视图中执行以下命令:

[AR3-bgp]aggregate 88.0.0.0 8 detail-suppressed

观察AR3的BGP路由表信息:
在这里插入图片描述
可以看到,此时又多了一条下一跳为127.0.0.1的88.0.0.0的路由。
查看具体的路由选择信息:
在这里插入图片描述
可以看到,优选了手动聚合路由。

4 优选AS_Path最短的路由

恢复初始配置,查看AR3 BGP 路由表:
在这里插入图片描述

测试方法:

对来自对等体2.2.2.2的路由,为其添加一个Path属性值100,使其成为次优路由:

	[AR3-bgp]peer 2.2.2.2 route-policy 66 import 
	Route-policy : 66
	  permit : 10 (matched counts: 16)
	    Match clauses : 
	      if-match ip-prefix 66
	    Apply clauses : 
	      apply as-path 100 additive

查看AR3路由表信息:
在这里插入图片描述
在这里插入图片描述

5 优选Origin属性最优的路由

恢复拓扑初始化配置,查看当前AR3的BGP路由表信息:
在这里插入图片描述
如上图所示,由于在 AR1、AR5上使用的是Network方式宣告的66.66.66.66/32的路由对应的Origin属性为i。

  • Origin属性相应关联:
    i - IGP —> Network
    e - EGP—> 该方式可以通过route-policy修改测试
    ? - incomplete—> import

测试方法:

1 将来自对等体2.2.2.2的路由使用路由策略将其Origin属性改为EGP。

[AR3-bgp]peer 2.2.2.2 route-policy 66 import
#
route-policy 66 permit node 10 
 apply origin egp 100
#

在这里插入图片描述
可以看到,此时对等体2.2.2.2的路由Origin属性改为了e,且变为了次优

2 保持前面的配置,在AR5上将原来的Network方式改为import方式引入BGP。

在这里插入图片描述
如上图所示,此时来自对等体4.4.4.4的路由Origin属性标记为了 ?,且成为了次优路径。
在这里插入图片描述

6 优选MED属性值最小的路由

恢复拓扑初始配置,查看AR3的BGP路由表信息。
在这里插入图片描述

测试方法:

将来自对等体2.2.2.2的路由的MED属性值改为1:

[AR3-bgp]peer 2.2.2.2 route-policy 66 import
#
route-policy 66 permit node 10 
 apply cost 1 
#
[AR3-bgp]compare-different-as-med  #允许比较来自不同AS的路由的MED属性(默认情况下BGP只会对来自同一AS的路由进行MED属性值的比较)

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

7 优选从EBGP学习到的路由

恢复初始配置,查看AR2的路由表信息:
在这里插入图片描述

测试方法:

在AR3上也宣告一条66.66.66.66/32的路由到BGP中,使得AR2可以从3.3.3.3通过IBGP学习到该路由。

并且要保证其他属性条件相同。

[AR3-bgp]network 66.66.66.66 32 route-policy 66
Route-policy : 66
  permit : 10 (matched counts: 5)
    Apply clauses : 
      apply as-path 200 additive

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

8 优选到Next-hop的IGP度量值最小的路由

恢复初始配置,查看AR3初始BGP路由信息:
在这里插入图片描述
可以看到,当前到两个对等体的IGP开销都为1。

测试方法:

因为AR2、AR3、AR4之间使用的是OSPF作为IGP

将AR3与AR2连接的接口的OSPF的开销值改为10。

	[AR3-GigabitEthernet0/0/0]ospf cost 10

在这里插入图片描述

如上图所示,AR3到达对等体2.2.2.2的IGP开销改为10后,变为了次优路由,提示:不是最优的IGP开销。

扩展-BGP路由负载分担

扩展:
当在前面的8条BGP路由匹配规则都无法比较出最优路由时,可以为该BGP路由设置负载分担,而BGP默认只对AS_Path完全相同的路由进行负载分担
可以使用:load-balancing as-path-ignore忽略AS_Path的不一致。

另外,在配置负载分担前,BGP自身虽然有多条次优路由,但设备只会选择最优的那条路由放进RIB和FIB中,如下图所示:
在这里插入图片描述
在公网中到达同一目的地的路由形成负载分担时,系统会首先判断最优路由的类型。

若最优路由为IBGP路由则只是IBGP路由参与负载分担,若最优路由为EBGP路由则只是EBGP路由参与负载分担,即公网中到达同一目的地的IBGP和EBGP路由不能形成负载分担。

[AR3-bgp]maximum load-balancing ibgp ?  #针对路由的IBGP或EBGP配置负载分担的数量
  INTEGER<1-8>  Specify maximum equal cost routes
[AR3-bgp]load-balancing as-path-ignore  #忽略AS_Path的不一致的路由的负载分担

在这里插入图片描述

9 优选Cluster_List最短的路由

恢复拓扑初始配置。

测试方法,拓扑做以下修改:

1、取消在AR1上宣告路由,只在AR5上宣告。
2、配置AR3为RR,AR4为AR3的客户端。
3、AR2与AR4之间配置基于回环接口的IBGP关系。

经过上面的修改后,在AR2上会收到AR4的BGP路由,和AR3反射过来的BGP路由66.66.66.66/32。
默认情况下,前面8条规则无法比较出最优路由,此时需要根据Cluster_List进行比较。
在这里插入图片描述
在这里插入图片描述
如上图所示,设备最终选择了来自对等体4.4.4.4的IBGP路由为最优,而对于来自对等体3.3.3.3的路由,以为来自对等体3.3.3.3的Cluster_List不为空。

在BGP(Border Gateway Protocol)中,Cluster_List(集群列表)是一种用于避免循环的路由属性。它用于解决以下情况:当一个路由反射器(Route Reflector)将一个路由反射给其他反射器时,可能会导致路由循环。

在BGP网络中,路由反射器用于简化路由器之间的BGP对等体关系。它们接收来自客户端路由器的路由信息,并将其反射给其他客户端路由器。当一个路由反射器将一条路由发送给其他反射器时,可能会遇到问题,因为路由信息可能会在不同的反射器之间循环传播。

为了解决这个问题,BGP引入了Cluster_List属性。当一个路由反射器接收到一条路由信息时,它会检查该路由的Cluster_List属性。Cluster_List是一个有序的集群标识符列表,用于跟踪路由信息的传播路径。
在BGP中,路由器使用Cluster_List属性来比较和处理路由信息。具体比较的方式如下:

  1. 当一个路由反射器收到一条路由信息时,它首先检查Cluster_List属性是否为空。如果为空,表示该路由是首次被反射,可以继续处理。

  2. 如果Cluster_List属性不为空,则路由反射器会检查列表中的集群标识符是否包含自己的集群标识符。如果集群标识符列表中包含自己的标识符,表示该路由已经经过当前的路由反射器处理过了,不再转发给其他反射器,从而避免了循环。

  3. 如果集群标识符列表中不包含自己的标识符,则路由反射器会将自己的集群标识符添加到Cluster_List属性的末尾,并将该更新后的路由信息发送给其他客户端路由器和反射器。

  4. 在转发路由信息时,路由反射器还需要更新AS_Path属性,以便其他路由器能够正确地了解路由信息的路径。通常,反射器会将自己的AS号添加到AS_Path属性中。

10 优选Router_ID最小的路由

恢复初始配置,观察AR3的BGP初始路由信息。
在这里插入图片描述
在这里插入图片描述
如果前面9条规则都匹配不上,默认会比较到Router_ID的大小,所以选择了Router_ID较小的2.2.2.2的路由。
但是,在比较该条规则下,还有一个潜在的规则:如果路由中携带有Originator_ID,则先比较Originator_ID,再比较Router_ID,同样,具有最小的Originator_ID值的路由为最优。

测试Originator_ID属性:

在第9条规则的测试图中,在Cluster_ID的上一行可以看到一条Originator_ID记录:
在这里插入图片描述

测试方法:

1、保持AS200中的配置不变,将AR1和AR5改到AS200下,IGP使用OSPF,并宣告各自的loopback0地址和接口地址段。
2、AR1与AR2设置为IBGP;AR4与AR5设置为IBGP。
2、将AR2设置为RR,AR1为AR2的客户端;
3、将AR4设置为RR,AR5为AR2的客户端;

经过上述的变更后,AR3上会学习到来自反射器AR2和AR4的路由,但是优选了来自对等体2.2.2.2的路由,因为其Originator_ID属性值较小,但此时好像也很难辨别究竟是不是Originator_ID选举规则生效。
在这里插入图片描述
上图中:
From:X.X.X.X (Y.Y.Y.Y) 不都是Router_ID的值,X是建立对等体时使用的地址,Y是对等体的Router_ID。
Original nexthop: 是该路由的下一条地址,因为在AR1、AR5上配置了peer X.X.X.X next-hop-local,所以显示的是该路由下一跳的回环接口地址(基于回环接口建立的IBGP)。
Originator_ID 其实就是对应对等体的Router_ID,当经过RR后会携带有Originator_ID属性,该属性映射到Router_ID。

在AR1的BGP视图下取消配置BGP的Router_ID,再次查看AR3的BGP路由表信息:
在这里插入图片描述
可以看到,此时来自反射器AR4的路由变为最优,因为Originator_ID属性值比来自反射器AR2的值小,提示信息依旧是显示不是最优的Router_ID值。

将AR5的BGP Router_ID也取消,再次查看AR3的BGP路由表信息:
在这里插入图片描述
如上图所示,因为Originator属性小,从而选择了来自反射器2.2.2.2的路由为最优,提示信息仍旧是:不是最优的Router_ID。
由此可见,其实Originator_ID相当于就是Router_ID,在携带该属性时,要优于Router_ID先比较。

11 优选具有最小IP地址的对等体通告的路由

更改拓扑信息:

在这里插入图片描述
在AR5上宣告66.66.66.66/32 都处于同一AS200,AR5和AR2设置为IBGP,AR5和AR4设置为IBGP。
将AR2和AR4设置为RR,且AR5分别是他们的客户端。
经过上述的变更后,AR3上会有两条路由,且前面10条选路规则也无法比较出最优路由,此时会选择具有较小IP地址的对等体(2.2.2.2)的路由:
10.1.23.2 < 10.1.34.4
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/21018.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

vue大屏开发系列—使用echart开发省市地图数据,并点击省获取市地图数据

1. 本文在基础上进行改进&#xff0c;后端使用若依后端 IofTV-Screen: &#x1f525;一个基于 vue、datav、Echart 框架的物联网可视化&#xff08;大屏展示&#xff09;模板&#xff0c;提供数据动态刷新渲染、屏幕适应、数据滚动配置&#xff0c;内部图表自由替换、Mixins注入…

揭 秘~月薪2-3万的程序员一天到底是怎么度过的?

程序员的高薪资&#xff0c;一直是大家热衷讨论的话题&#xff0c;几乎每隔一段时间就会在社交平台被网友们热议一番。 比如这条“月薪2万到3万的程序员的一天是怎么样度过的&#xff1f;”的帖子就一直排在知乎前列。 作为薪资可观的岗位&#xff0c;大家都非常好奇&#xff…

22届硕士,去年秋招拿了字节跳动offer,有一说一,不是很难进

自从抖音短视频APP火了之后&#xff0c;起公司字节跳动也逐渐向着大厂靠拢&#xff0c;相信大家都已经对这家公司很熟悉了&#xff0c;尤其是近几年来&#xff0c;对它的认识也在不断刷新&#xff0c;它惊人的发展速度确实让行业内人刮目相看&#xff0c;如今很多年轻人也想要挤…

ChatGPT的工作原理(纯干货,万字长文)

ChatGPT 能够自动生成一些读起来表面上甚至像人写的文字的东西&#xff0c;这非常了不起&#xff0c;而且出乎意料。但它是如何做到的&#xff1f;为什么它能发挥作用&#xff1f;我在这里的目的是大致介绍一下 ChatGPT 内部的情况&#xff0c;然后探讨一下为什么它能很好地生成…

Rust每日一练(leetDay0001) 两数之和、两数相加、最长子串

目录 1. 两数之和 Two Sum &#x1f31f; 2. 两数相加 Add Two Numbers &#x1f31f;&#x1f31f; 3. 无重复字符的最长子串 Longest substring without repeating characters &#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Rust每日一练…

内网渗透(七十八)之域权限维持之ACL滥用(下)

ACL滥用(下) 7、GenericAll 权限 应用于组 再来看看GenericAll 权限 应用于组如何进行权限维持。 由于用户hack是普通的域用户,因此他没有往Domain Admins 组添加用户的权限,如图所示,以用户hack 身份往Domain Admins 组中添加用户,可以看到,添加用户失败。 现在我们…

孙鑫VC++第四章 2.简单绘图-绘制

目录 1. 按键消息 2. 绘制线条 2.1 利用SDK全局函数实现画线功能 2.2 利用MFC的CDC类实现画线功能 2.3 利用MFC的CClientDC类实现画线功能 2.4 利用MFC的CWindowDC类实现画线功能 3. 在桌面窗口中画线 3.1 绘制彩色线条 4. 使用画刷绘图 4.1 简单画刷 4.2 位图画刷 …

『手撕 Mybatis 源码』02 - 加载配置文件

加载配置文件 获取输入流 myBatis 的配置文档层次架构 首先从读入开始查看是怎么加载配置文件的&#xff0c;现在从这里打个断点 public class MybatisTest {Testpublic void test1() throws IOException {// 1. 通过类加载器对配置文件进行加载&#xff0c;加载成了字节输入…

代码随想录算法训练营第二十三天|理论基础 77. 组合

文章目录 理论基础77.组合思路代码总结 理论基础 回溯算法&#xff1a;一种暴力搜索方式 回溯是递归的副产品&#xff0c;只要有递归就会有回溯。 回溯法&#xff0c;一般可以解决如下几种问题&#xff1a; 组合问题&#xff1a;N个数里面按一定规则找出k个数的集合切割问题…

学术加油站|基于LSM-tree存储系统的内存管理,最大限度降低I/O成本

本文系北京理工大学科研助理牛颂登所著&#xff0c;本篇也是 OceanBase 学术系列稿件第 10 篇。欢迎访问 OceanBase 官网获取更多信息&#xff1a;https://www.oceanbase.com/ 「牛颂登&#xff1a;北京理工大学科研助理&#xff0c;硕士期间在电子科技大学网络空间安全研究院从…

antd-vue-admin——通过链接跳过登录页直接进入系统内部——基础积累

最近在写后台管理系统&#xff0c;遇到一个需求&#xff0c;就是从系统A带参数可以直接进入到系统B内部。不通过系统B的登录页面进行登录。 一般系统的登录&#xff0c;都需要用户名和密码等参数&#xff0c;然后获取到token信息&#xff0c;最后进入到系统内部。 下面介绍具…

4. QT中的鼠标键盘事件 --- 鼠标拖拽案例

1. 说明 在QT的控件或者窗口当中&#xff0c;如果对于当前鼠标或者键盘的功能需要自己定义&#xff0c;可以重写父类当中对应虚函数&#xff0c;主要包括以下几个&#xff1a; //键盘按键按下 virtual void keyPressEvent(QKeyEvent *event); //键盘按键抬起 virtual void ke…

linux 常用命令awk

AWK 是一种处理文本文件的语言&#xff0c;是一个强大的文本分析工具。之所以叫 AWK 是因为其取了三位创始人 Alfred Aho&#xff0c;Peter Weinberger, 和 Brian Kernighan 的 Family Name 的首字符。 AWK用法 awk 用法&#xff1a;awk pattern {action} files 1.RS, ORS, F…

【c语言】组件化打包—静态库lib

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;c语言系列专栏&#xff1a;c语言之路重点知识整合 &#x…

CVE-2023-32233 Linux kernel

0x01 漏洞介绍 近日&#xff0c;研究人员发现了Linux内核的NetFilter框架中的新漏洞&#xff08;CVE-2023-32233&#xff09;。该漏洞可被本地用户用于将权限提升为root&#xff0c;并完全控制系统。问题的根源在于tfilter nf_tables是如何处理批处理请求的&#xff0c;经过身…

AutoSizer.exe:自动调整窗口大小的便捷工具

AutoSizer.exe是一款实用的桌面应用程序,它旨在帮助用户自动调整窗口大小,提供更好的用户体验。无论您是在使用Windows操作系统进行日常工作还是进行多任务处理,AutoSizer.exe可以简化您的工作流程,提高效率。本文将介绍AutoSizer.exe的下载地址、功能介绍、使用方法以及其…

为世界第一大癌症高效研发首创新药,AI大模型助力药物研发叩开未来之门

近日&#xff0c;三位高中生引爆了医药圈&#xff0c;他们使用人工智能&#xff08;AI&#xff09;引擎进行靶点发现&#xff0c;确定了多形性胶质母细胞瘤&#xff08;GBM&#xff09;的新治疗靶点&#xff0c;多形性胶质母细胞瘤&#xff08;GBM&#xff09;是最具侵袭性和最…

238:vue+openlayers绘制扩展,弓形、曲线、扇形、双箭头、进攻方向...

第238个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+openlayers中利用ol-plot插件进行绘制图形扩展,可以绘制弓形、弧形、标志旗、战斗进攻图形等等。 直接复制下面的 vue+openlayers源代码,操作2分钟即可运行实现效果; 注意如果OpenStreetMap无法加载,请加载其他…

【Shell脚本】Linux安装Nginx以及开机自启

目录 一、Linux安装Nginx脚本1、把编写好的安装Nginx脚本放置到nginx.sh文件中2、在检查网络的时候&#xff0c;这里的IP地址&#xff0c;填写的需要安装Nginx服务器的IP地址3、这里的端口号可按照自己的需要进行修改4、安装Nginx脚本 二、Nginx开机自启 一、Linux安装Nginx脚本…

Spring【Again】——复杂POJO的绑定

简单介绍&#xff1a; Again系列是将之前的内容我认为做的不好的地方或者是理解不到位的地方再来一次&#xff0c;加深记忆或者改错。我们就在来复习一下之前我们说过的复杂类型的数据绑定。 先来复习一下简单数据绑定&#xff1a; 简单数据绑定就是我们在传递参数的时候&am…