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

网络协议分析

网络协议分析

  • 网络协议分析概述
    • 用IP实现异构网络互联
    • 网络协议的分层
    • TCP/IP的分层模型
    • 协议分析
    • 协议分析应用
    • 协议分析任务
  • 常见网络协议
  • PPP协议
    • 报文选项
    • IPCP
    • 认证协议PAP
    • 安全缺陷
    • 认证协议CHAP
    • PPPoE
    • 协议流程
  • 地址解析协议ARP
    • ARP的思想和步骤
    • ARP报文格式及封装
  • 移动IP
    • 移动IP的工作机制:代理发现
    • 移动代理通告
    • 移动代理恳求
    • 移动主机判断自己的位置
    • 移动IP的工作机制:注册
    • 移动IP的工作机制:数据传送
    • 移动IP的三角路由问题
    • 隧道技术
      • IP-in-IP封装
      • 最小封装
      • 通用路由封装
  • HTTP协议
    • 持久连接和长度
    • HTTP协商及条件请求
    • 代理服务器和高速缓存
    • HTTP报文格式
    • HTTP面临的安全风险
  • 电子邮件系统
    • 三大部件
    • 系统结构和基本功能
    • 邮箱地址及电子邮件格式
    • 简单邮件传输协议SMTP
    • POP协议
    • IMAP
    • POP VS IMAP
    • 电子邮件系统面临的安全威胁
  • 域名系统DNS
    • 域名解析原理
    • 域名解析原理
    • 高速缓存
    • 减少DNS报文长度的措施
    • DNS面临的安全威胁

网络协议分析概述

  • Internet:Network of Networks(网络之网络)
  • 异构网络互联技术:Vinton Cerf,每个网络内部使用各自的通信协议,每个网络与其它网络通信时使用TCP/IP协议族。

用IP实现异构网络互联

在这里插入图片描述

  • 实际操作层面:用路由器互联
    在这里插入图片描述
  • Internet的构成:
    在这里插入图片描述
  • TCP/IP协议族的引入:简化问题,分而治之。随后在此基础上构建各类应用。

网络协议的分层

  • 分层:将庞大而复杂的问题,转化为若干较小的局部问题。
  • 最初的 ARPANET 设计时提出了分层的设计方法。
  • 1974 年,IBM 按照分层的方法制定并提出系统网络体系结构 SNA (System NetworkArchitecture)。

  • 通用的协议分层思想:理论抽象。

  • TCP/IP的分层模型:理论实现。

  • 通用的协议分层思想:
    在这里插入图片描述

  1. N N N层实体在实现自身定义的功能时,只使用 N − 1 N-1 N1层提供的服务
  2. N N N层向 N + 1 N+1 N+1层提供服务,此服务不仅包括 N N N层本身所具备的功能,还包括由下层服务提供的功能总和
  3. 最底层只提供服务,是提供服务的基础;最高层只是用户,是使用服务的最高层;中间各层既是下一层的用户,又是上一层服务的提供者
  4. 仅在相邻层间有接口,且下层服务的实现细节对上层完全透明
  • 网络协议层间关系:
    在这里插入图片描述

TCP/IP的分层模型

  • 建立在硬件层上的4个软件层:
    在这里插入图片描述
  • 协议分层的原则:第 n n n层所收到的数据就是源主机第 n n n层所发出的数据。
    在这里插入图片描述
  • 操作系统边界和协议地址边界:
    在这里插入图片描述
  • 点到点和端到端:IP层为间隔:
    在这里插入图片描述
  • 协议依赖关系:上层依赖下层
    在这里插入图片描述
  • 协议依赖关系:沙漏模型
    在这里插入图片描述
  • 多路复用和多路分解:多路复用
    在这里插入图片描述
  • 多路复用和多路分解:多路分解
    在这里插入图片描述

协议分析

  • 协议分析也叫网络分析,通过程序分析网络数据包的协议头和尾,从而了解信息和相关的数据包在产生和传输过程中的行为包含该程序的软件和设备就是协议分析器。 本质上协议分析器是在窃听网络通信。
  • 协议分析器的本质是数据包嗅探,观察正在运行的协议实体间交换报文的基本工具被称为数据包嗅探器(packet sniffer),又称分组捕获器。
  • 数据包嗅探器捕获计算机发送和接收的报文
  • 网络嗅探工具通常用来进行协议分析和网络监控,以便于进行故障诊断、性能分析和安全分析等,黑客则用之进行安全敏感信息的监听和截取。
    在这里插入图片描述
  • 分组捕获器需要把网卡设置为“混杂模式” 这样当数据包从嗅探器所连接的网卡上进入系统时,嗅探程序可以接收到整个以太网内的网络数据信息,包括所有的广播、组播和单播数据包,甚至错误的数据包,从而实现数据包捕获。
  • 分组分析器的作用是分析协议报文并把报文中所有字段的内容直观地显示出来。其主要构成通常包括一个包过滤器、数据包缓冲区和解码部分。

协议分析应用

  1. 协议分析器通常用于诊断网络出现故障。
  2. 协议分析器也可以用来测试网络。通常测试可以采用两种方式来进行:一种是主动向网络中发送数据包来测试,另一种是通过侦听不同寻常的通信这种被动方式来测试。
  3. 协议分析器还可以用于搜集网络性能的趋势数据

协议分析任务

  • 网络协议三要素:语法、语意、同步。
    • 语法:常见网络协议的数据包格式
    • 语义:数据包首部和尾部各个字段的含义和作用
    • 同步:各个协议的工作过程

常见网络协议

PPP协议

  • PPP基础:网络接口层协议,数据链路层协议;点到点:数据帧的接收者就是固定对等端;

  • 经典协议的新应用:

    • PPPoA(PPP over ATM):ATM上的PPP;
    • PPPoE(PPP over Ethernet):以太网上的PPP
  • PPP应用场景
    在这里插入图片描述

  • PPP规定的内容:

    1. 帧格式及成帧方法
    2. 链路控制协议LCP:用于建立、配置和测试PPP链路
    3. 网络控制协议NCP:用于建立和配置网络层协议
  • 使用的认证协议:

    1. 口令认证协议PAP:Password Authentication Proto
    2. 基于挑战的握手认证协议CHAP:Challenge Handshake Authentication Protocol

  • 协议流程
    在这里插入图片描述
  • 链路状态转换
    在这里插入图片描述
  • PPP帧格式
    在这里插入图片描述
  • LCP
    在这里插入图片描述
  • 链路配置
    在这里插入图片描述

报文选项

  1. 最大接收单元:MRU,Maximum Receive Unit,用以向对方通告可以接收的最大报文长度;
  2. 认证协议:用以向对方通告使用的认证协议,PAP(C023),CHAP(C223);
  3. 质量协议:用以向对方通告使用的链路质量监控协议,LQR(C025);
  4. 幻数:用以防止环路;
  5. 协议域压缩:PFC,Protocol Field Compression,用以通知对方可以接收“协议”字段经过压缩的PPP帧;
  6. 地址及控制域压缩: ACFC, Address and Control FieldCompression ,用以通知对方可以接收“地址”和“控制”字段经过压缩的PPP帧
    在这里插入图片描述
  • 链路终止
    在这里插入图片描述
  • 链路维护:用于错误通告及链路状态检测
    在这里插入图片描述

