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

HTTPS、DNS、正则表达式

HTTPS原理

HTTPS(Hypertext Transfer Protocol Secure)是一种安全的通信协议,它基于HTTP协议,在数据传输过程中使用了加密技术来保护通信的安全性和完整性。HTTPS的工作原理主要包括以下几个步骤:

  1. 客户端发起HTTPS请求:客户端(如Web浏览器)向服务器发送一个HTTPS请求。

  2. 服务器获取证书:服务器收到请求后,会将自己的证书发送给客户端。证书中包含了服务器公钥、服务器的身份信息以及证书的签发机构等信息。

  3. 客户端验证证书:客户端在收到服务器的证书后,会对证书进行验证。验证过程包括检查证书的有效期、签名是否有效以及证书是否由可信任的证书颁发机构签发等。

  4. 客户端生成会话密钥:如果证书验证通过,客户端会生成一个随机的会话密钥,用于后续的数据加密和解密。

  5. 客户端使用服务器公钥加密会话密钥:客户端使用服务器的公钥对会话密钥进行加密,并将加密后的会话密钥发送给服务器。

  6. 服务器使用私钥解密会话密钥:服务器收到加密的会话密钥后,使用自己的私钥进行解密,得到原始的会话密钥。

  7. 数据传输:客户端和服务器使用会话密钥对数据进行加密和解密,保证数据在传输过程中的安全性。

通过以上步骤,HTTPS协议可以确保通信过程中的数据安全性和完整性。加密技术的使用可以防止数据被窃取或篡改,同时证书的验证可以确保服务器的身份可信。这使得HTTPS成为了保护用户隐私和防止网络攻击的重要协议。

DNS原理

DNS(Domain Name System)是互联网中用于将域名转换为 IP 地址的系统。它的工作原理可以简单地分为以下几个步骤:

1. 用户发起域名解析请求:当用户在浏览器中输入一个域名时(如www.example.com),浏览器会向本地计算机的 DNS 客户端发送一个 DNS 查询请求。

2. 本地 DNS 客户端查询本地缓存:本地 DNS 客户端首先会查询本地缓存,看是否已经存储了该域名的 IP 地址。如果有,就直接返回给用户。

3. 本地 DNS 客户端查询根域名服务器:如果本地缓存中没有该域名的 IP 地址,本地 DNS 客户端会向根域名服务器发送查询请求。根域名服务器是全球 DNS 系统的顶级服务器,负责管理顶级域名(如.com、.org等)的 DNS 服务器地址。

4. 根域名服务器返回顶级域名服务器地址:根域名服务器会将负责该顶级域名的顶级域名服务器的地址返回给本地 DNS 客户端。

5. 本地 DNS 客户端查询顶级域名服务器:本地 DNS 客户端会向负责该顶级域名的顶级域名服务器发送查询请求。

6. 顶级域名服务器返回权威域名服务器地址:顶级域名服务器会将负责该域名的权威域名服务器的地址返回给本地 DNS 客户端。

7. 本地 DNS 客户端查询权威域名服务器:本地 DNS 客户端会向负责该域名的权威域名服务器发送查询请求。

8. 权威域名服务器返回域名对应的 IP 地址:权威域名服务器会将该域名对应的 IP 地址返回给本地 DNS 客户端。

9. 本地 DNS 客户端将 IP 地址返回给用户:本地 DNS 客户端收到 IP 地址后,将其返回给用户的浏览器。

10. 用户的浏览器发起连接请求:用户的浏览器使用获取到的 IP 地址,向对应的服务器发起连接请求,建立与服务器的通信。

通过以上步骤,DNS 实现了将用户输入的域名转换为对应的 IP 地址,从而使得用户能够通过域名访问到对应的网站或服务。DNS 的分布式设计和缓存机制可以提高解析效率和网络性能。

正则表达式

