【网络协议详解】——电子邮件系统协议(学习笔记)
目录
- 🕒 1. 电子邮件系统概述
- 🕒 2. 简单邮件传送协议SMTP
- 🕒 3. SMTP协议的命令和响应
- 🕘 3.1 命令
- 🕤 3.1.1 HELO
- 🕤 3.1.2 MAIL FROM
- 🕤 3.1.3 RCPT TO
- 🕤 3.1.4 DATA
- 🕤 3.1.5 QUIT
- 🕤 3.1.6 REST
- 🕤 3.1.7 VRFY
- 🕤 3.1.8 NOOP
- 🕤 3.1.9 TURN
- 🕤 3.1.10 EXPN
- 🕤 3.1.11 HELP
- 🕤 3.1.12 SEND FROM
- 🕤 3.1.13 SOML FROM
- 🕤 3.1.14 SAML FROM
- 🕘 3.2 响应
- 🕒 4. SMTP协议的邮件传输阶段
- 🕒 5. 电子邮件的信息格式
- 🕒 6. 多用途因特网邮件扩展MIME
- 🕘 6.1 概述
- 🕘 6.2 特点
- 🕘 6.3 MIME首部
- 🕘 6.4 MIME内容类型
- 🕘 6.5 MIME传送编码
- 🕒 7. 邮件读取协议
- 🕒 8. POP3协议
- 🕘 8.1 工作过程
- 🕘 8.2 命令
- 🕘 8.3 响应
- 🕘 8.4 三种工作状态
- 🕒 9. 基于万维网的电子邮件
- 🕒 10. 实验
🕒 1. 电子邮件系统概述
电子邮件(e-mail)是因特网上最早流行的一种应用,并且仍然是当今因特网上最重要、最实用的应用之一。
电子邮件把邮件发送到收件人使用的邮件服务器,并放在其中的收件人邮箱中,收件人可随时上网到自己使用的邮件服务器进行读取。
电子邮件不仅使用方便,而且还具有传递迅速和费用低廉的优点。
现在电子邮件不仅可传送文字信息,而且还可附上声音和图像。
电子邮件系统的三个主要组成构件:用户代理,邮件服务器,以及电子邮件所需的协议
- 用户代理是用户与电子邮件系统的接口,又称为电子邮件客户端软件。
- 邮件服务器是电子邮件系统的基础设施。因特网上所有的
ISP
都有邮件服务器,其功能是发送和接收邮件,同时还要负责维护用户的邮箱。 - 协议包括邮件发送协议(如
SMTP
)和邮件读取协议(如POP3
,IMAP
)。
用户代理 UA (User Agent)
- 用户代理 UA 就是用户与电子邮件系统的接口,是电子邮件客户端软件。
- 用户代理的功能:撰写、显示、处理和通信。
邮件服务器
- 邮件服务器的功能是发送和接收邮件,同时还要向发信人报告邮件传送的情况(已交付、被拒绝、丢失等)。
- 邮件服务器按照客户——服务器方式工作。邮件服务器需要使用发送和读取两个不同的协议。
注:
- 一个邮件服务器既可以作为客户,也可以作为服务器。
- 例如,当邮件服务器 A 向另一个邮件服务器 B 发送邮件时,邮件服务器 A 就作为 SMTP 客户,而 B 是 SMTP 服务器。
- 当邮件服务器 A 从另一个邮件服务器 B 接收邮件时,邮件服务器 A 就作为 SMTP 服务器,而 B 是 SMTP 客户。
🕒 2. 简单邮件传送协议SMTP
简单邮件传送协议SMTP(Simple Mail Transfer Protocol)所规定的就是在两个相互通信的 SMTP 进程之间应如何交换信息。
由于 SMTP 使用客户-服务器方式,因此负责发送邮件的 SMTP 进程就是 SMTP 客户,而负责接收邮件的 SMTP 进程就是 SMTP 服务器。
🕒 3. SMTP协议的命令和响应
SMTP使用命令和响应在用户代理和邮件服务器之间传送邮件。
SMTP 规定了 14
条命令和 21
种应答信息。
- 每条命令用
4
个字母组成 - 每一种应答信息一般只有一行信息,由一个
3
位数字的代码开始,后面附上(也可不附上)很简单的文字说明。
🕘 3.1 命令
命令由用户代理发送给邮件服务器,命令包括关键词,后面跟着零个或多个参数。
一般形式是:COMMAND [Parameter] <CRLF>
命令 | 参数 | 命令 | 参数 |
---|---|---|---|
HELO | 发送方的主机名 | NOOP | —— |
MAIL FROM | 发件人 | TURN | —— |
RCPT TO | 预期的收件人 | EXPN | 邮件发送清单 |
DATA | 邮件的主体 | HELP | 命令 |
QUIT | —— | SEND FROM | 预期的收件人 |
REST | —— | SOML FROM | 预期的收件人 |
VRFY | 收件人名字 | SAML FROM | 预期的收件人 |
🕤 3.1.1 HELO
HELO命令用于用户标识自己,其参数是用户主机的域名。
格式举例:HELO hins.mail.qq.com
🕤 3.1.2 MAIL FROM
MAIL FROM命令用于标识发件人。
命令使用的参数是发件人的电子邮件地址(用户名加上主机的域名)。
格式举例:MAIL FROM: 10001@mail.qq.com
🕤 3.1.3 RCPT TO
RCPT TO 命令用于标识预期的收件人。
命令使用的参数是收件人的电子邮件地址。
若有多个收件人,则该命令要重复使用。
格式举例:RCPT TO: 10001@mail.qq.com
🕤 3.1.4 DATA
DATA 用于初始化数据传输。
在DATA命令后面所有的行都被当作是邮件内容,邮件内容以只包含一个“.
”的行表示结束。
格式举例:
DATA
This is a Test Message。
Please don’t reply.
.
🕤 3.1.5 QUIT
QUIT命令指示结束会话。
格式举例:QUIT
🕤 3.1.6 REST
REST命令用于重置会话,取消当前传输。
所存储的关于发件人和收件人的信息都被删除。连接将被复位。
格式举例:REST
🕤 3.1.7 VRFY
VRFY命令用于验证指定的用户/邮箱是否存在;
由于安全方面的原因,服务器常禁止此命令。
格式举例:VRFY: mayun@mail.qq.com
🕤 3.1.8 NOOP
NOOP命令表示无操作,服务器应响应OK,通常用于测试。
格式举例:NOOP
🕤 3.1.9 TURN
TURN命令用于让发件人和收件人交换位置,即发件人变成收件人,收件人变成发件人。
大多数SMTP服务器并不支持该功能。
格式举例:TURN
🕤 3.1.10 EXPN
EXPN命令用于要求接收邮件的主机把作为参数的发送清单进行扩展,并返回组成清单的收件人的邮箱地址。
格式举例:EXPN:xyz
🕤 3.1.11 HELP
HELP命令用于查询服务器支持的命令。
格式举例:HELP:TURN
🕤 3.1.12 SEND FROM
SEND FROM命令指明邮件是要交付到收件人的终端,而不是邮箱。
若收件人没有登录,邮件就被返回。参数就是收件人地址。
格式举例:SEND FROM: 10001@mail.qq.com
🕤 3.1.13 SOML FROM
SOML FROM 命令指明邮件是要交付到收件人的终端或邮箱。
表示若收件人已登录,邮件就只交付到终端;若收件人未登录,邮件就交付到邮箱。
参数是收件人地址。
格式举例:SOML FROM: 10001@mail.qq.com
🕤 3.1.14 SAML FROM
SAML FROM命令指明邮件是要交付到收件人的终端和邮箱。
表示若收件人己登录,邮件就交付给终端和邮箱;若收件人未登录,邮件就只交付给邮箱。
参数是收件人地址。
格式举例:SAML FROM:10001@mail.qq.com
🕘 3.2 响应
- 响应是从邮件服务器发送到用户代理
- 响应用三位十进制数字表示,后面跟着附加的文本信息。
- 一般形式是:
XXX Readable Illustration
- 下表列出了常用的一些响应。
代码 | 说明 |
---|---|
—— | 正面完成应答 |
211 | 系统状态或系统帮助响应 |
214 | 帮助信息 |
220 | 服务器就绪 |
221 | 服务关闭 |
250 | 要求的邮件操作完成 |
251 | 用户非本地,将转发向 |
—— | 正面中间回答 |
354 | 开始邮件输入,以“.”结束 |
—— | 过渡负面完成回答 |
421 | 服务器未就绪,关闭传输信道 |
450 | 邮箱不可用 |
451 | 放弃要求的操作,处理过程中出错 |
452 | 系统存储不足,要求的操作未执行 |
—— | 永久负面完成回答 |
500 | 语法差错:不能识别的命令 |
501 | 参数格式错误 |
502 | 命令不可实现 |
503 | 错误的命令序列 |
504 | 命令参数不可实现 |
550 | 要求的邮件操作未完成,邮箱不可用 |
551 | 用户非本地,请尝试 |
552 | 过量的存储分配,要求的操作未执行 |
553 | 邮箱名不可用,要求的操作未执行 |
554 | 操作失败 |
🕒 4. SMTP协议的邮件传输阶段
基本工作过程:
连接建立:
当用户代理与SMTP邮件服务器熟知端口25建立了TCP连接后,SMTP邮件服务器准备进入连接建立阶段。该阶段包括3个步骤:
① 邮件服务器发送代码220(表示服务就绪)告诉用户代理已准备好接收邮件。若邮件服务器未就绪,发送代码421(表示服务不可用)。
② 用户代理发送HELO命令,并使用自己的域名地址进行标识。用于将用户的域名通知邮件服务器。
③ 邮件服务器响应代码250(请求命令完成)或根据不同情况给出其它代码。若邮件服务器响应代码250,表示连接建立成功。
邮件传送:
在用户代理与邮件服务器之间建立连接后,发件人可以与一个或多个收件人交换单个邮件。该阶段包括8个步骤:
① 用户代理发送MAIL FROM命令声明邮件的发送人。包括发件人的邮件地址(邮箱和域名)。可以把需要返回邮件地址交给服务器,以便返回差错或报告邮件传递状况时使用。
② 服务器响应代码250(请求命令完成)或其它适当的代码。
③ 用户代理发送RCPT TO命令,需要在参数中声明收件人的邮件地址。
若收件人超过一个,则步骤③和 ④将重复进行。
④ 服务器响应代码250(请求命令完成)或其它适当的代码。若收件人超过一个,则步骤③和 ④将重复进行。
⑤ 用户代理发送DATA命令对邮件的传输进行初始化。
⑥ 服务器响应代码354(开始邮件输入)或其它适当的代码。
⑦ 用户代理用连续的行发送邮件的内容。每一行以二字符的行结束标记(回车和换行)终止,最终邮件以仅有一个点的行结束。
⑧ 服务器响应代码250(请求命令完成)或其它适当的代码。
连接终止:
在邮件传送成功后,用户代理终止连接。该阶段包括两个步骤:
① 用户代理发送QUIT命令
② 邮件服务器响应代码221或其它适当的代码。在连接终止阶段后,TCP连接必须关闭。
🕒 5. 电子邮件的信息格式
电子邮件的信息格式并不是由SMTP定义的,而是在RFC 822中单独定义的。这个RFC文档已在2008年更新为RFC 5322。一个电子邮件有信封和内容两部分。而内容又由首部和主体两部分构成。
🕒 6. 多用途因特网邮件扩展MIME
🕘 6.1 概述
- SMTP协议只能传送ASCII码文本数据,不能传送可执行文件或其他的二进制对象。
- SMTP不能满足传送多媒体邮件(例如带有图片、音频或视频数据)的需要。并且许多其他非英语国家的文字(例如中文、俄文、甚至带有重音符号的法文或德文)也无法用SMTP传送。
- SMTP 服务器会拒绝超过一定长度的邮件。
- 某些 SMTP 的实现并没有完全按照[RFC 821]的 SMTP 标准。
- 为解决SMTP传送非ASCII码文本的问题,提出了多用途因特网邮件扩展MIME (Multipurpose Internet MailExtensions)
🕘 6.2 特点
MIME 并没有改动 SMTP 或取代它。
MIME 的意图是继续使用目前的邮件格式,但增加了邮件主体的结构,并定义了传送非 ASCII 码的编码规则。
- 增加了5个新的邮件首部字段,这些字段提供了有关邮件主体的信息。
- 定义了许多邮件内容的格式,对多媒体电子邮件的表示方法进行了标准化。
- 定义了传送编码,可对任何内容格式进行转换,而不会被邮件系统改变。
实际上,MIME不仅仅用于SMTP,也用于后来的同样面向ASCII字符的HTTP。
工作过程:
🕘 6.3 MIME首部
MIME-Version
: 标志 MIME 的版本。现在的版本号是 1.1。若无此行,则为英文文本。Content-Description
: 这是可读字符串,说明此邮件是什么。和邮件的主题差不多。Content-Id
: 邮件的唯一标识符。Content-Transfer-Encoding
: 在传送时邮件的主体是如何编码的。Content-Type
: 说明邮件的性质。
🕘 6.4 MIME内容类型
- MIME标准规定 Content-Type 说明必须含有两个标识符,即内容类型(type)和子类型(subtype),中间用“
/
”分开。 - MIME 标准定义了
7
个基本内容类型和15
种子类型。
类型 | 子类型 | 说明 |
---|---|---|
Text (文本) | plain(纯文字) | 无格式的文本 |
richtext | 含有格式命令的文本 | |
Multipart (多部分) | mixed(混合) | 按规定顺序的几个独立部分部分 |
parallel(并行) | 必须同时读取的几部分 | |
digest(摘要) | 每一个部分是一个完整的RFC 822邮件 | |
alternative(交替) | 不同格式的同一邮件 | |
Message (报文) | rfc822 | 主体是被封装的邮件 |
partial(部分) | 主体是更大邮件的分片 | |
external-body(外部主体) | 主体是到另一个邮件的索引 | |
Image (图像) | jpeg | JPEG格式的图像 |
gif | GIF格式的图像 | |
Video (视频) | mpeg | MPEG格式的视频信号 |
Audio (音频) | basic(基本) | 8kHz的单声道语音编码 |
Application (应用) | postscript | Adobe PostScript |
octet-stream(字节流) | 不间断的字节序列 |
- 文本
- 原始邮件是7位的ASC II格式,不需要用MIME来转换。
- 现在有两种子类型:plain(纯文字)、richtext
- 多部分
- 主体包含多个独立的部分。
- 多部分首部需要定义每一个部分的边界。为此目的使用了一个参数。
- 该参数是一个标记串,放在每部分的前面:单独占据一行,前面有两个“-”字符。
- 主体结束的位置也使用边界标记,前面仍然有“-”字符,后面以两个“-”字符结束。
- 该类型定义了4种子类型:混合、并行、摘要和交替
- 多部分举例
Content-Type: multipart/mixed; boundary=xxxx--xxxx
Content-Type: text/plain
………………………………………………….
--xxxx
Content-Type: image/gif
………………………………………………….
--xxxx—
- 报文
- 在邮件类型中,主体就是完整的邮件、邮件的一部分或到邮件的指针。
- 现在使用的有3种子类型:
- RFC822:主体被封装在另一个邮件中(包括首部和主体)
- 部分:原始邮件被分片成不同的邮件,而邮件是分片之一
- 外部主体:主体不包含真正的邮件,而仅有对原始邮件的索引(指针)。
- 图像
- 原始邮件是一幅静止图像,没有动画。
- 当前使用的两种子类型:JPEG、GIF
- 视频
- 原始邮件是时变图像(动画)。
- 唯一的子类型是mpeg。
- 若动画包括声音,则必须使用音频内容类型分开发送。
- 音频
- 原始邮件是声音。
- 唯一的子类型是使用8kHz标准音频数据的基本子类型。
- 应用
- 原始邮件是一种前面没用定义的数据类型。
- 现在使用的只有两种子类型:
- PostScript:数据为Adobe PostScript格式
- 字节流:数据必须解释为8位字节序列(二进制文件)
🕘 6.5 MIME传送编码
MIME内容传送编码(Content-Transfer-Encoding)共有5种类型:
类型 | 说明 |
---|---|
7bit | ASCII字符和短行 |
8bit | 非ASCII字符和短行 |
二进制 | ASCII字符和长度不限的行 |
Base64 | 6位数据块被编码成8位ASCII字符 |
引用可打印 | 非ASCII字符被编码成等号后跟随一个ASCII码 |
- 7bit
- 7位ASCII编码
- 不能传输特殊的信息
- 行的长度不能超过1000字符。
- 8bit
- 8位编码。
- 非ASCII字符可以发送
- 行的长度仍不能超过1000字符。
- 二进制
- ASCII字符和长度不限的行
- Base64
- 最常见的用于传输8bit字节码的编码方式之一;
- 基于64个可打印字符来表示二进制数据的方法。
- 编码表
值 | 代码 | 值 | 代码 | 值 | 代码 | 值 | 代码 | 值 | 代码 | 值 | 代码 |
---|---|---|---|---|---|---|---|---|---|---|---|
0 | A | 11 | L | 22 | W | 33 | h | 44 | s | 55 | 3 |
1 | B | 12 | M | 23 | X | 34 | i | 45 | t | 56 | 4 |
2 | C | 13 | N | 24 | Y | 35 | j | 46 | u | 57 | 5 |
3 | D | 14 | O | 25 | Z | 36 | k | 47 | v | 58 | 6 |
4 | E | 15 | P | 26 | a | 37 | l | 48 | w | 59 | 7 |
5 | F | 16 | Q | 27 | b | 38 | m | 49 | x | 60 | 8 |
6 | G | 17 | R | 28 | c | 39 | n | 50 | y | 61 | 9 |
7 | H | 18 | S | 29 | d | 40 | o | 51 | z | 62 | + |
8 | I | 19 | T | 30 | e | 41 | p | 52 | 0 | 63 | / |
9 | J | 20 | U | 31 | f | 42 | q | 53 | 1 | ||
10 | K | 21 | V | 32 | g | 43 | r | 54 | 2 |
- 引用可打印字符(Quoted-printable)
- Base64的冗余编码方案;
- 把24比特变为4个字符(32比特),开销为25%;
- 若邮件数据由大部分的ASCII字符和一小部分非ASCII字符组成,可以使用可打印字符引用编码;
- 若字符是ASCII,原样发送;若字符是非ASCII,用3个字符发送;
- 第一个字符是等号“=”,后两个字符是用十六进制表示;
- 适用于当所传送的数据中只有少量的非 ASCII 码。
🕒 7. 邮件读取协议
常用的邮件读取协议有以下两个:
- 邮局协议POP (Post Office Protocol),
POP3
是其第三个版本,是因特网正式标准(RFC 1939)。- 非常简单、功能有限的邮件读取协议。用户只能以下载并删除方式或下载并保留方式从邮件服务器下载邮件到用户方计算机。不允许用户在邮件服务器上管理自己的邮件。(例如创建文件夹,对邮件进行分类管理等)。
- 因特网邮件访问协议IMAP (Internet Message Access Protocol),IMAP4是其第四个版本,目前还只是因特网建议标准。
- 功能比POP3强大的邮件读取协议。用户在自己的计算机上就可以操控邮件服务器中的邮箱,就像在本地操控一样,因此IMAP是一个联机协议。
- POP3和IMAP4都采用基于TCP连接的客户/服务器方式。POP3使用熟知端口
110
,IMAP4使用熟知端口143
。
🕒 8. POP3协议
🕘 8.1 工作过程
两种工作方式:
- 删除方式
- 每一次读取邮件后就把邮箱中的该邮件删除。
- 通常用于用户使用固定计算机工作的场合,而用户在读取或回答邮件后可以保存或整理所收到的邮件。
- 保存方式
- 读取邮件后仍然在邮箱中保存该邮件。
- 通常用于用户离开自己的主要计算机时来读取邮件。邮件读取后还保存在系统中,供日后读取和整理。
🕘 8.2 命令
POP3命令的一般形式是:COMMAND [Parameter] <CRLF>
- COMMAND是ASCII形式的命令名
- Parameter是相应的命令参数
- 是回车换行符(0DH,0AH)
POP3命令不区分大小写,但参数区分大小写
命令 | 参数 | 使用在何种状态中 | 描述 |
---|---|---|---|
USER | Username | 认证 | 此命令与下面的PASS命令若成功,将导致状态转换 |
PASS | Password | 认证 | 此命令若成功,状态转化为处理状态 |
APOP | Name, Digest | 认证 | Digest是MD5消息摘要 |
STAT | None | 处理 | 请求服务器发回关于邮箱的统计资料 |
UIDL | [Msg#] (邮件号,下同) | 处理 | 返回邮件的唯一标识符 |
LIST | [Msg#] | 处理 | 返回邮件数量和每个邮件的大小 |
RETR | [Msg#] | 处理 | 返回由参数标识的邮件的全部文本 |
DELE | [Msg#] | 处理 | 服务器将由参数标识的邮件标记为删除,由QUIT命令执行 |
TOP | [Msg# n] | 处理 | 处理服务器将返回由参数标识的邮件前n行内容,n必须是正整数 |
NOOP | None | 处理 | 服务器返回一个肯定的响应,用于测试连接是否成功 |
QUIT | None | 处理 认证 | 1. 若服务器处于“处理”状态,将进入“更新”状态以删除任何标记为删除的邮件,并重返“认证”状态,结束会话,释放连接。 2. 若服务器处于“认证”状态,则结束会话,退出连接。 |
🕘 8.3 响应
POP3邮件服务器响应是由一个或多个命令行组成
响应第一行“+OK
”或“-ERR
”开头,其后附加若干ASCII文本信息。
“+OK”和“-ERR”分别指出相应的操作状态成功还是失败。
🕘 8.4 三种工作状态
- 认证状态
- 处理状态
- 更新状态
🕒 9. 基于万维网的电子邮件
- 通过浏览器登录(提供用户名和口令)邮件服务器万维网网站就可以撰写、收发、阅读和管理电子邮件。这种工作模式与IMAP很类似,不同的是用户计算机无需安装专门的用户代理程序,只需要使用通用的万维网浏览器。
- 邮件服务器网站通常都提供非常强大和方便的邮件管理功能,用户可以在邮件服务器网站上管理和处理自己的邮件,而不需要将邮件下载到本地进行管理。
- 这种工作模式在用户浏览器与邮件服务器网站之间使用HTTP协议,而邮件服务器之间使用SMTP协议。
🕒 10. 实验
🔎 原来自己可以搭建邮箱服务器发送邮件
实验步骤:
一、准备两台PC机,PC1部署邮件服务器,PC2作为客户端,访问邮件服务器
二、在PC1上使用hmailServer部署邮件服务器
三、在PC2使用Wireshark进行抓包,并使用Foxmail软件进行邮件服务器的访问,包括收邮件和发邮件
使用hmailServer部署邮件服务器:
一路next安装后,进入hMailServer
点击【Advanced】中【TCP/IP ports】的【0.0.0.0/25/SMTP】、【0.0.0.0/110/POP3】、【0.0.0.0/143/IMAP】、【0.0.0.0/587/SMTP】,将TCP/IP address设置为本机IP。
使用Foxmail软件进行邮件服务器的访问:
- 选择“其他邮箱”
- 点击“手动设置”
- 如下图填入【接收服务器类型】,【邮件账号】,【密码】为123456,【POP服务器】、【SMTP服务器】填入hMailServer设置的IP地址
❗ 转载请注明出处
作者:HinsCoder
博客链接:🔎 作者博客主页
相关文章:

【网络协议详解】——电子邮件系统协议(学习笔记)
目录 🕒 1. 电子邮件系统概述🕒 2. 简单邮件传送协议SMTP🕒 3. SMTP协议的命令和响应🕘 3.1 命令🕤 3.1.1 HELO🕤 3.1.2 MAIL FROM🕤 3.1.3 RCPT TO🕤 3.1.4 DATA🕤 3.1.…...

年度发布 | MeterSphere一站式开源持续测试平台发布v2.10 LTS版本
2023年5月25日,MeterSphere一站式开源持续测试平台正式发布v2.10 LTS版本。这是继2022年5月发布v1.20 LTS版本后,MeterSphere开源项目发布的第三个LTS(Long Term Support)版本。MeterSphere开源项目组将对MeterSphere v2.10 LTS版…...

从 OceanBase 迁移数据到 DolphinDB
OceanBase 是一款金融级分布式关系数据库,具有数据强一致、高可用、高性能、在线扩展、高度兼容 SQL标准和主流关系数据库、低成本等特点,但是其学习成本较高,且缺乏金融计算函数以及流式增量计算的功能。 DolphinDB 是一款国产的高性能分布…...

淘宝商品列表数据接口(支持价格、销量排序)
淘宝商品列表数据接口是淘宝提供的一种可以获取淘宝商品信息的接口。通过该接口,可以获取到具有一定规则的商品信息,例如按照价格排序、按照销量排序等。接口返回的数据格式为JSON格式,可以方便地处理数据。 我们可以通过调用淘宝提供的API&…...
Android 11 版本变更总览
Android 11 版本 Android 11 总览重大隐私权变更行为变更:所有应用行为变更:以 Android 11 为目标平台的应用功能和 API 概览Intent系统广播 intent(API 级别 30)通用应用 intent(API 级别 30) Android 11 …...

传染病学模型 | Matlab实现基于SIS传染病模型模拟城市内人口的互相感染及城市人口流动所造成的传染
文章目录 效果一览基本描述模型介绍程序设计参考资料效果一览 基本描述 传染病学模型 | Matlab实现基于SIS传染病模型模拟城市内人口的互相感染及城市人口流动所造成的传染 模型介绍 SIS模型是一种基本的传染病学模型,用于描述一个人群中某种传染病的传播情况。SIS模型假设每个…...
物联网技术如何改变我们的生活:一位资深物联网专家的见解
物联网(IoT)是指通过网络互联的物理设备、车辆、建筑物以及其他物品,这些物品都内置了传感器、执行器、软件和网络连接器,使它们能够收集和交换数据。物联网技术已经在各个领域产生了深远的影响,包括家庭、医疗、交通、…...

node.js+vue.js大学生在线选课系统的设计与实现93pul
本次设计任务是要设计一个选课系统的设计与实现,通过这个系统能够满足用户对选课信息的需求。系统的主要功能包括:个人中心、学生管理、教师管理、选课信息管理等功能。 管理员可以根据系统给定的账号进行登录,登录后可以进入选课系统的设计与…...

华为OD机试真题 Java 实现【寻找符合要求的最长子串】【2023Q1 200分】
一、题目描述 给定一个字符串 s ,找出这样一个子串: 该子串中的任意一个字符最多出现2次;该子串不包含指定某个字符;请你找出满足该条件的最长子串的长度。 二、输入描述 第一行为要求不包含的指定字符,为单个字符,取值范围[0-9a-zA-Z]。 第二行为字符串s,每个字符范…...

接口测试工具Postman接口测试图文教程
目录 一、前言 二、Postman安装和使用 三、请求方式 四、资金记录接口实例演示 一、前言 在前后端分离开发时,后端工作人员完成系统接口开发后,需要与前端人员对接,测试调试接口,验证接口的正确性可用性。而这要求前端开发进…...

视频编辑软件:迅捷视频工具箱
这是一款功能强大、易于使用的视频编辑工具,支持视频剪辑、视频转换、音频转换、视频压缩、视频水印、字幕贴图等实用功能,可以帮助你制作出高质量的视频作品。(传送门:https://www.xunjiepdf.com/xjspgjx) 功能简介 …...

网络知识点之-HTTP协议
超文本传输协议(Hyper Text Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII形式给出;而消息内…...
K类函数和KL类函数
Class K \mathcal{K} K function- K \mathcal{K} K类函数 Definition: A continuous function α : [ 0 , a ) → [ 0 , ∞ ) \alpha:[0,a)\rightarrow[0,\infin) α:[0,a)→[0,∞) is said belong to class K \mathcal{K} K if it strictly increasing and α ( 0 ) 0 …...

华为OD机试之完美走位(Java源码)
完美走位 题目描述 在第一人称射击游戏中,玩家通过键盘的A、S、D、W四个按键控制游戏人物分别向左、向后、向右、向前进行移动,从而完成走位。 假设玩家每按动一次键盘,游戏任务会向某个方向移动一步,如果玩家在操作一定次数的键…...
Vue 原始(传统)或特别的视频组件具体实现方法
一、原始的播放器组件(传统的视频播放组件) 参考链接 1. Vue2视频播放(Video) 二、自定义视频播放组件,自播放,无控制模式 简单点的理解,就是没有点击就会暂停播放视频,还有忽略…...

香豆素荧光标记652966-03-5,ATTO425 acid,ATTO 425 羧酸,进行简析说明
中文名称:ATTO 425 羧酸 英文名称:ATTO425 COOH,ATTO-425 carboxylic acid 规格标准:10mg,25mg,50mg CAS:652966-03-5 分子式:C22H27NO6 分子量:401.46结构式:…...

linux信号量与PV操作知识点总结
信号量 信号量(semaphore) 与已经介绍过的 IPC 结构不同,它是一个计数器,信号量用于实现进程间的与斥与同步,而不是用于存储进程间通信数据。 1、特点 (1)信号量用于进程间同步,若要在进程间传递数据需要结…...
6-python中的string类型
目录 内容提要字符串截取python的转义字符 \python的字符串格式化format()的参数format()的数字格式化 字符串常用函数count()函数endwith()函数 与 startwith()函数find()函数与index()函数find()函数 ⭐index()函数 判断字符串内的字符种类函数isalnum()函数isalpha()函数isd…...

Windows系统内核溢出漏洞提权
目录 Windows内核溢出漏洞原理 溢出漏洞简介 什么是缓冲区 缓冲区溢出 缓冲区溢出目的 Windows内核溢出漏洞利用流程 提权实战思路 手工提权测试 辅助提权 EXP如何寻找 使用MSF提权 关于提权时可能遇到的问题 如果提权的时候发现无法执行命令的话,可以上…...

BlackIce病毒分析
概述 blackice是一个古老的感染型病毒,可感染系统中exe、doc和xls文件,通过USB设备和网络驱动器来传播,会向C&C下载pe执行,会关闭常用的杀软进程。下面找了一个样本,这个样本的代码结构清晰,用IDA pro…...

华为云AI开发平台ModelArts
华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...

业务系统对接大模型的基础方案:架构设计与关键步骤
业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...

XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...

TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...

23-Oracle 23 ai 区块链表(Blockchain Table)
小伙伴有没有在金融强合规的领域中遇见,必须要保持数据不可变,管理员都无法修改和留痕的要求。比如医疗的电子病历中,影像检查检验结果不可篡改行的,药品追溯过程中数据只可插入无法删除的特性需求;登录日志、修改日志…...
Qt Widget类解析与代码注释
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

ServerTrust 并非唯一
NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...

SpringTask-03.入门案例
一.入门案例 启动类: package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...