IPCP

  • 基本思想
    1. 与LCP的配置协商过程类似;
    2. 定义的报文类型包括:Configure-Request、Configure-Ack、Configure-Nak、Configure-Reject、Terminate-Request、Terminate-Ack和Code-Reject。
    3. 定义的配置选项:多个IP地址、IP压缩协议、IP地址。
  • IP压缩协议:用以协商使用的压缩协议,IPCP仅规定了“Van Jacobson(002D)”。
  • IP地址:发起方在Configure-Request中包含该选项,请求回应方分配一个IP地址;回应方在Configure-Nak包含该选项,返回合法IP。

认证协议PAP

在这里插入图片描述

  • 报文格式
    在这里插入图片描述

安全缺陷

  1. 身份和口令信息明文传输,无法防止窃听、重放和穷举攻击
  2. PPP仅在建立链路的阶段使用,在数据传输过程中不能使用,这意味着通信过程中不能再验证对等端身份

认证协议CHAP

在这里插入图片描述

  • 报文格式
    在这里插入图片描述

PPPoE

CSMA/CD

  • 多点接入:广播网络;
  • 载波监听:每台主机发送数据前都要监听信道以确定信道是否空闲;
  • 碰撞检测:主机“边发送边监听”,当发现发生了冲突时,立即停止数据发送
    在这里插入图片描述
  • 以太网:高带宽;PPP:提供用户认证、控制、服务、记账等功能。
  • PPPoE:结合二者的优点。
    在这里插入图片描述

协议流程

  • 发现阶段(获取AC的MAC地址,从多个AC中选择一个,生成会话ID)
    1. 发起(PADI, PPPoE Active Discovery Initiation ):客户端通过广播请求以获取可用的AC;
    2. 提供(PPPoE Active Discovery Offer,PADO):在收到请求后,若AC可以提供服务,则返回该报文;
    3. 请求(PPPoE Active Discovery Reques t,PADR):如果客户端收到来自多个AC的应答,则必须从中选择一个并向该AC发出请求;
    4. 确认(PPPoE Active Discovery Session-confirmation,PADS):收到请求的AC向客户端返回确认,从而建立PPP连接及会话。
  • 会话阶段(为虚拟的PPP链路分配资源)
    1. 利用LCP配置链路;
    2. 使用PAP或者CHAP验证身份;
    3. 使用IPCP等网络层控制协议配置相关参数
  • 断开链路
    1. 可以用PPP实现
    2. 也可以进入PPPoE定义的终止步骤PADT

  • PPPoE报文格式与封装:封装于以太网帧中(发现阶段帧类型字段为0x8863,否则为0x8864)
    在这里插入图片描述
  • 会话阶段报文格式与封装
    在这里插入图片描述

地址解析协议ARP

  • 地址解析协议ARP:解决IP地址到物理地址的映射问题
    在这里插入图片描述
  • 两种地址解析方式
    1. 空间较小且容易配置的地址
    2. 空间巨大且固化的地址
  • 两种地址解析方式
    1. 直接映射方法:比如对于物理地址长度为1字节且不固定的情况,可以用IP地址的最后一个字节作为物理地址
    2. 动态解析方法:物理地址长度大于IP地址长度且固化,此时使用ARP(Address Resolution Protocol,地址解析协议)

ARP的思想和步骤

  • 思想:广播询问,单播回应:“谁的IP地址是IPB,请把你的物理地址MACB告诉我!”;
    在这里插入图片描述
  1. 发送方主机发送一个ARP请求报文,该报文以广播方式发送,其中包含了接收方的IP地址;
  2. 网络上所有的主机都会收到这个请求,它们把请求中包含的接收方IP地址与自身的IP地址相比较
    1. 如果相等,则向发送方回应,回应中包含了自己的物理地址;
    2. 否则不作回应。

  • 跨网转发时ARP的使用方法:ARP请求使用物理广播方式投递,而物理广播帧不能跨越路由器转发
    在这里插入图片描述
  1. A在把数据报投递给R之前,首先利用ARP获取I1的物理地址MAC1。
  2. A把数据报投递给R的I1接口。此时数据报的目的IP地址为IPB,但封装该数据报的物理帧将目的物理地址设置为MAC1。
  3. R把数据报从I2接口转发出去,转发前利用ARP获取主机B的物理地址。
  4. R之后把数据报投递给B。此时数据报的源IP地址是IPA,但相应物理帧的源物理地址为MAC2

  • 跨网转发时ARP的使用方法:
  1. 代理ARP:R代理主机D向A发送ARP应答
  2. 作用:无缝添加路由器,使得子网的变化对主机透明
    在这里插入图片描述

ARP报文格式及封装

在这里插入图片描述

  • 物理网络类型/物理地址长度:物理网络的类型及相应的地址长度
  • 协议类型/协议地址长度:上层协议的类型及相应地址的长度
  • 报文字段设置:
  1. 请求报文:发送方在前两个字段填写自己的IP和MAC地址,体现了捎带的思想;发送方也会在目标IP地址字段写明所请求目标的IP地址。
  2. 应答报文:目标硬件地址字段填写应答方的物理地址;交换发送方地址区和目标地址区的内容,并返回给发送方
  • 封装ARP报文的帧:类型字段设置为0806h

移动IP

  • 主机在变换网络后,仍能以原来的IP地址与Internet上的其它主机进行通信。具有以下特点:
  1. 透明性:对于应用程序、传输层协议以及变动中未涉及的路由器,移动性是透明的,即它们不知道主机已经变换网络。
  2. 互操作性:使用移动IP的主机简称为移动主机(MH,Mobile Host),它既可以与固定主机进行互操作,也可以与其它MH进行互操作,且不需要进行特殊编址,分配给MH的地址与分配给固定主机的地址没有不同。
  3. 安全性:移动IP提供认证机制,确保报文的完整性,防止其它主机假冒MH。
  4. 宏移动性:移动IP不会试图处理快速的网络变换,而是重点关注持续时间较长的移动性问题。

  • 移动主机拥有两个IP地址:家乡地址和转交地址。
  1. 家乡地址:家乡网络给MH分配的固定地址,在移动过程中保持不变,被主机的应用程序和传输层使用
  2. 转交地址:外地网络给MH分配的临时地址,随MH的移动而改变
    1. 合作定位转交地址(co-located care-of address):通过DHCP或手工配置等方式分配给MH
    2. 外地代理转交地址(foreign agent care-of address):外地代理将自己的IP地址提供给MH使用
  • MH把转交地址发送给家乡代理。家乡代理截取所有目的地为MH家乡地址的数据报,将转交地址作为新的目的地,以隧道方式传送给MH。当MH回到原始位置,即家乡网络时,使用家乡地址。

