(嵌套虚拟机)ovs+floodlight搭建sdn——模拟并检测ddos攻击

news2024/10/5 14:43:25

参考博文-CSDN-九瓜(作者)-使用OpenvSwitch + KVM搭建SDN网络、完整流程

ovs安装,需对应版本,使用uname -a查看内和版本,官网连接http://www.openvswitch.org//download/

如果觉得2.17.7就可以:那么使用命令:

cd /opt
sudo wget https://www.openvswitch.org/releases/openvswitch-2.17.7.tar.gz
# 进入到存放ovs的压缩包的文件夹(移动到你所需要的)
# 其他版本则下属内容自行更换
sduo tar -vxzf openvswitch-2.17.7.tar.gz
cd openvswitch-2.17.7.tar.gz
sudo ./boot.sh
sudo ./configure
sudo apt install libtool-bin
sudo cp /usr/bin/libtool .
sudo make 
sudo make install

下面这个命令没必要
modinfo datapath/linux/openvswitch.ko | grep depends
将上述依赖使用如下命令逐个添加
modprobe libcrc32c[多个依赖]
insmod datapath/linux/openvswitch.ko

sudo su
mkdir -p /usr/local/var/run/openvswitch
mkdir -p /usr/local/var/log/openvswitch

# 创建数据库
ovsdb-tool create /usr/local/etc/openvswitch/conf.db /usr/local/share/openvswitch/vswitch.ovsschema
# 启动ovsdb-server
ovsdb-server --remote=punix:/usr/local/var/run/openvswitch/db.sock --remote=db:Open_vSwitch,Open_vSwitch,manager_options --private-key=db:Open_vSwitch,SSL,private_key --bootstrap-ca-cert=db:Open_vSwitch,SSL,ca_cert --pidfile --detach
# 初始化ovsdb,针对于新创建的数据库才需要初始化
ovs-vsctl --no-wait init
# 环境变量建议写到/etc/profile
export DB_SOCK=/usr/local/var/run/openvswitch/db.sock
# 就已经启动了ovs
# 建议此处重启电脑
# 或者
# export PATH=$PATH:/usr/local/share/openvswitch/scripts
# ovs-ctl stop
# export PATH=$PATH:/usr/local/share/openvswitch/scripts
# ovs-ctl start

之后再启动ovs:

sudo su
export PATH=$PATH:/usr/local/share/openvswitch/scripts
ovs-ctl start

参考博文-我的编程生涯(文章网站)-未知作者-Linux下的floodlight安装指南(排坑版)

安装 eclipse (后面启动floodlight项目用)

cd /opt
sudo wget -P /opt https://archive.eclipse.org/technology/epp/downloads/release/luna/SR2/eclipse-java-luna-SR2-linux-gtk-x86_64.tar.gz
sudo tar -vxzf eclipse-java-luna-SR2-linux-gtk-x86_64.tar.gz

安装floodlight

sudo su
# 输入密码
# 一定用下面这条命令按扎安装java8
sudo apt-get install openjdk-8-jdk
# 不小心安了jdk11用以下命令卸载
# sudo apt-get autoremove openjdk-11-jre-headless
# 注意,我这里用的是镜像网站kgithub.com(2023.7--比github好用捏)
cd /opt
git clone https://kgithub.com/floodlight/floodlight.git
cd floodlight
export GIT_SUBMODULE_URL='https://kgithub.com'
git submodule init
git submodule update
# 安装 ant 
sudo wget -P /opt https://dlcdn.apache.org//ant/binaries/apache-ant-1.9.16-bin.tar.gz
cd /opt
sudo tar -vxzf apache-ant-1.9.16-bin.tar.gz
# 下面的命令将引号内的内容添加到/etc/peofile文件的最后(注意,下面第一行的路径替换为自己的,版本号别忘了改)
# 下面这条命令尽量避免反复执行 如果不小心执行错了,使用文本编辑器修改/etc/profile文件
sudo echo 'ANT_HOME=/opt/apache-ant-1.9.16
export PATH=$JAVA_HOME/bin:$PATH:$ANT_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar' | sudo tee -a /etc/profile


#验证ant安装是否成功
source /etc/profile
ant -version
cd /opt/floodlight
sudo ant eclipse
sudo mkdir /var/lib/floodlight
sudo chmod 777 /var/lib/floodlight

cd /opt/eclipse
./eclipse