正则表达式是表达文本模式的方法。

  • .:匹配任何单个字符。

  • ?:上一项是可选的,最多匹配一次。

  • *:前一项将被匹配零次或多次。

  • +:前一项将被匹配一次或多次。

  • {N}:上一项完全匹配N次。

  • {N,}:前一项匹配N次或多次。

  • {N,M}:前一项至少匹配N次,但不超过M次。

  • --:表示范围,如果它不是列表中的第一个或最后一个,也不是列表中某个范围的终点。

  • ^:匹配行首的空字符串;也代表不在列表范围内的字符。

  • $:匹配行尾的空字符串。

  • \b:匹配单词边缘的空字符串。

  • \B:匹配空字符串,前提是它不在单词的边缘。

  • \<:匹配单词开头的空字符串。

  • \>:匹配单词末尾的空字符串。

\d匹配一个数字字符。等价于[0-9]。
\D匹配一个非数字字符。
\f匹配一个换页符。
\n匹配一个换行符。
\r匹配一个回车符。
\s匹配任何不可见字符,包括空格、制表符、换页符等等。
\S匹配任何可见字符。
\t匹配一个制表符。
\v匹配一个垂直制表符。
\w匹配包括下划线的任何单词字符。类似但不等价于“[A-Za-z0-9_]”,
\W匹配任何非单词字符。

元字符

元字符是表示特殊函数的字符,包括以下这些^ $ . [ ] { } - ? * + ( ) | \\。除了元字符,其他字符在正则表达式中,都表示原来的含义。

  • . 匹配任意字符,但不含空字符

  • ^ 匹配文本行开头

  • $ 匹配文本行结尾

$ grep -h '.zip' dirlist*.txt

上面命令在文件中查找包含正则表达式“.zip”的文本行。注意,上面命令不会匹配zip程序,因为zip只有三个字符,而.zip要求四个字符。

$ grep -h '^zip' dirlist*.txt
$ grep -h 'zip$' dirlist*.txt

上面命令分别在文件列表中搜索行首,行尾以及行首和行尾同时包含字符串“zip”(例如,zip 独占一行)的匹配行。 注意正则表达式‘^$’(行首和行尾之间没有字符)会匹配空行。

方括号

方括号之中的字符,表示可以任意匹配其中的一个。

$ grep -h '[bg]zip' dirlist*.txt

上面命令匹配包含字符串“bzip”或者“gzip”的任意行。

注意,元字符放入方括号之中,会失去其特殊含义。但有两种情况除外,^在方括号的开头,表示否定,否则只是一个普通字符,表示原义。

$ grep -h '[^bg]zip' dirlist*.txt

上面命令匹配不以bg开头的zip字符串。注意,上面命令不会匹配zip,因为一个否定的字符集仍然要求存在一个字符。

-在方括号之中表示一个字符区域。

$ grep -h '^[A-Z]' dirlist*.txt

上面命令匹配所有以大写字母开头的文本行。类似的,^[A-Za-z0-9]表示以大写字母、小写字母、数字开头的文本行。

注意,连字号如果不构成一个字符区域,则表示其本来的含义。

$ grep -h '[-AZ]' dirlist*.txt

上面命令匹配包含一个连字符,或一个大写字母“A”,或一个大写字母“Z”的文件名。

预定义字符类

由于locale设置不同,Shell展开正则表达式[A-Z]时,可能不是解释为所有大写字母,而是解释为包括所有字母的字典顺序。

$ ls /usr/sbin/[A-Z]*

上面命令在某些发行版里面,会返回所有大写字母或小写字母开头的文件。

为了避免这个问题,可以使用正则表达式的预定义字符类。

  • [:alnum:] 字母数字字符。在 ASCII 中,等价于:[A-Za-z0-9]

  • [:word:][:alnum:]相同, 但增加了下划线字符。

  • [:alpha:] 字母字符。在 ASCII 中,等价于[A-Za-z]

  • [:blank:] 包含空格和 tab 字符。

  • [:cntrl:] ASCII 的控制码。包含了0到31,和127的 ASCII 字符。

  • [:digit:] 数字0到9

  • [:graph:] 可视字符。在 ASCII 中,它包含33到126的字符。

  • [:lower:] 小写字母。

  • [:punct:] 标点符号字符。

  • [:print:] 可打印的字符。等于[:graph:]中的所有字符,再加上空格字符。

  • [:space:] 空白字符,包括空格,tab,回车,换行,vertical tab, 和 form feed.在 ASCII 中, 等价于[ \t\r\n\v\f]

  • [:upper:] 大写字母。

  • [:xdigit:] 用来表示十六进制数字的字符。在 ASCII 中,等价于[0-9A-Fa-f]