移动IP的工作机制:代理发现

移动代理通告

  1. 移动代理通告:对ICMP的路由器通告报文进行扩展
    在这里插入图片描述
  • 类型:16;长度:报文长度,字节为单位;

  • 生命期:代理接受注册请求所允许的最大时间间隔(以秒为单位),全1为无限长;

  • 转交地址:提供了MH可使用的转交地址列表

  • 前缀长度扩展:位于移动代理通告扩展之后,对应路由器通告报文中的“路由器地址/优先级”对,了便于移动主机判断自己所处的网络
    在这里插入图片描述

  • 一字节填充扩展:保持报文按字节数偶数对齐

  • 完整的ICMP代理通告报文:代码字段:0或16。0:普通路由器;16:行使移动代理功能;地址数字段:可以设置为0。

  • 报文封装:封装于IP数据报随后封装于物理帧;帧目的地址为代理的源MAC地址;IP数据报首部TTL为1;目的地址可设置为224.0.0.1或255.255.255.255。

移动代理恳求

与路由器肯定报文相同,要求IP数据报首部TTL为1

移动主机判断自己的位置

  • 根据路由器通告,MH可以判断自己是否在外地网络(比较网络前缀)
  • 根据路由器通告,MH还可判断自己是否更换了网络

移动IP的工作机制:注册

  • 作用:
    1. 通过注册,得到外地代理的路由服务;
    2. 通知家乡代理它当前的转交地址;
    3. 可以使一个即将过期的注册重新生效;
    4. MH回到家乡网络后,通过注册实现注销。
  • 家乡代理根据接收到的注册报文,可以创建或更改MH的移动绑定信息。每个绑定信息包括MH的家乡地址、当前的转交地址等内容。

  • 移动主机登记过程
    在这里插入图片描述
  • 注册报文:UDP报文,目的端口号434
  • 生命期:以秒为单位的注册时间,0表示立即取消注册,全1表示无穷大。
  • 家乡地址、家乡代理、转交地址:核心
    在这里插入图片描述
  • 注册应答报文:代理返回应答
    在这里插入图片描述

移动IP的工作机制:数据传送

  1. 单播数据传送
    1. 向MH发送数据:向MH发送的数据报先被家乡代理截获,家乡代理查找注册信息,取出MH当前的转交地址,然后使用隧道技术将数据报封装,发往MH的转交地址;如果是合作定位转交地址,则由MH解封;如果是外地代理转交地址,则由外地代理先解封,再交给MH。
    2. MH发送数据:在外地网络的MH通常选择外地代理作为默认路由器。MH将需要发送的数据报直接交给外地代理,由外地代理负责将数据报路由到相应目的地。此时无需使用隧道技术。
  2. 广播数据传送
    1. 接收广播数据:MH如果希望接收家乡网络的广播报文,在登记时必须向家乡代理声明。家乡代理收到广播报文后,要根据MH使用的转交地址类型,进行相应转发。对于合作定位转交地址,家乡代理使用隧道直接将广播报文发送给MH;对于外地代理转交地址,家乡代理通过隧道将广播报文发给外地代理,后者收到后,先进行解封装,再发送给MH。
    2. 发送广播数据:MH发送广播报文时,如果目的地是外地网络,则可以直接广播;如果目的地是家乡网络或某个特定网络,则使用隧道发送给家乡代理。后者收到后,先进行解封装,再转发。
  3. 组播数据传送
    1. 接收组播数据:MH要接收组播数据,须先加入组播组,加入方式有两种。一种是向外地网络中的组播路由器申请加入,另一种是通过隧道向家乡代理申请加入。这要求家乡代理是一个组播路由器。对于第一种加入方式,组播路由器收到组播报文后,将转发给MH所在的外地网络;对于第二种加入方式,家乡代理收到组播报文后,使用隧道转发给MH。
    2. 发送组播数据:MH发送组播报文也有两种方式,一种是直接在外地网络上发送,二是通过隧道发送给家乡代理。由于组播路由器转发组播报文时要根据其源地址(采取反向路径转反策略)进行,因此,如果MH直接在外地网络上组播,则使用的地址必须是合作定位转交地址。当通过隧道转发组播报文时,也必须将内外两个IP首部的源地址设为MH的家乡地址。

移动IP的三角路由问题

在这里插入图片描述

  • 解决:MH向通信节点发送地址绑定信息(<家乡IP地址,转交地址>对)。通信节点通过查找缓存中MH的地址绑定信息,获得转交地址,然后直接通过隧道将数据报发送到转交地址。
  • 问题:当MH较多时,会有较大负担;绑定地址无认证的话容易受到DoS。

隧道技术

问题:传送数据报时经过不能直接传送它的网络
解决:使用隧道技术
隧道入口:为数据报添加一个能够在隧道中路由的首部,称为封装
隧道出口:要去掉所添加的首部,称为解封。
移动IP使用三种隧道技术:

  1. IP-in-IP封装(IP-in-IP Encapsulation)
  2. 最小封装(Minimal Encapsulation)
  3. 通用路由封装(GRE,Generic Routing Encapsulation)。

IP-in-IP封装

在这里插入图片描述

  • 新IP首部:
    • 协议类型字段设置为4;版本字段和服务类型字段拷贝原首部中的值;
    • 源地址和目的地址分别设置为隧道的入口和出口点;
    • 标识字段设置为唯一标识新数据报的值;TTL要设置足够大,使其能穿越隧道;
    • 标志字段和片偏移字段要根据是否对原始数据报进行了分片而设置;
    • 选项字段根据需要设置;首部长度、总长度以及与校验和要重新计算。
    • 在入口和出口处,均要将原IP首部的TTL减1。
    • 要防止递归封装

最小封装

在这里插入图片描述

  • 新IP首部:
    • 协议类型字段设置为55;版本字段和服务类型字段拷贝原首部中的值;
    • 源地址和目的地址分别设置为隧道的入口和出口点;
    • 如果隧道入口将原来的数据报从某个端口路由到了隧道端口,那么生存时间字段要相应减小;如果隧道入口就是原来数据报的源IP地址,那么生存时间不减小;
    • 首部长度字段、总长度字段和校验和字段要重新计算。
      在这里插入图片描述
      最小转发首部:
  • 协议类型:原数据报的协议类型。原目的地址:原数据报的目的IP地址。S比特和原源IP地址字段:如果隧道入口与原数据的源IP地址相同,则S字段置0,无原源地址字段;否则,S置1,原源地址字段置为原数据的源IP地址。
  • 校验和:设置最小转发首部的校验和。

通用路由封装

在这里插入图片描述

  • “递归”(Recur):提供了允许的封装次数;不为0才能继续封装,并将值减1;
  • 版本和标记字段:0。协议字段:描述了被封装的数据对应的协议类型。
  • CRKSs:5比特,前4比特描述了可选部分中校验和、路由、密钥、序号字段的有无。
  • 最后1比特表示严格源路由。

