ARP..
ARP
0 前言
真正接触到现网才发现ARP十分重要,无论是排错还是S-MLAG都需要用到ARP这个协议,以前对于ARP的理解比较混乱;所以这次对其中的主要内容做个梳理;一定要学好ARP!!!
1 ARP的概念
Ardress resolution protocol,地址解析协议,通过IP层解析出MAC层,帮助数据包转发到下一跳的协议;
2 ARP表
2.1 ARP表内容
主要的内容有以下几个:IP MAC interface age;
着重说一下 :interface,ARP表的interface一定是物理接口,因为三层数据转发的出接口就是依赖ARP表项中的interface;
什么意思?也就是我们根据ARP表封装完MAC层之后,转发是根据ARP表里的interface,而不是MAC表的interface;下面就来验证:
在正常情况下,PC1 ping通 PC2 后,也就是产生ARP表项后,我们做以下修改:
-
修改MAC,不修改ARP
将PC2对应的MAC的接口修改到G0/0/3,发现ICMP还是从G0/0/2走,则证明不是依靠MAC转发
-
修改ARP,不修改MAC
将PC2对应的ARP的接口修改到G0/0/3,发现ICMP是从G0/0/3走,则证明是依靠ARP转发
注:一定是物理口,像锐捷设备他的ARP表不全,可能出现interface是vlanif的情况,只需要输入
show arp details
就可以显示完整的ARP表,其中就有关联物理接口;
2.2 ARP表更新条件
报文类型 | 更新ARP表条件 | 更新内容 |
---|---|---|
免费ARP | ①ARP表中已存在Sender IP对应的表项(可以是只有IP的临时表性) | 用Sender IP和Sender Mac更新表项信息 |
ARP_request | ①Target_IP为进接口IP | 用Sender IP和Sender Mac更新表项信息 |
ARP_reply | ①Target_IP为进接口IP ②ARP表中已经存在Sender IP表项(可以是只有IP的临时表项) | 用Sender IP和Sender Mac更新表项信息 |
注意,以上的更新条件仅限于普通的ARP流程,如果是代理ARP,那么上面的更新条件将被颠覆;
报文类型 | 更新ARP表条件 | 更新内 |
---|---|---|
ARP_request | ①Target_IP可达 | 用Sender IP和Sender Mac更新表项信息 |
ARP_reply | ①Target_IP可达 ②ARP表中已经存在Sender IP表项(可以是只有IP的临时表项) | 用Sender IP和Sender Mac更新表项信息 |
2.3 ARP表删除条件
-
ARP表中的age超时
-
ARP表中的interface接口down
这点很关键,这就说明ARP能够对物理接口的状态动态感知,一旦物理接口DOWN,ARP表项消失
这也是S-MALG联动ARP转32位路由的重要原因之一;
3 ARP的流程
-
本地产生数据包,封装数据层和IP层,根据IP层查询路由表
-
查询路由表的目的是为了将流量先转发到一个本地接口
-
转发到接口的目的是为了下一步MAC地址的封装判断
-
判断该转发接口的IP和报文的目的IP是否是一个网段
如果同网段,则查看ARP表有无目的IP对应的MAC
有,则直接根据ARP表项封装
无,则该接口发送ARP请求,其中Target ip为包的目的IP如果异网段,看路由是否有下一跳
有下一跳,则查看ARP表是否有路由下一跳的MAC地址
有,则直接根据ARP表项封装
无,则该接口发送ARP请求,其中Target ip为路由下一跳的IP
没下一跳,则查看ARP表是否有无目的IP对应的MAC
有,则直接根据ARP表项封装
无,则该接口发送ARP请求,其中Target ip为包的目的IP -
根据获取到的ARP表项,封装包的MAC层,然后根据ARP的interface项将报文转发出去;
这些上面的语言过于抽象,我们将从下面几个场景,对ARP的流程做一个验证和梳理,希望方便理解;以下场景默认ARP表都为初始状态(空),后面不再赘述;
3.1 普通网关
PC1的网关为192.168.1.254,PC2的网关为192.168.2.254,PC1试图ping PC2;
①PC1产生icmp echo数据层,然后封装IP层,其中源IP为192.168.1.1,目的IP为192.168.2.1;
②PC1查询自己的路由表,因为PC1设置了网关【网关本质就是一条默认路由 0.0.0.0 0.0.0.0 G0/0 192.168.1.254
】,目的IP匹配了这一条路由,所以将数据包先送到G0/0;
③判断该转发接口的IP和报文的目的IP不是一个网段,且存在下一跳,为192.168.1.254,由于ARP表没有这个IP的表项,所以本地生成一个ARP的临时表项【IP:192.168.1.1 MAC:?】,并且该接口发送ARP请求,其中的Target IP为192.168.1.254;
④网关收到ARP Request后,发现Target IP为自己,所以用这个ARP请求的Sender ip和Sender MAC更新自己的ARP表项目【IP:PC1 MAC PC1 interface:G0/1】,并且回复ARP Reply包;
⑤PC1收到Reply后,利用其中的Sender IP和MAC以及自己产生的临时表项更新自己的ARP表【IP:R MAC:R interface:G0/0】
⑥PC1根据更新的表项,封装icmp echo的MAC层,并且根据ARP表中的interface将数据转发出去;
⑦icmp echo到达R;
⑧R先查看MAC层,发现目的MAC为自己,解封装二层;查看三层,发现目的IP为192.168.2.1,和本地路由表中的192.168.254.0/24 g0/1
的直连路由匹配;所以将数据包送到G0/3接口;
⑨判断该转发接口的IP和报文的目的IP是一个网段,由于本地ARP表没有192.168.2.1的MAC,所以本地生成一个ARP的临时表项【IP:192.168.2.1 MAC:?】,并且该接口发送ARP请求,其中的Target IP为192.168.2.1;
⑩PC2收到ARP Request后,发现Target IP为自己,所以用这个ARP请求的Sender ip和Sender MAC更新自己的ARP表项目【IP:R MAC:R interface:G0/4】,并且回复ARP Reply包;
⑩R收到Reply后,发现其中的Targer IP为自己,利用其中的Sender IP和MAC以及自己产生的临时表项更新自己的ARP表【IP:PC2 MAC:PC2 interface:G0/3】
⑪R根据更新的表项,封装icmp echo的MAC层,并且根据ARP表中的interface将数据转发出去;
⑫PC2收到数据包,在回复echo reply时候,就顺利很多,因为沿途都有ARP表项,不再赘述;
3.2 VLANif网关
PC1的网关为192.168.1.254,PC2的网关为192.168.2.254,PC1试图ping PC2;
在此基础上,中间的由器换成三层交换机,PC1属于VLAN 1,PC2属于VLAN 2,他们的网关位置被移到VLANif口
①PC1产生icmp echo数据层,然后封装IP层,其中源IP为192.168.1.1,目的IP为192.168.2.1;
②PC1查询自己的路由表,因为PC1设置了网关【网关本质就是一条默认路由 0.0.0.0 0.0.0.0 G0/0 192.168.1.254
】,目的IP匹配了这一条路由,所以将数据包先送到G0/0;
③判断该转发接口的IP和报文的目的IP不是一个网段,且存在下一跳,为192.168.1.254,由于ARP表没有这个IP的表项,所以本地生成一个ARP的临时表项【IP:192.168.1.1 MAC:?】,并且该接口发送ARP请求,其中的Target IP为192.168.1.254;
④网关收到ARP Request后,发现Target IP为自己,所以用这个ARP请求的Sender ip和Sender MAC更新自己的ARP表项目【IP:PC1 MAC PC1 interface:G0/1】,并且回复ARP Reply包;
⑤PC1收到Reply后,利用其中的Sender IP和MAC以及自己产生的临时表项更新自己的ARP表【IP:R MAC:R interface:G0/0】
⑥PC1根据更新的表项,封装icmp echo的MAC层,并且根据ARP表中的interface将数据转发出去;
⑦icmp echo到达R;
⑧R先查看MAC层,发现目的MAC为自己,解封装二层;查看三层,发现目的IP为192.168.2.1,和本地路由表中的192.168.254.0/24 vlanif2
的直连路由匹配;所以将数据包送vlanif2逻辑接口;
⑨判断该转发接口的IP和报文的目的IP是一个网段,由于本地ARP表没有192.168.2.1的MAC,所以本地生成一个ARP的临时表项【IP:192.168.2.1 MAC:?】,并且该接口发送ARP请求(带VLAN 2的TAG,所以二层支持转发VLAN 2的接口都会发),其中的Target IP为192.168.2.1;
⑩PC2收到ARP Request后,发现Target IP为自己,所以用这个ARP请求的Sender ip和Sender MAC更新自己的ARP表项目【IP:R MAC:R interface:G0/4】,并且回复ARP Reply包;
⑪R收到Reply后,发现其中的Target IP为自己,于是利用其中的Sender IP和MAC以及自己产生的临时表项更新自己的ARP表【IP:PC2 MAC:PC2 interface:G0/3】
⑫R根据更新的表项,封装icmp echo的MAC层,并且根据ARP表中的interface将数据转发出去;
⑬PC2收到数据包,在回复echo reply时候,就顺利很多,因为沿途都有ARP表项,不再赘述;
4 ARP代理
4.1 作用
当本地接口收到一个目的MAC不为自身MAC的ARP请求时,开启了ARP代理的本地接口会尝试帮助发送方进行报文的转发;
4.2 ARP代理流程
- 开启ARP代理的本地接口收到一个目的MAC非自己的ARP请求
- 本地查看路由表,看ARP请求的Target ip是否可达
如果可达,回复ARP_Reply进行ARP欺骗,将数据包引流到本地后进一步转发;
如果不可达,不做回复;
下面讲几个实习中碰到的例子:
4.2.1 S-MLAG
PC1和PC2是同网段;S上存在一个VLANIF1,作为PC1和PC2的网关,并且开启了ARP代理;
G0/1和G0/4开启了端口隔离,不能直接通过二层互通;
①PC1产生icmp echo数据层,然后封装IP层,其中源IP为192.168.1.1,目的IP为192.168.1.3;
②PC1查询自己的路由表,目的IP匹配了【192.168.1.0 g0/0】这一条路由,所以将数据包先送到G0/0;
③判断该转发接口的IP和报文的目的IP是一个网段,由于本地ARP表没有192.168.1.3的MAC,所以本地生成一个ARP的临时表项【IP:192.168.1.3 MAC:?】,并且该接口发送ARP请求,其中的Target IP为192.168.1.3;
④网关收到ARP Request后,发现Target IP不是自己,但是VLANIF 1它开启了ARP代理,所尝试进行数据包的转发:查看自身路由表发现存在【192.168.1.0/24 vlanif1】的路由,所以判断ARP中的Target ip 192.168.1.3可达,所以进行ARP欺骗:先根据Target IP中的【Sender IP和MAC更新本地ARP表】,并且回复给PC1 ARP_Reply【Sender IP: PC2 Sender MAC:VLANIF1 Target IP:PC1 Target MAC:PC1】进行ARP欺骗;
⑤PC1收到Reply后,利用其中的Sender IP和MAC以及自己产生的临时表项更新自己的ARP表【IP:PC2 MAC:VLANIF1 interface:G0/0】
⑥PC1根据更新的表项,封装icmp echo的MAC层,并且根据ARP表中的interface将数据转发出去;
⑦icmp echo到达S的VLANIF1;
⑧VLANIF1先查看MAC层,发现目的MAC为自己,解封装二层;查看三层,发现目的IP为192.168.1.3,和本地路由表中的192.168.1.0/24 vlanif1
的直连路由匹配;所以将数据包送到vlanif1接口;
⑨判断该转发接口的IP和报文的目的IP是一个网段,由于本地ARP表没有192.168.1.3的MAC,所以本地生成一个ARP的临时表项【IP:192.168.1.3 MAC:?】,并且该接口发送ARP请求(带VLAN 1的TAG,所以二层支持转发VLAN 2的接口都会发),其中的【Sender IP: PC1 Sender MAC: VLANIF1 Target IP:PC2】【ARP欺骗】;
⑩PC2收到ARP Request后,发现Target IP为自己,所以用这个ARP请求的Sender ip和Sender MAC更新自己的ARP表项目【IP:PC1 MAC:VLANIF1 interface:G0/4】,并且回复ARP Reply包;
⑪S收到Reply后,利用其中的Sender IP和MAC以及自己产生的临时表项更新自己的ARP表【IP:PC2 MAC:PC2 interface:G0/3】
⑫S根据更新的表项,封装icmp echo的MAC层,并且根据ARP表中的interface将数据转发出去;
⑬PC2收到数据包,在回复echo reply时候,就顺利很多,因为沿途都有ARP表项,不再赘述;
4.2.2 路由
R1和R2互联,其中R1有一条静态路由【2.2.2.2 32 G0/0】,这条静态路由没有指定下一跳IP地址;
R2上面有一个环回接口,IP地址为2.2.2.2;
现:关闭R2的G0/1接口的arp代理功能;然后R1 ping 2.2.2.2;发现无法ping通;
再:开启R2的G0/1接口的arp代理功能;然后R1 ping 2.2.2.2;发现可以ping通;
简单解释一下:
R1上的2.2.2.2的路由没有配置下一跳IP,而且出接口的IP和目的IP不是一个网段;
所以R1发送的ARP请求中的Target IP为2.2.2.2;
如果R2的G0/1没开启ARP代理,因为Target IP不是自己,就不会回复,也就不可达;
如果R2的G0/1开启了ARP代理,那就可以帮忙转发,也就可达;
综上:
配置路由的时候,务必配上下一跳IP,因为出接口不配置也能迭代出来;
一方面,如果接收口没开启ARP代理功能,就无法可达;
另一方面,配置下一跳之后,对于本地来说,访问多个相同下一跳的网段,只会有一条ARP记录,节省表项;
相关文章:
ARP..
ARP 0 前言 真正接触到现网才发现ARP十分重要,无论是排错还是S-MLAG都需要用到ARP这个协议,以前对于ARP的理解比较混乱;所以这次对其中的主要内容做个梳理;一定要学好ARP!!! 1 ARP的概念 Ar…...
电子电器架构 ---整车区域控制器
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 所谓鸡汤,要么蛊惑你认命,要么怂恿你拼命,但都是回避问题的根源,以现象替代逻辑,以情绪代替思考,把消极接受现实的懦弱,伪装成乐观面对不幸的…...
HBase、Hive、Redis 和 MongoDB的对比
1. 数据库管理 操作HBaseHiveRedisMongoDB创建数据库N/A (HBase 没有数据库概念)CREATE DATABASE db_name;N/A (Redis 没有数据库命名功能)use db_name; (自动创建)查看数据库N/ASHOW DATABASES;INFO 查看全局信息show dbs;删除数据库N/ADROP DATABASE db_name CASCADE;N/Adb.…...
前端在WebSocket中加入Token
在WebSocket通信中加入Token主要是为了实现身份验证和授权,确保只有经过验证的用户可以建立WebSocket连接。由于WebSocket API本身不支持直接在连接时设置HTTP头部,因此需要采用一些变通的方法来传递Token。以下是几种常见的方法: 1、通过UR…...
图解HTTP-HTTP报文
参考资料:图解HTTP HTTP报文 用于HTTP协议交互的信息被称为HTTP报文。请求端的HTTP请求报文,响应端(服务器端)的叫做响应报文。HTTP报文本身是由多行(CR LF作为换行符)数据行构成的文本。 请求报文及响…...
后端使用Spring Boot框架 + 前端VUE 实现滑动模块验证码
在现在常用的登录验证码方式有很多种,但是都不可避免被攻击,但是有很多方式可以防止被攻击,从而进行维护。 现在我就讲解一下滑动块验证码的实现方式: 这个是前端代码,我使用的是vue,在使用的时候注意&am…...
NOTEBOOK_11 汽车电子设备分享(工作经验)
汽车电子设备分享 摘要 本文主要列出汽车电子应用的一些实验设备和生产设备,部分会给予一定推荐。目录 摘要一、通用工具:二、测量与测试仪器2.1测量仪器2.2无线通讯测量仪器2.3元器件测试仪2.4安规测试仪2.5电源供应器2.6电磁兼容测试设备2.7可靠性环境…...
Spring Mvc面试题(常见)
1 Spring MVC的执行流程 用户发起请求,请求先被Servlet拦截以后,转发给SpringMVC框架SpringMVC 里面的DispatcherServlet(核心控制器) 接收到请求,并转发给HandlerMappingHandlerMapping负责解析请求,根据请求信息和配置信息找到匹配的Controller类(当这里有配置拦截器,会…...
javaEE--计算机是如何工作的-1
目录 一.计算机的组成: 各组件的功能: 衡量cpu好坏的标准: 二.指令(instruction) 三.操作系统Operating System 四.进程/任务process/tesk 五.进程在系统中如何管理 1.进程在系统中的管理,从两个角度来分类: 2.进程控制块PCB(Process Control Block)) 3.P…...
【Mysql】函数有哪些
mysql函数有哪些? MySQL 提供了许多内置函数,用于执行各种操作,包括字符串处理、日期时间操作、数学计算、数据转换等。以下是一些常用的 MySQL 函数分类及其示例: 字符串函数 CONCAT(str1, str2, ...):将多个字符串…...
「Mac畅玩鸿蒙与硬件45」UI互动应用篇22 - 评分统计工具
本篇将带你实现一个评分统计工具,用户可以对多个选项进行评分。应用会实时更新每个选项的评分结果,并统计平均分。这一功能适合用于问卷调查或评分统计的场景。 关键词 UI互动应用评分统计状态管理数据处理多目标评分 一、功能说明 评分统计工具允许用…...
实验13 C语言连接和操作MySQL数据库
一、安装MySQL 1、使用包管理器安装MySQL sudo apt update sudo apt install mysql-server2、启动MySQL服务: sudo systemctl start mysql3、检查MySQL服务状态: sudo systemctl status mysql二、安装MySQL开发库 sudo apt-get install libmysqlcli…...
Azure虚拟机非托管磁盘大小调整
想要扩容一个Azure VM 的磁盘空间,门户里面竟然无法扩展,点点鼠标就完事的时代在离去,微软越来不想微软。 在门户里面即便使用Azure Cli命令行也不行。 PS /home/gpchina> az disk list [] 返回为空,根本没有返回磁盘。 不过使…...
MySQL数据库下载及安装教程
链接:MySQL数据库下载及安装教程(最最新版)_mysql下载安装-CSDN博客 亲测安装成功了💕 把这个路径放到系统环境变量里头 MD!我这安到C盘去了,就很烦🤬😡 在CMD登录试一下 mysql -h localhos…...
使用 UniApp 在微信小程序中实现 SSE 流式响应
概述 服务端发送事件(Server-Sent Events, SSE)是一种允许服务器向客户端推送实时更新的技术。SSE 提供了一种单向的通信通道,服务器可以持续地向客户端发送数据,而不需要客户端频繁发起请求。这对于需要实时更新的应用场景非常有用。 流式传输的特点是将数据逐步传输给客…...
基础数据结构---栈
顺序表实现 一、栈类的声明 栈是一种特殊的线性表,可以由顺序表来实现,也可以由链表来实现,这节课,我们采用顺序表来实现栈。 #include <iostream>#include <stdexcept>using namespace std;template<typename …...
Redis 最佳实践
这是以前写下来的文章,发出来备份一下 Redis 在企业中的最佳实践可以帮助提高性能、可用性和数据管理效率。以下是一些推荐的做法: 选择合适的数据结构: 根据需求选择适当的 Redis 数据结构(如 Strings、Lists、Sets、Hashes、So…...
前端零基础学习Day-Eight
CSS字体和文本样式 CSS文字样式 字体:font-family 语法:font-family:[字体1][,字体2][,…] p{font-family:“微软雅黑”,“宋体”,“黑体”;} 含空格字体名和中文,用英文引号括起 属性值:具体字体名,字体集 字体集&…...
在Vue3中实现文件上传功能,结合后端API
随着现代Web应用程序的不断发展,文件上传成为了用户交互中不可或缺的一部分。在本篇博客中,我们将深入讨论如何在Vue3中实现一个文件上传功能,并与后端API进行交互。我们将使用Vue3的Composition API(setup语法糖)来构…...
智慧商城:点击“加入购物车”判断是否登录来进行跳转到登录页登录并回跳 + 发请求渲染加入购物车数量的角标
点击“加入购物车”判断是否登录来进行跳转到登录页登录并回跳 按需引入需要的 Dialog 组件并进行全局注册 Vue.use( )仅仅在Vue组件的上下文中起作用,所以在Vue组件中通过 this.$ 来使用 在 js 文件中则还要导入,然后直接使用,并不需要 this…...
植物大战僵尸杂交版v3.0.2最新版本(附下载链接)
B站游戏作者潜艇伟伟迷于12月21日更新了植物大战僵尸杂交版3.0.2版本!!!,有b站账户的记得要给作者三连关注一下呀! 不多废话下载链接放上: 夸克网盘链接::https://pan.quark.cn/s/5c…...
后端统一接口返回状态【初步模板】
后端统一接口返回状态【模板】 文章目录 后端统一接口返回状态【模板】1 .Result类编写2 .Constants类编写3 .更改Controller层下的类return格式 开发过程中,每个接口的返回格式设计都是一样的,这样可以大大提高开发效率。 项目结构如下图:分…...
QML Text组件
文章目录 前言主体基本文本显示字体和样式富文本支持长文本的处理文本样式与效果超链接Label 元素总结 前言 在 QML 中,Text 和 Label 是常用的文本显示元素,它们在显示文本方面具有相似性,但在功能和定制性上也存在一些差异。Text 元素用于…...
cv2.addWeighted用法详解
cv2.addWeighted 是 OpenCV 中用于图像加权叠加的函数,常用于将两张图像按一定比例融合在一起。它通过对两张图像的像素进行加权和求和的操作,可以实现透明度调整、图像混合、图像融合等效果。 函数定义 cv2.addWeighted(src1, alpha, src2, beta, gam…...
基于微信小程序的消防隐患在线举报系统
博主介绍:java高级开发,从事互联网行业六年,熟悉各种主流语言,精通java、python、php、爬虫、web开发,已经做了多年的设计程序开发,开发过上千套设计程序,没有什么华丽的语言,只有实…...
牛客网 SQL36查找后排序
SQL36查找后排序 select device_id,age from user_profile order by age asc #select [字段1,字段2] from [表名] order by [字段1] [升序(asc)/降序(desc)],[字段2] [升序(asc)/降序(desc)] #select:查询 #order by 排序 每日问题 如何实现对象的克隆࿱…...
Dart 中的构造函数
在 Dart 中,类的构造函数用于初始化类的对象。当你创建一个类的实例时,构造函数被自动调用。Dart 支持多种构造函数的写法,包括常规构造函数、命名构造函数、工厂构造函数等。 一、传统构造函数 默认构造函数是没有名字的构造函数ÿ…...
实现 WebSocket 接入文心一言
目录 什么是 WebSocket? 为什么需要 WebSocket? HTTP 的局限性 WebSocket 的优势 总结:HTTP 和 WebSocket 的区别 WebSocket 的劣势 WebSocket 常见应用场景 WebSocket 握手过程 WebSocket 事件处理和生命周期 WebSocket 心跳机制 …...
GO--堆(have TODO)
堆 堆(Heap)是一种特殊的数据结构。它是一棵完全二叉树(完全二叉树是指除了最后一层外,每一层上的节点数都是满的,并且最后一层的节点都集中在左边),结放在数组(切片)中…...
【Python随笔】Enigma密码机的原理及python代码实现
最近笔者接触到了Cypher这款游戏,玩法很简单,就是通过文字、图片等各种表达手段组成的谜面,猜一段英文,算是初步接触了密码学的一些知识。游戏中提到了很多类型的密码,其中Enigma密码机就是单独一种,在电影…...
二叉树 -- 堆(详解)
目录 1、堆的概念及结构 2、堆的实现(附代码) 2.1、向下调整算法建堆 3、堆的应用(附代码) 3.1、堆排序 3.2、TOP-K问题 1、堆的概念及结构 如果有一个关键码的集合K { k0,k1 ,k2 ,…,k(n-1) },把它的所有元素…...
gradle项目下载依赖报错
报错信息 Cannot resolve external dependency org.projectlombok:lombok:1.18.36 because no repositories are defined. Required by:project :Possible solution:- Declare repository providing the artifact, see the documentation at https://docs.gradle.org/current/…...
WPS怎么都无法删除空白页_插入空白页一次插入两张?_插入横屏空白页_横屏摆放图片_这样解决_显示隐藏段落标记---WPS工作笔记001
在wps使用的过程中你们有没有碰到过这种问题,就是,我贴图,因为图片太大,我需要把图片,横屏显示,这个时候我需要插入一个空白页,那么,在空白菜单下,点击,有时候会点击插入空白页,会一下子自动插入两张空白页.而且,怎么删除都删除不掉. 都快疯掉了. 网上搜索也没有找到好的方法,后…...
flask before_request 请求拦截器返回无值则放行,有值则拦截
环境 Python 3.11.5 Flask 2.2.2完整代码如下: from flask import Flask, make_response, Blueprintapp Flask(__name__) user_blue Blueprint(user, __name__, url_prefix/api/user) user_blue.before_request def befor…...
前端XMLHttpRequest get请求能不能在body中传参数?
文档 查看mdn文档,文档XMLHttpRequest.send()有提到: XMLHttpRequest.send() 方法接受一个可选的参数,其作为请求主体;如果请求方法是 GET 或者 HEAD,则应将请求主体设置为 null。 测试 一个简单的nodejs服务器 var…...
C语言的函数指针
介绍案例 什么是函数指针? 函数指针 是指向函数的指针变量,它可以用来间接调用函数。在 C/C 中,函数指针允许程序在运行时选择调用不同的函数,这使得代码更加灵活和动态。函数指针广泛应用于回调函数、事件处理、动态选择算法等…...
网络安全的学习方向和路线是怎么样的?
石器时代 第一个阶段——石器时代,针对的是纯新手小白刚刚入场。在这个阶段,主要是打基础,需要学习的有五部分内容: Windows Windows上基础的一些命令、PowerShell的使用和简单脚本编写,以及Windows以后经常会打交道…...
酒蒙子骰子小程序系统
酒蒙子流量变现小程序小游戏 后端tp8 前端uniapp 会员变现 分销推广 流量主 …...
html+css网页设计 美食 餐饮杰12个页面
htmlcss网页设计 美食 餐饮杰12个页面 网页作品代码简单,可使用任意HTML辑软件(如:Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作)。 获取源码 1ÿ…...
【济大期末数据库】SQL语法速成
目录 SQL分类 DDL 概念 语法 操作数据库: 1.查询所有数据库 2.查询当前数据库 3.创建数据库 4.删除数据库 5.切换数据库 操作数据库内的表: 1.查询当前数据库所有表 2.查看指定表结构 3.创建表 DML 概念 语法 增(INSERT&am…...
WeakAuras NES Script(lua)
WeakAuras NES Script 修星脚本字符串 脚本1:NES !WA:2!TMZFWXX1zDxVAs4siiRKiBN4eV(sTRKZ5Z6opYbhQQSoPtsxr(K8ENSJtS50(J3D7wV3UBF7E6hgmKOXdjKsgAvZFaPTtte0mD60XdCmmecDMKruyykDcplAZiGPfWtSsag6myGuOuq89EVDV9wPvKeGBM7U99EFVVVV33VFFB8Z2TJ8azYMlZj7Ur3QDR(…...
国内网络在Ubuntu 22.04中在线安装Ollama并配置Open-WebuiDify
配置docker科技网络 登录后复制 创建或编辑 Docker 配置文件 让docker使用代理: sudo mkdir /etc/systemd/system/docker.service.d -p sudo vim /etc/systemd/system/docker.service.d/http-proxy.conf 文件,并添加以下内容: [Service] En…...
SQL 插入数据详解
本文介绍如何利用 SQL 的 INSERT 语句将数据插入表中。 1. 数据插入 顾名思义,INSERT 用来将行插入(或添加)到数据库表。插入有几种方式: 插入完整的行;插入行的一部分;插入某些查询的结果。 下面逐一介…...
中小学教室多媒体电脑安全登录解决方案
中小学教室多媒体电脑面临学生随意登录的问题,主要涉及到设备使用、网络安全、教学秩序等多个方面。以下是对这一问题的详细分析: 一、设备使用问题 1. 设备损坏风险 学生随意登录可能导致多媒体电脑设备过度使用,增加设备损坏的风险。不当…...
Element@2.15.14-tree checkStrictly 状态实现父项联动子项,实现节点自定义编辑、新增、删除功能
背景:现在有一个新需求,需要借助树结构来实现词库的分类管理,树的节点是不同的分类,不同的分类可以有自己的词库,所以父子节点是互不影响的;同样为了选择的方便性,提出了新需求,选择…...
Pycharm和Jupyter Notebook的比较【笔记】
1、Pycharm 特点: (1)集成开发环境(IDE):提供了丰富的功能,如代码自动补全、错误检查、调试工具等。 (2)项目管理:支持大型项目的管理和组织,适合…...
MongoDB(下)
MongoDB 索引 MongoDB 索引有什么用? 和关系型数据库类似,MongoDB 中也有索引。索引的目的主要是用来提高查询效率,如果没有索引的话,MongoDB 必须执行 集合扫描 ,即扫描集合中的每个文档,以选择与查询语句匹配的文…...
AI Agent与MEME:技术与文化融合驱动Web3创新
AI Agent如何引领Web3新时代? 随着Web3与区块链技术的迅速发展,AI Agent作为人工智能与区块链的交汇点,正在逐步成为推动去中心化生态的重要力量。同时,MEME文化凭借其强大的社区驱动力和文化渗透力,在链上生态中扮演着…...
前端如何将pdf等文件传入后端
我们知道在js中我们可以通过: <input type"file" name"file" id"fileInput" accept"image/*">来输入文件。其中type指后端url,accept来限制传入类型。 前端通过表单形式将其传入后端 那么前端是怎么将…...
山景BP1048蓝牙音频任务后台运行设置方法
1、 问题 山景BP1048提供的蓝牙音箱SDK蓝牙音频是不能在后台运行的。例如:现在进入U盘模式播放蓝牙音乐,那么此时蓝牙就会关闭。 但是在特定场景下,需要蓝牙保持连接。 2、解决办法 打开sys_param.c文件 #include <string.h> #incl…...