$ ls /usr/sbin/[[:upper:]]*

上面命令返回所有大写字母开头的文件名。

选择

|表示匹配一系列字符串之中的一个。注意与方括号区分,方括号表示匹配一系列字符之中的一个。

$ echo "AAA" | grep -E 'AAA|BBB'
AAA
$ echo "BBB" | grep -E 'AAA|BBB'
BBB
$ echo "CCC" | grep -E 'AAA|BBB'
$

上面代码中,AAA|BBB表示匹配字符串AAA或者是字符串BBBgrep程序使用-E参数,表示按照正则表达式规则匹配。并且,这个正则表达式放在单引号之中,为的是阻止Shell把|解释为管道操作符。

|可以多个连用,也可以与其他正则规则结合使用。

$ echo "AAA" | grep -E 'AAA|BBB|CCC'
​
$ grep -Eh '^(bz|gz|zip)' dirlist*.txt

量词操作符

量词操作符表示一个元素被匹配的次数。

  • ? 匹配前面的元素出现0次或1次

  • * 匹配前面的元素出现0次或多次

  • + 匹配前面的元素出现1次或多次

  • {n} 匹配前面的元素出现了n

  • {n,m} 匹配前面的元素它至少出现了n次,但是不多于m

  • {n,} 匹配前面的元素至少出现了n

  • {,m} 匹配前面的元素,如果它出现的次数不多于 m 次。

相关文章:

HTTPS、DNS、正则表达式

HTTPS原理 HTTPS&#xff08;Hypertext Transfer Protocol Secure&#xff09;是一种安全的通信协议&#xff0c;它基于HTTP协议&#xff0c;在数据传输过程中使用了加密技术来保护通信的安全性和完整性。HTTPS的工作原理主要包括以下几个步骤&#xff1a; 客户端发起HTTPS请求…...

MAC电脑设置charles,连接手机的步骤说明(个人实际操作)

目录 一、charles web端设置 1. 安装charles之后&#xff0c;先安装证书 2. 设置 Proxy-Proxy Settings 3. 设置 SSL Proxying 二、手机的设置 1. 安卓 2. ios 资料获取方法 一、charles web端设置 1. 安装charles之后&#xff0c;先安装证书 Help-SSL Proxying-Inst…...

百度文心一言接入教程-Java版

原文链接 前言 前段时间由于种种原因我的AI BOT网站停运了数天&#xff0c;后来申请了百度的文心一言和阿里的通义千问开放接口&#xff0c;文心一言的接口很快就通过了&#xff0c;但是文心一言至今杳无音讯。文心一言通过审之后&#xff0c;很快将AI BOT的AI能力接入了文心…...

Games101学习笔记 - 基础数学

向量 向量&#xff1a;方向和长度&#xff0c;没有起始位置 向量长度&#xff1a;各个方向平方相加开方 单位向量&#xff1a;向量除向量的长度 点乘 在笛卡尔坐标系中的点乘计算&#xff1a; 几何意思&#xff1a; 表示一个向量在另一个向量上的投影点乘在图形学中应用&a…...

Linux进程的认识

查看进程指令proc/ps 注意哦, 我们经常使用的指令, 像ls, touch…这些指令在启动之后本质上也是进程 proc 是内存文件系统, 存放着当前系统的实时进程信息. 每一个进程在系统中, 都会存在一个唯一的标识符(pid -> process id), 就如同学生在学校里有一个专门的学号一样. 大…...

向量vector与sort()

运行代码&#xff1a; //向量与sort() #include"std_lib_facilities.h" //声明Item类 struct Item {string name;int iid;double value;friend istream& operator>>(istream& is, Item& ii);friend ostream& operator<<(ostream& o…...