可选部分:

  • 校验和:2字节,针对GRE首部和被封装的数据计算;
  • 偏移:2字节,路由字段中从第一个字节开始到包含严格源路由信息之间的字节数;
  • 密钥:4字节,封装者插入,用于认证提供了允许的封装次数;不为0才能继续封装,并将值减1;
  • 序号:4字节,每个被封装的报文都有1个编号;
  • CRKSs:5比特,前4比特描述了可选部分中校验和、路由、密钥、序号字段的有无。
  • 最后1比特表示严格源路由。
  • 路由字段:变长,包含源路由信息
    在这里插入图片描述
  • 路由字段:变长,包含源路由信息
    在这里插入图片描述
  • 地址族:指明了地址格式,比如IPv4或IPv6地址;
  • SRE(Source Routing Entry)偏移:从“路由信息”的第一个字节开始到源路由信息之间的字节数;
  • SRE长度:源路由信息的长度;

HTTP协议

  • 客户端/服务器模型。页面存储于服务器,客户端通过HTTP向服务器请求页面。
  • HTTP:HyperText Transfer Protocol,超文本传输协议,基于TCP,80端口。
  • 通信过程:客户端请求,服务器应答。
  • HTTP特点:无状态、双向传输、协商能力、高速缓存、支持中介
  • HTTP请求方式
    在这里插入图片描述

持久连接和长度

  1. 非持久连接:客户端与服务器建立连接,获取页面,之后关闭连接。建立TCP连接->请求->响应->关闭连接
  2. 持久连接:一旦客户端与服务器建立了TCP连接,就可以在这个请求上发送多次请求并接收响应,等所有请求都发送完成后再关闭连接。建立TCP连接->请求->响应->请求->响应…->关闭连接
  3. 流水线技术:在响应到来之前就可以发送下一个请求
    在这里插入图片描述

HTTP协商及条件请求

  • 客户端与服务器协商的内容:访问是否需要认证、接受的文件类型、语言类型以及一系列控制信息。
  • 服务器驱动协商方式:浏览器首先发出协商请求,指定一系列选项值及URL;服务器收到请求后,从中选取满足浏览器需求的一项。如果有多项符合条件,则服务器选取优先级最高的一项。
  • 浏览器驱动协商方式:浏览器向服务器发送请求,询问可用的内容。服务器返回可能的内容列表。浏览器之后从中选取一项,发送第二个请求获得该数据项。
  • 服务器驱动示例:
    Accept: text/html, text/plain; q=0.5, text/x-dvi; q=0.8
    
  • 条件请求:浏览器在发送请求时,可以指定响应满足的条件。比如:If-Modified-Since:01 Jan. 2017 00:00:00 GMT

代理服务器和高速缓存

  • 代理服务器:浏览器和服务器的中介,提高通信效率,减轻服务器负担。
  • 浏览器:使用代理服务器可以绕过某些限制。
  • 高速缓存:代理服务器设置,缓存页面,不必每次都到服务器取
    在这里插入图片描述
  • 代理服务器标准:明确规定了代理服务器如何处理请求、浏览器如何与代理服务器协商等内容
  • 客户端高速缓存:提高通信效率。

HTTP报文格式

  • HTTP报文就是字符串,包括开始行、首部行、实体主体
    开始行:(请求报文的是请求行,响应报文的是状态行)
  1. 请求行:请求方式:GET、POST等;URL:指明所要获取页面对应的URL;HTTP版本:比如HTTP1.1。3项内容时间用空格间隔。
  2. 状态行:HTTP版本;状态码:3位数字字符,表示操作的状态;解释字符串:对状态码含义的进一步解释
    在这里插入图片描述
  3. 首部行:数据长度、协商选项、请求条件、高速缓存控制信息等。每个首部格式:“首部名称:首部字符串” 。每个首部之间回车换行分隔
    在这里插入图片描述
  4. 实体主体:数据部分。首部和实体之间要间隔一个空行

HTTP面临的安全风险

  1. HTTP协议明文传输数据:攻击者嗅探获取敏感隐私数据
  2. HTTP协议缺乏消息完整性检测:易遭受中间人攻击
    在这里插入图片描述
  • 增强HTTP安全性
    1. 使用HTTPS: HTTP over SSL(Secure Socket Layer,安全套接层),基于SSL安全协议对HTTP进行封装。URL形式为:“https://”;
  1. HTTP协议首部解析二义性:不同HTTP实现在解析和处理Host首部时存在不一致。带有多个Host首部的HTTP请求,下游与上游设备可能理解成不同的Host地址。
    在这里插入图片描述
  • 攻击原理:利用不一致性,通过精心构造报文,实现污染ISP缓存、CDN缓存、绕过WAF( Web Application Firewall,Web应用防火墙)。

电子邮件系统

三大部件

  1. 用户代理:电邮系统与用户直接交互的图形界面。用户可以通过这个界面编写邮件、读取邮件以及管理邮箱。
  2. 邮件传送代理:相当于邮政系统中的邮局,基本功能是发送和接收邮件。此外,还会设置缓冲区(相当于邮筒)来存放待发送的邮件。
  3. 邮箱:相当于邮政系统中的信箱。用户使用电邮系统时必须申请邮箱,这样,发给用户的邮件首先保存在用户邮箱里,供用户随时读取

系统结构和基本功能

在这里插入图片描述
5项基本功能:

  1. 撰写:让用户能够方便地撰写邮件
  2. 传输:将邮件发送到接收方用户邮箱中
  3. 报告:向发信者反馈发信成功与否
  4. 显示:让接收方能够方便地读取邮件
  5. 处理:让接收方能够方便地处理邮件
  6. 群发:一次性向一组接收者发送邮件

邮箱地址及电子邮件格式

  1. 邮箱地址:邮箱名@邮箱所在主机的域名,每个域名内邮箱唯一
  2. 电子邮件格式:
    • 信封:信封供邮件传送代理使用。
    • 首部:供用户代理使用,可以包含多个字段,每个首部字段的形式:字段名:字段值。以“X-”开头的字段是用户定义的字段,其余则是标准字段。
    • 正文:邮件的内容部分,是NVT(Network Virtual Terminal,网络虚拟终端)ASCII文本行
  • 发送邮件:先发首部,再跟一个空行,之后是正文
    在这里插入图片描述

  • 解决的问题:如何让邮件可以发送各种格式的附件
  • 解决方案:MIME:Multipurpose Internet Mail Extensions,多用途互联网邮件扩充。
  • 定义的3项内容:
    1. 加入5个新的邮件首部字段,提供了邮件主体相关信息;
    2. 定义了传送编码,可将任意格式的数据转化为SACII码。
    3. 定义了许多邮件内容格式,对多媒体电子邮件的表示方法进行了标准化。
      在这里插入图片描述