此处创建eclipse工作区,这个随意

在这里插入图片描述

点击左上角的file->import->General->Existing Projects into Workspace->next
在这里插入图片描述
在这里插入图片描述

select root dirctory 中选择文件夹,选择git下载的floodlight文件夹
在这里插入图片描述

(下面这张图我这里由于之前创建过这个,所以不能点finish在这里插入图片描述
此时eclipse页面可能会是welcome界面,关掉welcome界面即可
点击上方的播放按钮右侧的下向箭头,其中的Run Configurations
在这里插入图片描述

右键java Application->new
在这里插入图片描述

NameFloodlightLaunch
ProjectFloodlight
Mainnet.floodlightcontroller.core.Main
在这里插入图片描述

点击下方的apply
关闭此界面
选中左侧栏中的floodlight(单击它)
在这里插入图片描述

接着点击播放按钮右侧的向下箭头,选择Run As,选中Java Apllicationok->procees
在这里插入图片描述

选择ok在这里插入图片描述

proceed在这里插入图片描述

然后访问localhost:8080/ui/index.html
在这里插入图片描述

打不开网页的话看看是不是这里选错了
在这里插入图片描述

如果不使用 eclipse,当时的配置floodlight的命令里的ant sclipse换为ant
则在floodlight文件夹下使用命令:
java -jar target/floodlight.jar (很有可能会报错,不如eclipse,但是哪个可以用就用哪个)

# 下面这个命令里,也可能是6633端口 ip为ens33的ip(上网的网卡)
# 端口不对在页面上就不能正确显示交换机

配置 ovs交换机

进行下一步操作前确保ovs已经开启

在这里插入图片描述

启动两台kvm的嵌套虚拟机

sudo virt-manager
(我这里启动的是两台ubuntu,一台ubuntu一台win10会导致实验过程中,其中一台崩溃,ubuntu18.04-2是ubuntu18.04的复制,使用命令:virt-clone --original ubuntu18.04 --name ubuntu18.04-2 --file /home/star/VMs/ubuntu1804/ubuntu-18.04-2-desktop-amd64.iso–file选项是指定复制以后的iso文件存放处,需改为自己的

(如果实验过程中启动虚拟机时报错vnet0或者vnet1被占用什么的,则使用命令:sudo ovs-vsctl del-port ovs-br0 vnet0sudo ovs-vsctl del-port ovs-br0 vnet1

在这里插入图片描述

sudo su 
# 这个br的名称随意设置,此处为ovs-br0
sudo ovs-vsctl add-br ovs-br0
# brctl没有就apt下载
sudo brctl show
# 上面这个命令可以看到virbr0下的vnet0和vnet1
sudo brctl delif virbr0 vnet0
sudo brctl delif virbr0 vnet1
sudo ovs-vsctl add-port ovs-br0 vnet0
sudo ovs-vsctl add-port ovs-br0 vnet1
sudo ovs-vsctl set-controller ovs-br0 tcp:127.0.0.1:6653
# 6653和6633哪个可以用哪个
# sudo ovs-vsctl set-controller ovs-br0 tcp:192.168.72.141:6633

接着使用sudo ovs-vsctl show应该结果如下
在这里插入图片描述

如果如下图所示busy等字样,可能的原因是上述过程中有一台虚拟机崩溃,重启了,只需再次执行:

sudo ovs-vsctl add-port ovs-br0 vnet0
sudo ovs-vsctl add-port ovs-br0 vnet1

如果启动虚拟机报错:vnet0或者vnet1 被占用等,就使用命令:sudo ovs-vsctl del-port ovs-br0 vnet0sudo ovs-vsctl del-port ovs-br0 vnet1
带虚拟机启动后

sudo brctl delif virbr0 vnet0
sudo brctl delif virbr0 vnet1
sudo ovs-vsctl add-port ovs-br0 vnet0
sudo ovs-vsctl add-port ovs-br0 vnet1

在这里插入图片描述

注意,这里需要在两台虚拟机中设置ip在同一网段,但其实vnet0和vnet1没有ip
ifconfig:
在这里插入图片描述

ping不通可能是:
在进行上述设置后重启了其中一台虚拟机,则需要brctl show并且把重新绑定在virbr0上的vnet删除即可

在这里插入图片描述
如果虚拟机中使用ifconfig发现两台虚拟机不在同一网段,或者有的没有ipv4的ip,可以使用sudo ifconfig 网卡名 192.168.122.*来自设置
网卡号可通过ifconfig命令查看
如下图所示,ubuntu18.04(右面)虚拟机没有ipv4的ip地址,使用命令sudo ifocnfig enp7s0 192.168.122.160
在这里插入图片描述
修改后:

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

实验过程中,我的一台虚拟机(ubuntu18.04-2 对应 vnet0)崩溃了,此时虽然可以直接重新启动,但是:
在这里插入图片描述

使用命令:

sudo brctl delif virbr0 vnet0

在这里插入图片描述

回到网页:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
拓扑图相比于上面两个图,如果哪个host没有加载出来,就用哪个host ping一下其他host,就出来了
在这里插入图片描述

使用floodlight流表监控ddos攻击

安装wireshark

sudo apt install wireshark
# 启动wireshark要用su权限,不然看不了网络接口
sudo wireshark

http://192.168.0.100:8080/wm/core/switch/all/flow/json中可以查看所有交换机的流表信息
在这里插入图片描述
使用下面的命令可以添加floodlight流表,但需要修改几个地方

  • switch改为交换机的ID在http://192.168.72.141:8080/ui/pages/switches.html等多处都可以找到
  • name随意
  • in_port 表示数据包要进入的交换机端口,通过sudo ovs-ofctl show ovs-br查看
    (报错协议协商失败的错误的话输入命令:sudo ovs-vsctl set bridge ovs-br0 protocols=OpenFlow13 或者 ovs-ofctl -O OpenFlow13 show ovs-br0
  • action的操作为output,output表示数据包应该从交换机的端口14输出
curl -d '{"switch":"00:00:e6:d4:e1:29:37:4f","name":"ddos-detector","priority":"32769","in_port":"3","eth_type":"0x0800","ipv4_src":"192.168.122.160","active":"true","actions":"output=4"}' http://192.168.72.141:8080/wm/staticflowpusher/json

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

在这里插入图片描述
测试一下:
我们在ubuntu18.04(ip:192.168.122.160)发送三个ping包
在这里插入图片描述
流表中检测到了三个数据包
在这里插入图片描述
下面模拟测试检测icmp的ddos攻击:
使用hping3模拟:sudo hping3 -c 10 --icmp 192.168.122.150
补充一点
此时我想在ubuntu18.04上apt安装hping3,是连不上网的:
在这里插入图片描述

在这里插入图片描述
解决方案是在宿主机上使用命令(注意,这里是vnet0还是vnet1,取决于想要联网的虚拟机对应的vnet是哪个):


sudo ovs-vsctl del-port ovs-br0 vnet1
sudo brctl addif virbr0 vnet1

在这里插入图片描述
如果还不行看看这里,改为有线连接
在这里插入图片描述
下载完以后再改回来,改为有线连接后,网卡的ip可能会改变,ifconfig要把刚刚切换网络是被改掉的ip改为之前的。

最后主机上恢复sdn配置操作:

sudo brctl delif virbr0 vnet0
sudo brctl delif virbr0 vnet1
sudo ovs-vsctl add-port ovs-br0 vnet0
sudo ovs-vsctl add-port ovs-br0 vnet1

在实在不行就重启虚拟机1,先装好hping3

补充完毕
在这里插入图片描述
ps:这里我的vnet0、vnet1端口实验过程中中途改变了,因此下面可能有点不一样
在这里插入图片描述

在这里插入图片描述
简单的定义一个判断收到ddos攻击的依据:
收到了大量的icmp报文,因此我们直接拒绝掉所有的icmp报文:
设置ACL规则
在这里插入图片描述

记得要设置掩码
在这里插入图片描述
ACL规则通常由源IP地址、源端口、目标IP地址、目标端口等字段组成,用于确定允许或阻止通过网络的数据包。Destination Transport Port字段允许您指定要匹配的目标端口号,以便对特定的网络流量进行控制,这里可以不做设置

在这里插入图片描述

在流表中可以看到该规则

在这里插入图片描述
这里我们使用192.168.122.160向192.168.122.150模拟icmp ddos攻击:

可以发现,ping和hping的icmp包已经不能发出了,但是主机上的刘表规则中可以看到,拦截到了icmp报文:

新发的icmp包不再进入流表规则0,而是进入流表规则1,被拦截

在这里插入图片描述在这里插入图片描述
但是使用hping3发送的其他非icmp包,如TCP,仍然可以到达192.168.122.150
在这里插入图片描述

还有一种添加流表的方式:
使用哦个ovs命令:

ovs-ofctl -O Openflow13 add-flow ovs-br0 in_port=10,actions=output:9
# 当使用下述命令后,即交换机内没有任何流表,任何机器间互相不能通信:
# ovs-ofctl del-flows ovs-br0 -O OpenFlow13
# 查看所有流表
# ovs-ofctl dump-flows ovs-br0 -O OpenFlow13

ovs分析openflow流量:

打开wireshark,监听any端口
过滤器设置:tcp.port == 6653(ovs控制器的端口号)
过滤器不要设置openflow啥的,woc,真是…

在这里插入图片描述
Open vSwitch(OVS)是一种虚拟交换机,主要用于在软件定义网络(SDN)中实现网络流量的转发和管理。OpenFlow 是一种通信协议,它定义了控制器与交换机之间的通信方式,允许控制器对交换机进行远程配置和管理。

在一般情况下,OVS通过监听其所连接的交换机上的OpenFlow消息来实现控制器与交换机的通信。当交换机上发生特定事件或需要特定操作时,交换机将生成相应的OpenFlow消息,这些消息将被发送到与OVS连接的控制器。

具体来说,当OVS与交换机建立连接后,交换机将发送一个特定类型的OpenFlow消息,即Hello消息,以通知控制器其存在。随后,交换机和控制器之间将进行握手过程,以确保它们能够相互理解和协商通信参数。

在握手完成后,OVS可以通过将特定的OpenFlow消息发送给控制器来请求配置指令、获取网络状态或报告事件。这些消息可以是FlowMod(流表修改)消息,用于控制数据包的转发行为;PacketIn(数据包进入)消息,用于通知控制器某个数据包需要进一步处理;PacketOut(数据包输出)消息,用于控制器主动发送数据包等。

当OVS与交换机建立连接后,交换机将定期生成和发送OpenFlow消息给控制器,以实现交换机与控制器之间的通信和协调
关闭floodlight项目,重新启动,发现hello报文

参考文章-简书-曾悦_3b69(作者)-4.2 OpenFlow 协议
openflow报文格式:
在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述
可以看到协议的版本是1.3
Srcport是交换机端口号,dst是controller端口号,这一点可以在网站上看到。
在这里插入图片描述
在这里插入图片描述

同样的,控制器也回复了hello报文
在这里插入图片描述
Feature request & featrue reply
控制器向交换机询问端口特征,交换机回复
在这里插入图片描述
交换机收到feature_request消息之后会回复feature_reply消息来报告自己的特性。具体来说,会有交换机自身支持的流表数量,最多能缓存的数据包数量,端口特性等。

交换机报告自身的特性之后,控制器能够更具这些特性下发指令。

datapath id 数据通道标识符,用来表示交换机的身份。在每一个控制器中独一无二。

n_buffers 一次最多缓存的数据包数量,即交换机自己的缓存能力。

n_tables 表示交换机支持的流表数量。

capabilities 交换机端口所支持的功能,有流表,端口,STP,队列,ARP等。
在这里插入图片描述

actions 该bitmask表示交换机所支持的actions,有转发和修改包头两种。

port 交换机连接的端口消息。端口MAC地址,链路数据等。
在这里插入图片描述

在这里插入图片描述

OFPT_GET_CONFIG_REQUESTOFPT_GET_CONFIG_REPLY(OFPT_GET_CONFIG_REQUEST= OFPT_SET_CONFIG

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

ovs-虚拟机网络互联
floodlight安装
ovs安装

FLOW_MOD

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

GROUP_MOD
在这里插入图片描述
BARRIER_REQUEST 和reply
消息被拦截
在这里插入图片描述

ECHO
在这里插入图片描述

ovs-ofctl -O OpenFlow13 show ovs-br
sudo hping3 -c 10 -S -p 80 <目标IP>

sudo: 使用超级用户权限来执行这个命令,这是因为hping需要底层的网络访问权限。
hping3: 这是hping工具的名称,用于发起网络测试和伪造数据包。
-c 10: 这个选项指定要发送的数据包数量为10个。你可以根据需要更改此值。
-S: 这个选项指定发送TCP SYN数据包,这是TCP三次握手过程的第一步。
-p 80: 这个选项指定目标端口为80,也可以根据需要更改为其他端口号。
<目标IP>: 这里你需要替换为你要测试的目标主机的IP地址。

sudo hping3 -c 10 --icmp <目标IP>

sudo: 使用超级用户权限来执行该命令,以获取底层的网络访问权限。
hping3: hping工具的名称。
-c 10: 这个选项指定要发送的ICMP数据包的数量为10个。你可以根据需要进行调整。
--icmp: 这个选项指定发送ICMP数据包。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

mybatis日志工厂

前言&#xff1a; 如果一个数据库操作&#xff0c;出现异常&#xff0c;我们需要排错&#xff0c;日志就是最好的助手 官方给我们提供了logImpl&#xff1a;指定 MyBatis 所用日志的具体实现&#xff0c;未指定时将自动查找。 默认工厂&#xff1a; 在配置文件里添加&#xf…

vue中使用vab-magnifier实现放大镜效果

效果图如下&#xff1a; 1. 首先&#xff0c;使用npm或yarn安装vab-magnifier插件&#xff1a; npm install vab-magnifier或 yarn add vab-magnifier2. 在Vue组件中引入vab-magnifier插件&#xff1a; import VabMagnifier from vab-magnifier; import vab-magnifier/lib…

边缘计算在交通行业的应用有哪些?

随着我国城市化进程的不断加快。人民生活水平不断提高。随之带来的私家车辆增多导致的交通拥堵问题。智慧交通作为一种新兴的交通模式&#xff0c;对传统交通行业产生了深远的影响。 智慧交通利用边缘计算和物联网等先进人工智能技术&#xff0c;赋能传统交通行业数字化升级。…

【JavaEE初阶】Tomcat安装与使用及初识Servlet

文章目录 1. Tomcat的安装与使用1.1 Tomcat安装1.2 Tomcat的启动1.3 Tomcat部署前端页面 2. Servlet2.1 Servlet是什么2.2 第一个Servlet程序2.3 常见错误 1. Tomcat的安装与使用 1.1 Tomcat安装 在浏览器中搜索Tomcat,打开官方网页.Tomcat官网 点击下载Tomcat8. 点击下载压…

Java语言简介

个人记录学习Java的笔记&#xff0c;内容不全面不准确 Java历史 Java是一种简单易用&#xff0c;与平台无关&#xff0c;完全面向对象的编程语言。Java诞生于20世纪90年代初期&#xff0c;前身是SUN公司为智能化家电开发的Oak语言&#xff0c;它的基础是C与C语言&#xff0c;由…

什么是iPaaS?浅谈iPaaS的未来发展方向

什么是iPaaS&#xff1f; iPaaS&#xff0c;即集成平台即服务&#xff08;Integration Platform as a Service&#xff09;&#xff0c;是一种云计算服务模型&#xff0c;旨在帮助企业简化应用程序和数据的集成过程。通过iPaaS&#xff0c;企业可以在云环境中轻松地将不同的应…

给你推荐一款快速通过 typescript 生成 jsonschema 的包处理器

theme: github fast-typescript-to-jsonschema Typescript 生成 jsonschema 数据插件 性能 案例 interface AAA {a: number;b: string;c: boolean; }解析器解析耗时fast-typescript-to-jsonschema15mstypescript-json-schema5430ms 特性 编译Typescript文件以获取完整的类…

基于因果关系知识库的因果事件图谱构建、文本预处理、因果事件抽取、事件融合等

项目设计集合&#xff08;人工智能方向&#xff09;&#xff1a;助力新人快速实战掌握技能、自主完成项目设计升级&#xff0c;提升自身的硬实力&#xff08;不仅限NLP、知识图谱、计算机视觉等领域&#xff09;&#xff1a;汇总有意义的项目设计集合&#xff0c;助力新人快速实…

postgresql四种逻辑复制的状态

准备 CreateCheckpoint&#xff0c;或者bgwriter启动时&#xff0c;或者创建logicalreplicationslot时都会调用LogStandbySnapshot 记录一个XLOG_RUNNING_XACTS类型的日志。日志中记录了所有提交的事务的xid(HistoricSnapshot) 启动&#xff08;SNAPBUILD_BUILDING_SNAPSHOT&…

uniapp使用uni-swipe-action后右侧多了小于1px的间隙

问题&#xff1a;uniapp使用uni-swipe-action后右侧多了小于1px的间隙。且在真机上没有问题&#xff0c;但是在微信开发者工具中有问题。 代码如下&#xff1a;在滑动滑块或者点击这个区域时&#xff0c;就会出现问题。 <scroll-view :scroll-y"true" :style&quo…

Android 帧率分析

卡顿&#xff1a; 界面呈现是指从应用生成帧并将其显示在屏幕上的动作。如需确保用户能够流畅地与您的应用互动&#xff0c;您的应用呈现每帧的时间不应超过 16ms&#xff0c;以达到每秒 60 帧的呈现速度&#xff08;为什么是 60fps&#xff1f;&#xff09;。如果您的应用存在…

TRT4-trt-integrate - 3 使用onnxruntime进行onnx的模型推理过程

前言&#xff1a; onnx是microsoft开发的一个中间格式&#xff0c;而onnxruntime简称ort是microsoft为onnx开发的推理引擎。允许使用onnx作为输入进行直接推理得到结果。 py接口的推理过程&#xff1a; main函数&#xff1a; if __name__ "__main__":session onn…

Faiss简单使用

Faiss是Facebook AI Research开发的快速相似性搜索&#xff08;similarity search&#xff09;计算库&#xff0c;为稠密向量提供高效相似度搜索和聚类&#xff0c;支持十亿级别向量的搜索。 Faiss 的核心原理是基于向量索引和近似最近邻搜索。它通过构建索引结构来加速相似性…

android9-android13 AMS演进初窥

目录 一&#xff1a;概览 WindowManagerService 基本介绍 ActivityManagerService 基本介绍 二&#xff1a;AMS及其关联的WMS中主要组件的类图和对像图 一&#xff1a;android 9中AMS/WMS的类图和对像图 二&#xff1a;android 10中AMS/WMS的类图和对像图 三&#xff1a…

怎么给图片去底色?这几个方法一定要知道

如果你是一位设计师或者是需要制作图片的人&#xff0c;那么你一定知道去除图片底色的重要性。无论是制作海报、广告、产品图片还是网站页面&#xff0c;去除图片底色可以让你的设计更加精细、美观、专业。在本文中&#xff0c;我们将介绍三种常见的图片去底色方法&#xff0c;…

p7付费课程笔记5:串行gc以及并行gc

前言 前段时间我们学习jvm的基础结构和gc相关的基础知识&#xff0c;今天我们详细讲讲几大gc。 串行gc 串行 GC 对年轻代使用 mark-copy (标记-复制) 算法&#xff0c;对老年代使用 mark-sweep-compact (标记-清除-整理) 算法。 两者都是单线程的垃圾收集器&#xff0c;不能…

百度AI成为移动生态强者的真相

移动互联网的发展&#xff0c;让移动生态成为了互联网企业竞争的重要战场。在这场竞争中&#xff0c;百度AI凭借着其优质的技术实力和完善的生态系统&#xff0c;成为了移动生态中的强者。 那么&#xff0c;百度AI究竟靠什么成为了强者呢&#xff1f;首先&#xff0c;百度AI的技…

网络安全/黑客零基础入门(经验分享)

相关网站推荐 博主研究方向为安全领域&#xff0c;以后可能更多的在圈子内发表文章&#xff0c;提高文章质量。 1、FreeBuf 国内关注度最高的全球互联网安全媒体平台&#xff0c;爱好者们交流与分享安全技术的社区&#xff0c;网络安全行业门户。 2、看雪 看雪论坛是个软件…

GB/T 25000.51解读——软件产品的兼容性怎么测?

GB/T 25000.51-2016《软件产品质量要求和测试细则》是申请软件检测CNAS认可一定会用到的一部国家标准。在前面的文章中&#xff0c;我们为大家整体介绍了GB/T 25000.51-2016《软件产品质量要求和测试细则》国家标准的结构和所涵盖的内容以及对软件产品的八大质量特性中的功能性…

Failed to load local font resource:微信小程序加载第三方字体

加载本地字体.ttf 将ttf转换为base64格式&#xff1a;https://transfonter.org/ 步骤如下 将下载后的stylesheet.css 里的font-family属性名字改一下&#xff0c;然后引进页面里就行了&#xff0c;全局样式就放app.scss&#xff0c;单页面就引入单页面 注&#xff1a; .title…