Netty学习(三)

文章目录 三. Netty 进阶1. 粘包与半包1.1 粘包现象服务端代码客户端代码 1.2 半包现象服务端代码客户端代码 1.3 现象分析粘包半包缘由滑动窗口MSS 限制Nagle 算法 1.4 解决方案方法1&#xff0c;短链接方法2&#xff0c;固定长度方法3&#xff0c;固定分隔符方法4&#xff0c…...

c++学习(布隆过滤器)[23]

布隆 布隆过滤器&#xff08;Bloom Filter&#xff09;是一种概率型数据结构&#xff0c;用于判断一个元素是否可能存在于一个集合中。它使用多个哈希函数和位图来表示集合中的元素。 布隆过滤器的基本原理如下&#xff1a; 初始化&#xff1a;创建一个长度为m的位图&#xf…...

React的UmiJS搭建的项目集成海康威视h5player播放插件H5视频播放器开发包 V2.1.2

最近前端的一个项目&#xff0c;大屏需要摄像头播放&#xff0c;摄像头厂家是海康威视的&#xff0c;网上找了一圈都没有React集成的&#xff0c;特别是没有使用UmiJS搭脚手架搭建的&#xff0c;所以记录一下。 海康威视的开放平台的API地址&#xff0c;相关插件和文档都可以下…...

细讲TCP三次握手四次挥手(二)