简单邮件传输协议SMTP

  1. 发送邮件的协议。没有规定邮件的格式和存储方式等内容,仅仅给出了相互通信的两个SMTP进程之间如何交换信息。
  2. 使用客户端/服务器模型。发送邮件的进程是客户端,接收邮件的进程是服务器。
  3. 基于TCP,使用知名端口号25。
  4. 定义了14条命令21种应答。每条命令都是一个4字符的串,后面带上相应的参数;每种应答都由一个3字符数字开始,后面跟上简单的文字说明

POP协议

  • POP:Post Office Protocol,用于接收邮件,目前广泛使用的是POP3。使用客户端/服务器模型,基于TCP,使用知名端口号110。
  • POP服务器:仅仅在用户身份得到认证后才允许对邮箱的操作,认证使用用户名和口令。定义的内容:用户登录、退出、读取信件和删除信件的命令。
  • 特点:用户从邮箱中读取邮件时,会把邮件下载到本地保存,之后服务器会把邮件删除掉

IMAP

  • IMAP: Internet Mail Access Protocol,用于接收邮件。使用客户端/服务器模型,基于TCP,使用知名端口号143
  • 与POP相比:对远程邮箱的管理和操作功能更强大,且用IMAP读邮件时,本地并不保存该邮件,在用户明确地发出删除命令之前,服务器都不会删除这个邮件。

POP VS IMAP

  1. POP是邮件传输模型,IMAP是联机访问模型
  2. POP只是简单第传输文件,IMAP是客户端登录服务器后进行远程访问
  3. IMAP用户可先查看首部,可根据需要创建文件夹并移动邮件,可选择收取邮件的一部分
  4. 用户使用IMAP时,相当于在邮件传送代理的机器上为自己开了个存储空间,邮箱就相当于自己的“网络硬盘”

  • 用户代理软件: Outlook,Foxmail 等,在后台实现了SMTP、POP、IMAP等协议。
    在这里插入图片描述

电子邮件系统面临的安全威胁

  1. SMTP面临的安全威胁:
  • RCPT命令:用来定义邮件的接收地址,当邮件接收者不是本地用户时,SMTP服务器返回特定的信息码,黑客可以据此来发现服务器上的真实用户账号。
  • VRFY命令:用来判断一个SMTP服务器是否能将邮件发送到特定的接收者,如果是本地用户,则返回用户的完整地址,否则返回给客户否定的答复或表明他愿意转发任何发送到远程用户的邮件。该命令可以使黑客检测到服务器上的用户的邮件地址或被垃圾邮件发送者利用来转发垃圾邮件。
  • EXPN命令:用来向SMTP服务器查询邮件列表和别名。黑客可以用它来获取敏感信息。
  • TRUN命令:允许两台计算机在一个TCP连接中进行双向邮件传输。通过允许服务器转换同客户机的角色,将目的地是客户机域名的邮件发给客户机,服务器只根据客户机自称的名字进行应答。若黑客冒用别人的域名,那么邮件服务器会将所有应发往合法用户的邮件发给黑客
  1. 数据明文传输问题:口令易被获取,数据无完整性机密性保护机制.
    • 解决方法:对SMTP进行认证扩展;用SSL保护相关协议,比如基于SSL的SMTPS( SMTP over SSL)等;用PGP进行安全处理,引入数字签名和加密算法处理邮件;
  2. 系统设置和应用时面临的安全问题
  • 邮件服务器被攻击:邮件是明文方式保存在邮件服务器的用户邮箱中,所以只要能够进入用户的邮箱,就可以看到发给用户的原始文件,甚至更改邮件的内容,邮件的接收者无法知道所接收的邮件是否真实
  • 电子邮件病毒:电子邮件传播病毒通常是把自己作为附件发送给被攻击者。如果接收到该邮件的用户不小心打开了附件,病毒即会感染机器,并且自动打开地址薄,使电子邮件病毒能够大面积传播。
  • 垃圾邮件:向新闻组或他人电子信箱发送的未经用户准许、不受用户欢迎的,难以退掉的电子邮件或电子邮件列表,叫做垃圾邮件(Spam)。目前还没有能够百分之百精确的垃圾邮件检测技术。

域名系统DNS

  • Internet通信节点的标识——IP地址不便于记忆。DNS给Internet上的主机起个便于记忆的名字,同时解决名字到IP地址的映射问。
  • DNS定义的两个要素
    • 抽象要素,指明名字语法和名字的授权管理规则
    • 具体要素,指明将名字映射到IP地址的具体方法
  • 顶级域名:划分以用途或国家(地区)为准,引入域名树描述层次结构。
  • 域:每个独立管理的子树。域名系统:这个层次型的命名管理系统
  • 域名树:根节点未命名,第二层是顶级域(TLDs)
    在这里插入图片描述
  • 树型结构优点:便于管理维护,保证了名字的唯一性;
  • 域名命名:树中每个节点都有唯一的一个名字,节点的名字是由该节点回溯到根节点的一条路径,比如搜狐Web服务器域名“www.sohu.com”。
  • 标号:每个域名都是由‘.’分隔的字符串组成的,其中每个字符串称为一个“标号”(label)。每个域名任意后缀也构成了一个域名。每个标号最长63字符,一个域名最长255字符。

域名解析原理

  • 基本思想:设置域名服务器保存域名和IP地址的映射关系,查询服务器即可获得域名对应的IP地址。
  • 服务器设置:引入多个服务器,每个服务器负责部分域名。它们分布于不同的位置,互相协作,最后构成了一个大型的分布式域名服务系统,提供全球域名的解析服务。
  • 服务器组织:树型结构,最高层为根服务器,全球共13个。每个根服务器都有多个镜像服务器,全球共574台服务器

域名解析原理

  • 域名解析过程:客户端/服务器模型
    在这里插入图片描述
  • 域名查询步骤:
  1. 域名解析器向域名服务器发出查询请求,其中包含需要解析的域名;
  2. 域名服务器收到请求后在本地数据库中查询,找到域名对应的IP地址;
  3. 域名服务器把查询获得的结果返回给域名解析器

  • 解析类型分为:递归解析和迭代解析
  1. 递归解析:客户端的默认域名服务器将代理客户完成查询工作,如果自身数据库中不包含所请求的记录,它将继续实施递归查询以获取结果
  2. 迭代解析:根服务器不接受递归解析请求,当它收到一个查询请求且自身数据库中不包含请求的记录时,它将向请求服务器指示可能包含该记录的服务器,以便请求服务器进行进一步查询
    在这里插入图片描述

高速缓存

  • 思想:设置缓存保存最近解析的域名和IP地址的映射关系,避免每次都重新解析,由此提高效率。
  • 客户端的二步解析法:
  1. 需要解析某个域名时,首先在本地缓存中查找,如果有则直接使用,如果没有走第二步;
  2. 向域名服务器发送域名解析请求。
    • 服务器缓存:存放最近解析的名字,以及从何处获取该名字相关的记录。收到请求后首先确认自己是否被授权,如果没授权,查缓存,把缓存记录告诉客户端,把信息来源也告诉之,把信息标记为“非授权绑定”。
  • 缓存记录保存时间:授权域名服务器响应一个请求时,会给出TTL值