TCP/IP 协议族 应用层 应用层( application-layer &#xff09;的任务是通过应用进程间的交互来完成特定网络应用。应用层协议定义的是应用进程&#xff08;进程&#xff1a;主机中正在运行的程序&#xff09;间的通信和交互的规则。 对于不同的网络应用需要不同的应用层协议…...

LeetCode Top100 Liked 题单(序号19~)

19. Remove Nth Node From End of List 题意&#xff1a;给一个链表&#xff0c;删除从尾数起的第n个结点&#xff0c;返回头节点。 我的思路 指针到最后&#xff0c;数出来有多少个&#xff0c;之从前向后数&#xff0c;再删掉节点 代码 10ms Beats 16.06% class Solution…...

qssh使用

到官网下载qssh的源码QSsh-botan-1&#xff0c;使用qtcreator打开后&#xff0c;直接编译&#xff0c;即可得到qssh的库 头文件将QSsh-botan-1\src\libs\ssh目录下的.h文件拷到include文件夹下&#xff0c;即为库头文件。 qssh有个问题&#xff0c;如果你将qssh的类放在子线程…...

持续部署CICD

目录 &#xff08;1&#xff09;CICD的开展场景 &#xff08;2&#xff09;项目实际应用 CICD 是持续集成&#xff08;Continuous Integration&#xff09;和持续部署&#xff08;Continuous Deployment&#xff09;简称。指在研发过程中自动执行一系列脚本来降低开发引入 bug…...

ARM 循环阻塞延迟函数

串行驱动的关键是双方能够按照既定的时序进行检测、设置相关引脚上的电平&#xff0c;比如单总线、I2c这样基本的可以用GPIO模拟的时序协议&#xff0c;需要主从双方&#xff0c;必须在链路接口内严格按照微妙级的延迟单位进行时序同步。 所以&#xff0c;在这种对时间要求很敏…...

Spark的DataFrame和Schema详解和实战案例Demo

1、概念介绍 Spark是一个分布式计算框架&#xff0c;用于处理大规模数据处理任务。在Spark中&#xff0c;DataFrame是一种分布式的数据集合&#xff0c;类似于关系型数据库中的表格。DataFrame提供了一种更高级别的抽象&#xff0c;允许用户以声明式的方式处理数据&#xff0c…...

WPF线程使用详解:提升应用性能和响应能力

在WPF应用程序开发中&#xff0c;线程的合理使用是保证应用性能和响应能力的关键。WPF提供了多种线程处理方式&#xff0c;包括UI线程、后台线程、Task/Async Await和BackgroundWorker。这些方式与传统的Thread类相比&#xff0c;更加适用于WPF框架&#xff0c;并能够简化线程操…...

ava版知识付费平台免费搭建 Spring Cloud+Spring Boot+Mybatis+uniapp+前后端分离实现知识付费平台

提供私有化部署&#xff0c;免费售后&#xff0c;专业技术指导&#xff0c;支持PC、APP、H5、小程序多终端同步&#xff0c;支持二次开发定制&#xff0c;源码交付。 Java版知识付费-轻松拥有知识付费平台 多种直播形式&#xff0c;全面满足直播场景需求 公开课、小班课、独…...

libuv库学习笔记-basics_of_libuv

Basics of libuv libuv强制使用异步和事件驱动的编程风格。它的核心工作是提供一个event-loop&#xff0c;还有基于I/O和其它事件通知的回调函数。libuv还提供了一些核心工具&#xff0c;例如定时器&#xff0c;非阻塞的网络支持&#xff0c;异步文件系统访问&#xff0c;子进…...

【Vuvuzela 声音去噪算法】基于流行的频谱减法技术的声音去噪算法研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

Vue + Element-ui组件上传图片报错问题解决方案

在前端开发中&#xff0c;我们经常需要模拟网络请求以进行单元测试或开发调试。而在模拟网络请求时&#xff0c;我们常常会使用到MockXMLHttpRequest对象。MockXMLHttpRequest对象是一个用于模拟XMLHttpRequest对象的工具&#xff0c;它提供了一种简单的方式来模拟网络请求&…...

利用ngx_stream_return_module构建简易 TCP/UDP 响应网关

一、模块概述 ngx_stream_return_module 提供了一个极简的指令&#xff1a; return <value>;在收到客户端连接后&#xff0c;立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量&#xff08;如 $time_iso8601、$remote_addr 等&#xff09;&a…...

简易版抽奖活动的设计技术方案

1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

使用分级同态加密防御梯度泄漏

抽象 联邦学习 &#xff08;FL&#xff09; 支持跨分布式客户端进行协作模型训练&#xff0c;而无需共享原始数据&#xff0c;这使其成为在互联和自动驾驶汽车 &#xff08;CAV&#xff09; 等领域保护隐私的机器学习的一种很有前途的方法。然而&#xff0c;最近的研究表明&…...

Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器

第一章 引言&#xff1a;语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域&#xff0c;文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量&#xff0c;支撑着搜索引擎、推荐系统、…...

React19源码系列之 事件插件系统

事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI

前一阵子在百度 AI 开发者大会上&#xff0c;看到基于小智 AI DIY 玩具的演示&#xff0c;感觉有点意思&#xff0c;想着自己也来试试。 如果只是想烧录现成的固件&#xff0c;乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外&#xff0c;还提供了基于网页版的 ESP LA…...

USB Over IP专用硬件的5个特点

USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中&#xff0c;从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备&#xff08;如专用硬件设备&#xff09;&#xff0c;从而消除了直接物理连接的需要。USB over IP的…...

嵌入式学习笔记DAY33(网络编程——TCP)

一、网络架构 C/S &#xff08;client/server 客户端/服务器&#xff09;&#xff1a;由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序&#xff0c;负责提供用户界面和交互逻辑 &#xff0c;接收用户输入&#xff0c;向服务器发送请求&#xff0c;并展示服务…...

云原生安全实战:API网关Kong的鉴权与限流详解

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关&#xff08;API Gateway&#xff09; API网关是微服务架构中的核心组件&#xff0c;负责统一管理所有API的流量入口。它像一座…...

【C++特殊工具与技术】优化内存分配(一):C++中的内存分配

目录 一、C 内存的基本概念​ 1.1 内存的物理与逻辑结构​ 1.2 C 程序的内存区域划分​ 二、栈内存分配​ 2.1 栈内存的特点​ 2.2 栈内存分配示例​ 三、堆内存分配​ 3.1 new和delete操作符​ 4.2 内存泄漏与悬空指针问题​ 4.3 new和delete的重载​ 四、智能指针…...