减少DNS报文长度的措施

  1. 域名缩写
  • 思想:同一单位内部的只要拨分机,同一城市的不必加区号。比如:在xxgc.edu.cn域内请求该域的服务器解析kouxiaorui.xxgc.edu.cn域名,则仅填入kouxiaorui即可
  1. 域名压缩
  • 思想:压缩同一个查询中不同域名相同的字段。比如:jun.xxgc.edu.cn和cs.pku.edu.cn,只要存储一个edu.cn,并用指针指明复用的位置

  • DNS既可以基于TCP,也可以基于UDP,服务器则使用知名端口53.
  • 核心:数据传输量少,可靠性要求低的时候用UDP;否则用TCP.

DNS面临的安全威胁

  1. DNS欺骗:恶意攻击者改变DNS响应并把解析结果指向自己可控的主机。
  2. 信任服务器背叛:用户配置的可信服务器被黑客控制。
  3. 数据窃听及篡改:破坏机密性和完整性。DNS数据未作安全处理,因此攻击者很容易利用嗅探等方式获取并篡改数据。
  4. 名字连锁攻击:伪造描述别名的CNAME或NS记录,通过响应的管理机构区和附加信息区返回给查询者,从而导向恶意链接。
  5. 否认域名存在:攻击者返回查询失败应答,或将某个资源记录删除

相关文章:

网络协议分析

网络协议分析 网络协议分析概述用IP实现异构网络互联网络协议的分层TCP/IP的分层模型协议分析协议分析应用协议分析任务 常见网络协议PPP协议报文选项IPCP认证协议PAP安全缺陷认证协议CHAPPPPoE协议流程 地址解析协议ARPARP的思想和步骤ARP报文格式及封装 移动IP移动IP的工作机…...

GAMIT目录配置

1打开home&#xff0c;显示隐藏文件&#xff0c;CTRH 2修改目录 #set gamitpath gamitpath/opt/gamit10.7 export PATH$PATH:${gamitpath}/com/:${gamitpath}/gamit/bin:${gamitpath}/kf/bin HELP_DIR${gamitpath}/help export HELP_DIR #set GMT path gmtpath/usr/lib/gmt P…...

基于JSP的九宫格日志网站

你好呀&#xff0c;我是学长猫哥&#xff01;如果有需求可以文末加我。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;JSP技术 工具&#xff1a;浏览器/服务器&#xff08;B/S&#xff09;结构 系统展示 首页 管理员功能模块 用户功能模块 摘要 本…...

C#中结构struct能否继承于一个类class,类class能否继承于一个struct

C#中结构struct能否继承于一个类class&#xff0c;类class能否继承于一个struct 答案是&#xff1a;都不能。 第一种情行&#xff0c;尝试结构继承类 报错&#xff1a;接口列表中的类型"XX"不是接口interface。 一般来说&#xff0c;都是结构只能实现接口&#x…...

【Vulhub】Fastjson 1.2.24_rce复现

文章目录 一&#xff0c;Fastjson是什么&#xff1f;二&#xff0c;fastjson漏洞原理三&#xff0c;判断是否有fastjson反序列化四&#xff0c;复现Fastjson 1.2.24_rce(vulhub)环境配置1.判断是否存在Fastjson反序列化2.反弹shell3.启动RMI服务器4.构造恶意POST请求 一&#x…...

【iconv】UTF-8字符串转换为UTF-16字符串

使用<iconv.h>来进行字符串编码的转换 #include <iconv.h> #include <iostream> #include <string.h> #include <unistd.h> #include <memory> #include <fcntl.h>// 需要链接iconv库// iconv -l 命令可列出所有支持的格式 // exam…...

AI技术的未来展望:重塑人类社会的智能革命

一、引言 随着技术的飞速发展&#xff0c;人工智能&#xff08;AI&#xff09;已经不再是科幻小说中的概念&#xff0c;而是成为了我们生活中不可或缺的一部分。从简单的智能助手到复杂的自动化生产线&#xff0c;AI技术正在以前所未有的速度改变着世界。本文将对AI技术的未来…...

掘金AI 商战宝典-系统班:2024掘金AIGC课程(30节视频课)

课程目录 1-第一讲学会向Al提问&#xff1a;万能提问公式_1.mp4 2-第二讲用AI写视频脚本_1.mp4 3-第三讲用AI写视频口播文案_1.mp4 4-第四讲用AI自动做视频&#xff08;上&#xff09;_1.mp4 5-第五讲用AI自动做视频&#xff08;中&#xff09;_1.mp4 6-第六讲用AI自动做视…...

C# WinForm —— 26 ImageList 介绍

1. 简介 图片集合&#xff0c;用于存储图像的资源&#xff0c;并在关联控件中显示出来 可以通过 索引、键名 访问每张图片 没有事件 2. 属性 属性解释(Name)控件ID&#xff0c;在代码里引用的时候会用到,一般以 imgList 开头ClolorDepth用于呈现图像的颜色数&#xff0c;默…...

Vue:现代前端开发的首选框架-【声明周期钩子详解】

引言 Vue.js 是一个流行的前端框架&#xff0c;它通过组件化的开发方式&#xff0c;让开发者能够构建出高效且可维护的应用程序。在Vue中&#xff0c;生命周期钩子&#xff08;Lifecycle Hooks&#xff09;是理解组件行为的关键概念。本文将深入探讨Vue生命周期钩子&#xff0…...

【因果推断python】8_线性回归模型2

目录 回归理论 非随机数据的回归 回归理论 我不打算深入研究线性回归是如何构建和估计的。然而&#xff0c;一点点理论将有助于解释它在因果推断中的力量。首先&#xff0c;回归解决了理论上的最佳线性预测问题。令 是一个参数向量&#xff1a; 线性回归找到最小化均方误差 (…...

MySQL目录和文件

MySQL目录和文件 bin目录 存储一些mysql脚本比如mysqld、mysqld-self等等&#xff0c;用于执行mysql一些操作 数据目录 show variables like datadir;--查看数据目录位置每一个数据库都有一个和数据库名相同的文件夹&#xff1b;MySQL5.7开始每创建一个表&#xff0c;在Innod…...

0基础学习Elasticsearch-Quick start

文章目录 1 背景2 前言3 快速部署ES4 快速部署Kibana5 发送请求给ES5.1 打开Kibana控制台5.2 通过REST API发送请求5.3 通过curl发送请求5.4 添加数据5.4.1 添加单个document5.4.2 添加多个document 5.5 搜索数据5.5.1 搜索所有documents5.5.2 match查询 6 总结 1 背景 因电商项…...

Centos给普通用户添加sudo命令权限

打开sudoers文件 sudo visudo 修改sudoers文件 找到root ALL(ALL) ALL这一行&#xff0c;即如下图标出红线的一行 在此行下新增如下内容: lbs为用给予sudo执行权限的用户名 # 执行sudo命令&#xff0c;需要输入命令 lbs ALL(ALL) ALL 或 # 执行sudo命令&#xff0c;…...

编写备份MySQL 脚本

目录 环境准备 增量备份 增量备份和差异备份 完整代码如下 测试脚本是否正常 星期天运行脚本&#xff08;完全备份&#xff09; 星期一运备份脚本&#xff08;增量备份&#xff09; 星期二备份数据&#xff08;其他天--增量备份&#xff09; 星期三备份数据&#xff08;差异备…...

C语言中的数据类型转换:隐式类型转换与显示类型转换

一. 简介 本文简单学习一下&#xff0c;C语言中的数据类型转换。重点学习一下隐式类型转换。 二. C语言中的数据类型转换&#xff1a;隐式类型转换与显示类型转换 类型转换&#xff08;TypeCasting&#xff09;&#xff1a;在C语言中是将一种数据类型值转换为另一种数据类型…...

Android 安卓通过bindService ServiceConnection 没有响应的问题

bindService 失败且 ServiceConnection 没有响应可能由多种原因造成。以下是一些可能的原因和相应的解决方法&#xff1a; Service未正确声明或注册&#xff1a; 如果Service没有在AndroidManifest.xml文件中正确声明或注册&#xff0c;bindService将会失败。解决方法&#xf…...

python切片(彻底解除对切片的曲解)

sequence[start:stop:step] **start: **step为正时默认为0,step为负时默认为-1 stop:_ step为正时默认为结尾结束,step为负时默认为开始位置_ ss=“abcdefg” 以该字符串举例,ss[start:stop:step]的意思是将字符串ss从start开始截取(包括start),截取到stop(不包括sto…...

Java—— StringBuilder 和 StringBuffer

1.介绍 由于String的不可更改特性&#xff0c;为了方便字符串的修改&#xff0c;Java中又提供了StringBuilder和Stringbuffer类&#xff0c;这两个类大部分功能是相同的&#xff0c;以下为常用方法&#xff1a; public static void main(String[] args) {StringBuilder sb1 n…...

vs2019 c++20 规范 STL库中关于时间的模板

在学习线程的时候&#xff0c;一些函数会让线程等待或睡眠一段时间。函数形参是时间单位&#xff0c;那么在 c 中是如何记录和表示时间的呢&#xff1f;以下给出模板简图&#xff1a; 谢谢...

激光焊接机作为一种高效、精密的焊接设备

激光焊接机是一种用于材料加工时激光焊接的机器&#xff0c;以下是对其的详细介绍&#xff1a; 1. 定义与别称&#xff1a; 激光焊接机&#xff0c;又常称为激光焊机、镭射焊机&#xff0c;是材料加工激光焊接时用的机器。 2. 工作原理&#xff1a; 激光焊接是利用高能量…...

vite为什么速度快

原因 vite快的原因是因为 vite在开发环境中是使用的 esbuild&#xff0c;esbuild 是 go 写的&#xff0c;go 编译型语言、多线程&#xff0c;nodejs 解释型语言、单线程&#xff0c;并且 vite 使用了原生 esm 导入的&#xff0c;所以快一点&#xff0c;当然&#xff0c;这也…...

Java网络编程(下)

White graces&#xff1a;个人主页 &#x1f649;专栏推荐:Java入门知识&#x1f649; &#x1f649; 内容推荐:Java网络编程&#x1f649; &#x1f439;今日诗词:姑苏城外寒山寺&#xff0c;夜半钟声到客船&#x1f439; ⛳️点赞 ☀️收藏⭐️关注&#x1f4ac;卑微小博主…...

APISIX的安装与测试(springboot服务测试)

安装&#xff1a; 1.1安装依赖&#xff1a; curl https://raw.githubusercontent.com/apache/apisix/master/utils/install-dependencies.sh -sL | bash -1.2 安装 OpenResty yum-config-manager --add-repo https://openresty.org/package/centos/openresty.reposudo yum i…...

AI技术:探索未来智能的无限可能

随着科技的飞速发展&#xff0c;人工智能&#xff08;AI&#xff09;技术已经成为我们这个时代最引人瞩目的科技力量。从简单的自动化任务到复杂的决策支持系统&#xff0c;AI技术正在以前所未有的速度改变着我们的世界。本文将深入探讨AI技术的定义、发展历程、当前应用、面临…...

npm install 出错,按照版本不匹配解决

一、现象 npm install npm WARN config global --global, --local are deprecated. Use --locationglobal instead. npm ERR! code ERESOLVE npm ERR! ERESOLVE unable to resolve dependency tree npm ERR! npm ERR! While resolving: panshi-main-web0.1.0 npm ERR! Found…...

【第1章】SpringBoot实战篇之注册接口

文章目录 前言一、代码部分1. User2.UserMapper13. UserSerivce4. UserController15. Result 二、测试1.注册2.再次注册 总结 前言 下面介绍用户注册接口。 一、代码部分 1. User package org.example.springboot3.bigevent.entity;import com.baomidou.mybatisplus.annotat…...

代码随想录-Day25

216.组合总和III 找出所有相加之和为 n 的 k 个数的组合&#xff0c;且满足下列条件&#xff1a; 只使用数字1到9 每个数字 最多使用一次 返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次&#xff0c;组合可以以任何顺序返回。 示例 1: 输入: k 3, n 7 输…...

JavaWeb_SpringBootWeb基础

先通过一个小练习简单了解以下SpringBootWeb。 小练习&#xff1a; 需求&#xff1a;使用SpringBoot开发一个Web应用&#xff0c;浏览器发起请求/hello后&#xff0c;给浏览器返回字符串"Hello World~"。 步骤&#xff1a; 1.创建SpringBoot项目&#xff0c;勾选We…...

Stable Diffusion生成图片的参数查看与抹除方法

前几天分享了几张Stable Diffusion生成的艺术二维码&#xff0c;有同学反映不知道怎么查看图片的参数信息&#xff0c;还有的同学问怎么保护自己的图片生成参数不会泄露&#xff0c;这篇文章就来专门分享如何查看和抹除图片的参数。 查看图片的生成参数 1、打开Stable Diffus…...

Linux下多线程的相关概念

&#x1f916;个人主页&#xff1a;晚风相伴-CSDN博客 &#x1f496;如果觉得内容对你有帮助的话&#xff0c;还请给博主一键三连&#xff08;点赞&#x1f49c;、收藏&#x1f9e1;、关注&#x1f49a;&#xff09;吧 &#x1f64f;如果内容有误或者有写的不好的地方的话&…...

在java java.util.Date 已知逝去时间怎么求年月日

在java中&#xff0c;可以使用java.util.Date类来获取年、月和日。以下是一种方法&#xff1a; 首先创建一个java.util.Date对象&#xff0c;表示逝去的时间。 Date pastDate new Date(逝去的时间的毫秒数);然后使用java.util.Calendar类来获取年、月和日。 Calendar calen…...

LeetCode 2928.给小朋友们分糖果 I:Java提交的运行时间超过了61%的用户

【LetMeFly】2928.给小朋友们分糖果 I&#xff1a;Java提交的运行时间超过了61%的用户 力扣题目链接&#xff1a;https://leetcode.cn/problems/distribute-candies-among-children-i/ 给你两个正整数 n 和 limit 。 请你将 n 颗糖果分给 3 位小朋友&#xff0c;确保没有任何…...

【typescript/flatbuffer】在websocket中使用flatbuffer

目录 说在前面场景fbs服务器代码前端typescript代码问题 说在前面 操作系统&#xff1a;Windows11node版本&#xff1a;v18.19.0typescript flatbuffer版本&#xff1a;24.3.25 场景 服务器(本文为golanggin)与前端通信时使用flatbuffer进行序列化与反序列化通信协议为websock…...

构建一个文字冒险游戏:Python 编程实战

在本文中&#xff0c;我们将探索如何使用 Python 创建一个简单的文字冒险游戏。通过这个项目&#xff0c;你将了解到基础的编程技术&#xff0c;包括条件语句、函数和基本的用户输入处理&#xff0c;同时也能体会到文本游戏的魅力和设计的挑战。 项目概述 文字冒险游戏是一种…...

09Linux GDB学习笔记

Linux GDB使用 目录 文章目录 Linux GDB使用先编译文件1.检查安装1.1 安装GDB 2.启动GDB3.退出GDB4.设置断点4.1 在指定行号处设置断点4.2 在指定函数名处设置断点4.3 在指定源文件和行号处设置断点 4.4查看断点信息4.5删除断点5.运行5.1 <font color#ff0000>逐过程&am…...

海外金融牌照

一般来说牌照申请分两个大类&#xff1a;数字货币牌照和外汇牌照。每个国家的牌照具体监管的情况也是不一样的。申请牌照时该如何选择&#xff1f; 今天先说说区块链牌照&#xff0c;具有代表性的有美国msb牌照&#xff0c;加拿大msb牌照&#xff0c;爱沙尼亚数字货币牌照&…...

addEventListener()方法中的几个参数,以及作用

addEventListener() 方法是 JavaScript 中用于处理指定元素的指定事件的函数。它有三个参数&#xff1a; type&#xff08;必需&#xff09;&#xff1a;一个字符串&#xff0c;指定要监听的事件名。 listener&#xff08;必需&#xff09;&#xff1a;一个实现了 EventListen…...

FreeRtos进阶——通用链表的实现方式

通用链表实现方式&#xff08;一&#xff09; struct node_t {struct node_t *next; };struct person {struct node_t node;char *name;int age; };struct dog {struct node_t node;char *name;int age;char *class; };在此链表中&#xff0c;node结构体被放在了最前面&#x…...

【kubernetes】关于k8s集群如何将pod调度到指定node节点(亲和与反亲和等)

目录 一、调度约束 1.1K8S的 List-Watch 机制 ⭐⭐⭐⭐⭐ 1.1.1Pod 启动典型创建过程 二、调度过程 2.1Predicate&#xff08;预选策略&#xff09; 常见的算法 2.2priorities&#xff08;优选策略&#xff09;常见的算法 三、k8s将pod调度到指定node的方法 3.1指定…...

AOP基础

黑马程序员JavaWeb开发教程 文章目录 一、AOP概述二、AOP快速入门2.1 步骤2.2 AOP的使用场景2.3 AOP的优势 三、AOP核心概念3.1 AOP核心概念3.2 AOP执行流程 一、AOP概述 AOP&#xff1a;Aspect Oriented Propragramming(面向切面变成、面向方面编程)其实就是面向特定方法编程…...

EXSI虚拟机新增磁盘并将空间扩充到已有分区

这里写自定义目录标题 1、在EXSI虚拟机中新增一块磁盘配置大小2、确认新磁盘3、格式化新分区4、添加新分区到LVM5、将新增分区添加到已有分区里 1、在EXSI虚拟机中新增一块磁盘配置大小 注意事项&#xff1a; (1)需确保虚拟机已关闭活处于维护模式&#xff0c;避免数据丢失 (2…...

民国漫画杂志《时代漫画》第39期.PDF

时代漫画39.PDF: https://url03.ctfile.com/f/1779803-1248636473-6bd732?p9586 (访问密码: 9586) 《时代漫画》的杂志在1934年诞生了&#xff0c;截止1937年6月战争来临被迫停刊共发行了39期。 ps: 资源来源网络!...

每天一个数据分析题(三百四十二)

根据量化对象是业务行为结果还是财务行为结果&#xff0c;可以将指标分为业务指标及财务指标两大类&#xff0c;以下说法正确的是&#xff1f; A. 财务指标是按照财务规则来对财务情况进行量化的指标 B. 业务指标是按照业务规则来对业务情况进行量化的指标 C. 业务指标需要按…...

c++会员消费积分系统

这段代码实现了一个简单的会员卡管理系统&#xff0c;具有以下功能&#xff1a; 会员开卡&#xff1a;用户可以输入会员的姓名和会员编号&#xff0c;系统将创建新的会员卡并记录相关信息。 消费积分&#xff1a;用户可以输入会员编号和消费积分&#xff0c;系统会根据会员编号…...

如何获知表中数据被删除

目录 1. 使用触发器 (Triggers)示例 2. 使用审计工具 (Audit Tools)示例 3. 使用Binlog (Binary Log)示例 4. 使用应用层记录日志示例 总结 要查询 MySQL 数据库表中的数据何时被删除&#xff0c;可以采取以下几种方法&#xff1a; 1. 使用触发器 (Triggers) 可以在表上创建一…...

机器学习之sklearn基础教程

码到三十五 &#xff1a; 个人主页 机器学习库scikit-learn&#xff08;简称sklearn&#xff09;是Python中一个功能强大的机器学习库&#xff0c;它提供了大量用于数据挖掘和数据分析的工具&#xff0c;包括分类、回归、聚类、降维等算法。文中我们一起简单探讨sklearn的一些基…...

ES升级--04--SpringBoot整合Elasticsearch

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 SpringBoot整合Elasticsearch1.建立项目2.Maven 依赖[ES 官方网站&#xff1a;https://www.elastic.co/guide/en/elasticsearch/client/java-rest/6.8/index.html](…...

eclipse如何debug

步骤1&#xff1a;双击显示行数的数字来设置断点 步骤2&#xff1a;点击debug 步骤3&#xff1a;在弹出的窗口点击switch 步骤4&#xff1a;就可以调试了&#xff0c;右边是查看数据的&#xff0c;点击上面的图标进行下一步 步骤5&#xff1a;退出debug 步骤6&#xff1a;…...

无人售货机零售业务成功指南:从市场分析到创新策略

在科技驱动的零售新时代&#xff0c;无人售货机作为一种便捷购物解决方案&#xff0c;正逐步兴起&#xff0c;它不仅优化了消费者体验&#xff0c;还显著降低了人力成本&#xff0c;提升了运营效能。开展这项业务前&#xff0c;深入的市场剖析不可或缺&#xff0c;需聚焦消费者…...