wireshark网络抓包
由于图片和格式解析问题,可前往 阅读原文
到这里已经讲了两个抓包工具的使用了,大家应该对抓包不是很陌生了。而wireshark相对于fiddler和charles更加偏向于网络层面的抓包或者说是一个网络封包分析工具。使用对象更适合于网络相关人员(网络管理员/相关运维等等),目的用来截取网络通信,显示详细的封包资料。
wireshark可以用来检测网络环境、入侵侦测系统等网络层面的用处,相对于开发人员,可以用来分析一些基础的网络层面的基础,如HTTP协议、UDP协议、TCP/IP协议、ARP协议等对我们比较友好的网络协议,当然如果你熟练操作网络可以没有任何限制。
下载安装
:::tip
由于一些历史原因,wireshark已经是个免费软件,下载简单,功能强大,非常适合网络协议的学习和认识
:::
wireshark支持windows、macOS、Linux几个版本,基本上常见的操作系统都可以支持的,直接打开官网下载页面,选择适合自己的操作系统,下载即可,下载完后一路点击确定安装就可。这里作者是macOS,就安装了mac版,如无特殊备注,以下都以mac版本为基础介绍,其他大同小异。
下载后打开大概长这个样子,它可以捕获机器上所有物理网卡虚拟网卡的流量,选择一个网卡开始捕获
菜单栏
菜单栏这里只讲下统计,它相对来说更加实用。统计内部有好多不同维度的分组,可以从不同维度去查看统计信息,如:流量、TCP流、UDP多播、HTTP等等。统计需要数据才可以统计出结果,可以先抓取少量的包,点击内部的流量图可以很清晰的看到网络通信
工具栏
当进来时会进入欢迎页面,可以选择指定的网络接口(本地、wifi)或直接点击左上角的鲨鱼图标开始抓包。
以上看到已经抓取了大量的网络数据包,下面开看看工具栏的作用
工具栏主要使用来控制抓包的,以上的图标按顺序依次是开始抓包、停止抓包、重新捕获、捕获选项(网卡、过滤器)、打开本地捕获文件、保存捕获文件、关闭捕获、重新加载捕获文件、搜索(过滤器),基本上的图标控制按钮就这么简单,后面的都是对界面的一些控制,没什么说的,自己动手试试即可。
过滤器
当使用wireshark抓包时难免会有大量的抓包记录,而我们往往会针对某个网络包进行分析,而在这种大量数据下会严重影响到分析进度。为了避免其它数据造成的干扰,wireshark提供了过滤器来帮助过滤掉不必要的数据或只显示我们想要的数据。
过滤器分为捕获过滤器和显示过滤器,而捕获过滤器又可以对网络接口和协议相关的两个维度的过滤。显示过滤器主要是对抓取到的网络数据包进行过滤显示,其针对的显示方面的的过滤,而捕获过滤器则是从源头进行过滤。网络接口主要告诉wireshark要抓取哪个接口的网络数据包如:wifi、本地回环、以太网、虚拟网、蓝牙等等,协议方面的选项通常告诉其抓取什么协议、什么端口、ip等等,如:TCP协议、HTTP协议、广播、ip等等。
在进入wireshark时的欢迎页面就可以对进行不同的接口进行选择,双击接口就可以抓取了,不需要选择时,默认会抓取所有接口的数据,可以直接点击左上角的鲨鱼按钮开始抓取。
除了在欢迎页选择不同的网络接口外,也可以在抓包页面上方的类似设置的按钮中,也可以选择不同的接口和详细的抓包选项,如下图:
更详细过滤一些选项
上面的过滤器我选择了抓取本地接口和端口为9999的数据包,这里我用Nodejs
监听9999
端口号开启了一个web服务,接着用curl请求这个地址:
➜ curl -I 192.168.3.2:9999 # 请求成功
HTTP/1.1 200 OK
X-Powered-By: Express
Set-Cookie: __ut=123456; Path=/
Content-Type: application/json; charset=utf-8
Content-Length: 79
ETag: W/"4f-IdYGYravFqZ+6sBfe27/eQDuPDo"
Date: Sat, 22 Oct 2022 08:46:19 GMT
Connection: keep-alive
Keep-Alive: timeout=5
现在看看当前的抓包情况,可以看到已经抓取到了,原地址和目标地址都是192.168.3.2
本机局域网地址,还看到TCP协议、HTTP协议,如果现在只想分析HTTP协议的数据包呢,就可以用上显示过滤器了。设置它很简单,在记录上方的输入框即可过滤。如下图:显示http
协议的请求。
以上还可以再细分,可以结合多个过滤选项使用and
/or
进行连接过滤,如http请求的携带了query
http and http and http.request.uri.query.parameter
这里过滤选项不需要记下来,点击输入框前面的小图标,可以列出不同的选项,点击后可以在输入框中添加.
进行属性的进一步过滤。除了这个内置的显示过滤外,可以点击菜单栏的放大镜按钮,也会显示出过滤的输入框。这里相对来说有了更广的过滤条件,可以使用显示过滤、正则搜索、十六进制、字符串等等,点击搜索即可,搜索后并不会将不在范围的记录隐藏掉,而知识将目标高亮而已。
ARP协议
通过前面的学习你应该对wireshark这款软件的抓包基本功能有了了解,现在就来使用它来抓取数据包分析吧,本文会分别介绍ARP协议、TCP协议等网络协议,让我们以ARP协议开始吧。
在抓包开始前首先要明白什么是ARP协议,了解协议本身有助于我们抓取的准备和方向,这里简单的概述下。
ARP是地址解析协议,从协议层次角度是个网络层协议,功能角度是链路层协议,用来查询ip所对应的mac地址。在互联网通信中,主机与主机之间通信,都是通过OSI模型从上到下的协议将数据封装最终发送到目的主机,通常情况下我们常见的是对应主机的ip,然后就可以知道目标主机的位置了,但这只是表面上的,通信双方还需要知道双方的mac地址才能通信,没有mac地址就像快递只写了收件人姓名,却没有收件地址一样。
上层应用程序只关心ip地址而不关系mac地址,mac地址需要通过ARP协议获取目标主机地址,完成数据的封装。那么ARP协议是如何获取目标主机的mac地址的,假如这里有两台机器:p1的ip地址192.168.3.1
,p2的ip地址192.168.3.2
,当p1想和p2通信时,从OSI协议封装顺序发送方自顶向下封装数据,ARP从上层知道了p2的目标ip地址,然后封装ARP数据包,将自己的ip地址和mac地址和对方的ip和mac占位地址封装,然后通过以太网的广播形式发送出去,交换机、网关或路由器等设备接收到广播包后,会将数据发给同一局域网的其他主机,当不同的主机接受到广播包后,会判断自己是不是这个发送者寻找的ip,如果不是则会将包丢弃掉不做任何应答;而如果当前主机和目的ip一致的话,将会接受此包并将自己的mac地址封装进去,并以单播的形式回应发送主机方,发送主机方就会知道目标ip所对应的mac地址了;如果在局域网中没找到响应的主机,交换机等会继续向上发送数据包直到找到位置。
上图简单的画了请求的过程:
- 发送方ARP广播发送数据包请求到交换机
- 交换机转发给局域网内的主机
- 不是目标ip的主机丢弃掉数据包,目标ip主机接收数据包
- 目标主机以单播的形式回应发送方
:::tip 小提示
在ARP请求广播过程中,途径的网关和其他接收到广播的主机虽然不是目标主机,但也会在自己的ARP缓存表中记住发送方的ip和mac地址,这是方便以后其他主机向目标主机通信。
当目标主机找到后,也会记住发送方的ip和mac地址,然后将自己的mac地址和ip地址封装数据后以单播的形式回应发送给发送方。
:::
接下来就用wireshark抓包看看实际的网络请求情况,这里一台机器的ip为192.168.3.8
,现在让它请求网关192.168.3.1
,这里使用linux的nmap扫描工具扫描网关。
首先先打开wireshark监听抓包,这里直接抓取所有的接口,在显示过滤器中输入ARP
协议来过滤显示ARP协议的数据包。
nmap 192.168.3.1 # 然后会找到以下信息
# Starting Nmap 7.70 ( https://nmap.org ) at 2022-10-22 22:02 CST
# Nmap scan report for 192.168.3.1
# Host is up (0.0070s latency).
# Not shown: 972 closed ports
# PORT STATE SERVICE
# 3/tcp filtered compressnet
# 53/tcp open domain
# 80/tcp open http
# ....arp -a # 查看ARP缓存表信息
# ➜ arp -a
# _gateway (192.168.3.1) at dc:33:xx:xx:xx:07 [ether] on enp0s5 # 这里就是网关被找到了
# ? (192.168.3.2) at 38:f9:xx:xx:05:db [ether] on enp0s5
上面通过扫描工具扫描网关,再查看ARP缓存表中已经缓存了网关信息,接下来看看抓包情况:
ARP请求:
ARP应答:
从抓包数据可以看到,首先Apple
(192.168.3.8)主机以广播的形式发送数据包,ARP请求数据包中有自己的Send MAC address、ip address还有目标主机的ip192.168.3.1
和mac地址00:00:00:00:00:00
(这里0表示坑位待目标填写),携带信息Who has 192.168.3.1? tell 192.168.3.8
。当Huawei
(网关192.168.3.1)接受到Apple
发送来的数据包后,将自己的mac地址封装仅需其他的保持不变,再以单播的形式发送ARP Reply数据包,携带信息192.168.3.1 at xx:xx:xx:xxx
,这样在Apple
接收到数据包后就知道了目标的Mac地址了,就可以进行数据发送了。
这里简单说下ARP数据包中一些字段:
- Hardware type:硬件类型(标识链路层协议)
- Protocol type:协议类型(标识网络层协议)
- Hardware size:硬件地址大小(标识mac地址长度),这里是6字节,48bit
- Protocol size:协议地址大小(表示ip地址长度),这里是4字节,32bit
- Opcode:操作码(表示ARP请求类型),1表示请求,2表示应答
- Sender Mac address:发送者mac地址
- Sender IP address:发送者ip地址
- Target MAC address:目标mac地址
- Target IP address:目标ip地址
以上便是ARP协议的基本原理,通过nmap扫描工具,再用wireshark进行抓包分析后应该已经对ARP协议不陌生了,基本就是一问一答简单形式。当然这里主要还是讲wireshark怎么抓取ARP数据包,来理解ARP的简单概念,至于ARP的更详细的概念可以看看其他文章,如果没有后面也会更新相关文章。
TCP协议
TCP协议是基于字节流面向连接、可靠的、全双工的单播协议,在通信前必须建立连接,也就是常说的三次握手,然后会断开进行四次挥手。我们来先了解下TCP头部。
- 源端口、目标端口:TCP里没有源IP和目的IP,这是IP层协议的事情,源IP、源端口、目标IP、目标端口构成了TCP
四元组
,一个四元组可以标识一个连接。 - 序列号:用于确认包的的顺序,序列号加上报文长度,用于确定传输的是哪一段数据。
- 确认号:TCP使用确认号来告知对方下一个期望接受的序列号
- 标志位:用来发起连接同步初始序列号,有些用来确认数据包,还有用来结束连接的
- SYN:用于发起连接数据包同步初始序列号
- ACK:确认数据,只有当ACK=1时有效
- RST:强制断开连接
- FIN:告知对方数据发送完毕,准备断开连接
- PSH:告知对方数据包收到后马上交给应用层,不能缓存
- 窗口大小:用来控制对方发送的数据量
更多TCP的详细内容请查看我的「TCP协议」一文
上面简单的介绍了TCP头部部分信息,TCP的连接由发送SYN开始,结束时通过FIN断开连接。下面我们就通过wireshark进行抓包分析。因为HTTP请求也是基于TCP协议的,这里以HTTP请求为例展开三次握手和四次挥手的细节。
这里开启一个node服务作为web服务器:
const express = require("express")
const app = express()
const port = process.env.PORT || 9999app.use(async (req, res, next) => {res.setHeader("connection", "close")res.json({url: req.url,...req.headers,...req.query})
})app.listen(port, () => {console.log(`Server is running on port ${port}`)
});
wireshark我们选择本地回环地址网卡接口,端口选择9999
三次握手
这里使用curl
发起服务请求
➜ curl http://localhost:9999
{"url":"/","host":"localhost:9999","user-agent":"curl/7.64.1","accept":"*/*"}%
看下抓包情况:
从上图抓包记录可以将记录分为三部分:①TCP三次握手连接,②HTTP请求相关,③TCP四次挥手
下面这张图概况了三次握手的摘要
抓包记录:
-
这里看出两端通信的端口为
54987
(终端)和9999
(服务器),终端发送SYN
类型请求,指明客户端的初始化序号为0,这里的0位相对值,其真实性值为3059428279
,并告诉下次的序列号为1,如下图:
-
服务端接收到客户端的SYN数据包后,发送自己的应答SYN包,并指定自己的序列号0(真实值3338838224),并将
客户端的序列号+1发送ACK=1确认包(acknumber=3059428280)
,并告诉下次序列号为1,如下图:
-
客户端接收到了服务端的SYN数据包和ACK包后,也将服务端的SYN+1(acknumber = 3338838225)作为ACK数据包发送给服务端,就完成了三次握手
至于ACK值不断加1是为了标识数据包保证接收方的顺序性,因为发送时数据可能乱序,在收到数据后,TCP不会直接把数据交给上层,而会做一个缓存,直到传输完毕将包按顺序组装在上交给应用层。
三次握手的简单理解:
第一次:客户端发送数据到服务端,服务端接收到后知道客户端的发送能力没问题
第二次:服务端发送数据到客户端,客户端接接收后知道服务端的接收能力正常,发送能力也没问题
第三次:客户端再发送数据到服务端,服务端接收后知道客户端的接收能力没问题
通过三次握手两端都知道了对方发送和接收没有问题,之后就可以正常通信了。
四次挥手
当客户端请求毕后就会断开连接,由于为了提高传输效率http使用keep-alive
会在一定时间内保持TCP的连接,这里设置HTTP头部connection=close
表示请求完毕后立即断开连接。
来看回收抓包记录:
- 在客户端请求完毕后会发送FIN报文给服务端,包含自己的序列号seq=79和ack=125来确认对方最近一次发送的数据,然后表示我没有其他请求了,这时客户端进入
FIN_WAIT1
状态
- 服务端接收到数据包后,发送包含自己的seq=125和ack=80的ACK报文给客户端,表示我知道了,并通知上层应用另一端发起了关闭操作,此时服务端并不会立马发起关闭操作,也就是发送服务端的FIN报文,此时服务端进入
CLOSE_WAIT
状态,客户端进入FIN_WAIT2
状态
- 等一会时间服务端再发送包含seq=125,ack=80的FIN报文和ACK报文并期待下一次的ACK序列号为126,表示可以断开连接了,服务端进入
LAST_ACK
状态
- 客户端接收到后会在发送ack=126的ACK报文,最后断开连接,此时客户端进入
TIMED_WAIT
状态,服务端将会进入CLOSED
状态,最后再等2MSL
(Maximum Segment Lifetime)客户端也进入CLOSED
状态
通过上面的分析已经对四次挥手有了更深理解了,下面再画个图总结下
以上就是TCP挥手的基本原理了。这里解释一下两个问题:
- 为什么挥手要四次,而握手是3次?
因为握手时服务端直接确认连接不需要等待,所以发送SYN+ACK数据包
。而挥手时服务端接受到了客户端的FIN
包后,知道客户端没有请求了但还可以继续接受数据包,服务端也并不能立马关闭连接,因为服务端此时可能数据并没有发送完毕,需要等待发送完毕后才会主动发送FIN
包请求断开。 - 为什么客户端挥手后发送了
ACK
包还要等2MSL
段时间才会进入CLOSED
状态?
这是因为当客户端发送了ACK
报文后,有可能有丢失的包的可能,这导致服务端还没有收到客户端的ACK
报文,会认为自己发的FIN
报文可能客户端没有收到,于是会再发一个给客户端,客户端会再发送ACK
报文,重新计时2MSL
,等服务端接收到ACK
报文后,则不会再发送FIN
报文,2MSL
时间段后客户端正式进入CLOSED
状态。
HTTP协议
由于HTTP协议是基于TCP协议的,所以上面我们用curl
发起的是HTTP请求,那我们看下http请求过程。
- 首先客户端发送GET请求给服务端
- 服务端发送TCP的ACK的数据包确认已经收到请求了
- 服务端发送http响应,状态码200
- 客户端接收到后,发送TCP的ACK数据包表示已经接收到了数据
我们通过跟踪HTTP数据流看下细节:
到这里已经了解了如何用wireshark分析ARP协议、TCP协议和HTTP协议了,当然这只是简单的讲解,其他协议都大同小异,更多功能自己可以动手试试。
统计
统计可以对网络数据进行不同维度的统计,如:HTTP、TCP、UDP、DNS等相关的统计,这些统计比较简单,自己动手试试就会明白。
小结
本篇介绍了wireshark的基本使用,并通过对ARP协议、TCP协议和HTTP协议的分析,已经掌握了分析数据包的基本能力,并加强了相关协议的理解,其他相关的协议都大同小异。到本篇已经讲了3款抓包软件了,相信大家对抓包已经不陌生了,希望通过这些抓包工具可以提高你的分析能力和对原理的认识
由于图片和格式解析问题,可前往 阅读原文
相关文章:
wireshark网络抓包
由于图片和格式解析问题,可前往 阅读原文 到这里已经讲了两个抓包工具的使用了,大家应该对抓包不是很陌生了。而wireshark相对于fiddler和charles更加偏向于网络层面的抓包或者说是一个网络封包分析工具。使用对象更适合于网络相关人员(网络管理员/相关运…...
jenkins备份还原配置文件
下载ThinBackup插件 方式1 从插件市场直接下载 Manage Jenkins->Manage Plugins->可选插件搜索 注意:有时可能因为网络或者版本问题下载不了,好像是默认下载最新版本,可选择手动安装! 方式二 手动安装插件 点击查看手…...
C# 两种方案实现调用 DeepSeek API
目录 序 开发运行环境 访问API的一个通用方法 原生官网实现 申请 API key 调用实现 调用示例 腾讯云知识引擎原子调用 申请 API key 调用示例 小结 序 DeepSeek(深度求索) 最近可谓火爆的一塌糊涂,具体的介绍这里不再赘述&#x…...
Kimi杨植麟该为“重投放”反思吗?
Kimi原本验证的市场规律被撕裂了。 作者|文昌龙 编辑|杨舟 “没有人提杨植麟了,Kimi花了这么多钱买用户也买不过豆包,到头来都敌不过界面简陋、功能单一的DeepSeek。还是应该把精力和资源集中在做出更好的基础模型才是王道。” 这番话,来自…...
25农村发展研究生复试面试问题汇总 农村发展专业知识问题很全! 农村发展复试全流程攻略 农村发展考研复试真题汇总
农村发展复试当然有好的建议!前提是复试重点面试题背好! 你是不是也在为农村发展考研复试发愁?担心自己准备不充分、表现不好?别急!今天,学姐——复试面试拿下90分成功上岸的学姐,来给大家分享…...
JavaScript函数与方法详解
目录 一、函数的定义 1. 函数声明 2. 函数表达式 3. 箭头函数 二、函数的调用 1. 调用方式 2. 参数数量的灵活性 三、arguments 对象 1. 基本概念 2. 属性 3. 应用场景 4. 转换为真数组 5. 总结 四、Rest参数 1. 基本概念 2. 特点 3. 应用场景 4. 总结 五、变…...
AI 网关对决:Higress 与 OneAPI 的功能对比
什么是 AI 网关? AI 网关旨在统一管理与各种大型语言模型(LLMs)的交互。通过提供单一入口点,它解决了使用来自不同供应商的多个 AI 模型所带来的复杂性问题。这不仅简化了访问流程,提高了系统稳定性,还降低…...
封装一个sqlite3动态库
作者:小蜗牛向前冲 名言:我可以接受失败,但我不能接受放弃 如果觉的博主的文章还不错的话,还请点赞,收藏,关注👀支持博主。如果发现有问题的地方欢迎❀大家在评论区指正 目录 一、项目案例 二…...
1.攻防世界 unserialize3(wakeup()魔术方法、反序列化工作原理)
进入题目页面如下 直接开审 <?php // 定义一个名为 xctf 的类 class xctf {// 声明一个公共属性 $flag,初始值为字符串 111public $flag 111;// 定义一个魔术方法 __wakeup()// 当对象被反序列化时,__wakeup() 方法会自动调用public function __wa…...
DeepSeek能做分析吗?从需求规约到分析类图的实验
DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 今天我们来尝试DeepSeek能不能帮我们从需求转到分析。 给定一个用例规约,我们让它按照面向对象分析设计方法,出一个分析类图。过程如下: 可以帮助提…...
九.Spring Boot使用 ShardingSphere + MyBatis + Druid 进行分库分表
文章目录 前言一、引入依赖二、创建一个light-db_1备用数据库三、配置文件 application-dev.yml四、创建shardingsphere-config.yml完整项目结构 五、测试总结 前言 在现代化微服务架构中,随着数据量的不断增长,单一数据库已难以满足高可用性、扩展性和…...
RNN复兴!性能反超Transformer,训练速度提升1300倍!
在最新的顶会论文中,RNN的改进创新更是层出不穷。Bengio团队提出的minLSTM和minGRU,通过去除隐藏状态的依赖和简化门控机制,显著减少了参数量和计算量。这些模型可以使用并行扫描算法进行训练,大大加快了训练速度。例如࿰…...
C语言第18节:自定义类型——联合和枚举
1. 联合体 C语言中的联合体(Union)是一种数据结构,它允许在同一内存位置存储不同类型的数据。不同于结构体(struct),结构体的成员各自占有独立的内存空间,而联合体的所有成员共享同一块内存区域…...
2025年二级建造师报名流程图解
2025年二级建造师报名时间!附报名流程! ⏰️已公布25年二建考试时间的省份如下: ️4月19日、20日考试的城市有:贵州 ️5月10日、11日考试的城市有:湖北、陕西、宁夏、甘肃、福建、浙江、江西、黑龙江、河南、湖南、…...
AWTK fscript 中的 TCP/UDP 客户端扩展函数
fscript 是 AWTK 内置的脚本引擎,开发者可以在 UI XML 文件中直接嵌入 fscript 脚本,提高开发效率。本文介绍一下 fscript 中的 TCP/UDP 客户端扩展函数。 1.iostream_tcp_create 创建 TCP 客户端输入输出流对象。 原型 iostream_tcp_create(host, por…...
用php tp6对接钉钉审批流的 table 表格 明细控件 旧版sdk
核心代码 foreach ($flows[product_list] as $k>$gift) {$items_list[] [[name > 商品名称, value > $gift[product_name] ?? ],[name > 规格, value > $gift[product_name] ?? ],[name > 数量, value > $gift[quantity] ?? ],[name > 单位, v…...
【DuodooBMS】给PDF附件加“受控”水印的完整Python实现
给PDF附件加“受控”水印的完整Python实现 功能需求 在实际工作中,许多文件需要添加水印以标识其状态,例如“受控”“机密”等。对于PDF文件,添加水印不仅可以增强文件的可识别性,还可以防止未经授权的使用。本代码的功能需求是…...
前缀和算法篇:解决子数组累加和问题
前缀和算法篇:解决子数组累加和问题 1.前缀和原理 那么在介绍前缀和的原理之前,那么我们先来说下前缀和最基本的一个应用场景,那么就是如我们标题所说的子数组累加和问题,那么假设我们现在有一个区间为[L,R]的数组,那…...
大语言模型多代理协作(MACNET)
大语言模型多代理协作(MACNET) Scaling Large-Language-Model-based Multi-Agent Collaboration 提出多智能体协作网络(MACNET),以探究多智能体协作中增加智能体数量是否存在类似神经缩放定律的规律。研究发现了小世界协作现象和协作缩放定律,为LLM系统资源预测和优化…...
vue项目使用vite和vue-router实现history路由模式空白页以及404问题
开发项目的时候,我们一般都会使用路由,但是使用hash路由还是history路由成为了两种选择,因为hash路由在url中带有#号,history没有带#号,看起来更加自然美观。但是hash速度更快而且更通用,history需要配置很…...
【Linux】从一台windows电脑访问局域网下另一台linux电脑详细操作步骤
以下是在Windows电脑B上访问Linux电脑A的文件并使用bash终端的详细步骤: 一、在Linux电脑A上配置SSH服务(用于终端操作) 安装SSH服务 sudo apt update && sudo apt install openssh-server启动SSH服务并设置开机自启 sudo systemctl …...
Makefile的用法及算法应用
编译的过程 算法:解决特定问题的求解步骤 算法的设计 1.正确性 语法正确合法的输入能得到合理的结果对非法的输入,给出满足要求的规格说明对精心选择,甚至刁难的测试都能正常运行,结果正确 2.可读性,便于交流&…...
Elasticsearch:15 年来致力于索引一切,找到重要内容
作者:来自 Elastic Shay Banon 及 Philipp Krenn Elasticsearch 刚刚 15 岁了!回顾过去 15 年的索引和搜索,并展望未来 15 年的相关内容。 Elasticsearch 刚刚成立 15 周年。一切始于 2010 年 2 月的一篇公告博客文章(带有标志性的…...
MongoDB 扩缩容实战:涵盖节点配置、服务启动与移除操作
#作者:任少近 文章目录 一、扩容在245节点上配置配置config server:配置mongos启动config server安装工具mongosh添加245新节点到副本集配置分片副本集启动路由并分片 二、缩容Conf server上去掉server4shard上去掉server4mongos上去掉server4 一、扩容…...
Bitmap在数仓中的应用
一、背景 在数据仓库的日常工作中,我们经常需要面对海量数据的存储和高效查询问题。尤其是,当业务对性能的要求越来越高、数据量持续增长时,传统的处理方式往往显得笨拙而低效。而这时候,Bitmap(位图)作为…...
C++病毒(^_^|)(2)
第二期 声明: 仅供损害电脑,不得用于非法。损坏电脑,作者一律不负责。此作为作者原创,转载请经过同意。 直接上代码 #include <bits/stdc.h> #include <windows.h> using namespace std; HHOOK g_hHook;void lrud(…...
Linux 内核架构入门:从基础概念到面试指南*
1. 引言 Linux 内核是现代操作系统的核心,负责管理硬件资源、提供系统调用、处理进程调度等功能。对于初学者来说,理解 Linux 内核的架构是深入操作系统开发的第一步。本篇博文将详细介绍 Linux 内核的架构体系,结合硬件、子系统及软件支持的…...
leetcode-495.提莫攻击
leetcode-495.提莫攻击 文章目录 leetcode-495.提莫攻击一.题目描述二.代码提交三.解释 一.题目描述 二.代码提交 #include <vector> using namespace std;int findPoisonedDuration(vector<int>& timeSeries, int duration) {int total 0;for (int i 0; i …...
mysql 参数max_connect_errors研究
1.在server端设置max_connect_errors3,超过3次连接错误就block mysql> set global max_connect_errors3; Query OK, 0 rows affected (0.00 sec) mysql> show variables like max_connect_errors; --------------------------- | Variable_name | Value…...
vscode无法ssh连接远程机器解决方案
远程服务器配置问题 原因:远程服务器的 SSH 服务配置可能禁止了 TCP 端口转发功能,或者 VS Code Server 在远程服务器上崩溃。 解决办法 检查 SSH 服务配置:登录到远程服务器,打开 /etc/ssh/sshd_config 文件,确保以下…...
sql盲注获取数据库的表名、列名和具体数据
1.时间盲注 获取表名 sql id1 AND IF(ASCII(SUBSTRING((SELECT table_name FROM information_schema.tables WHERE table_schemaDATABASE() LIMIT 1),1,1))97, SLEEP(5), 0) 获取列名 sql id1 AND IF(ASCII(SUBSTRING((SELECT column_name FROM information_schema.col…...
清华大学新闻与传播学院沈阳团队出品的《DeepSeek:从入门到精通》104页PDF
前言 本机运行DeepSeek R1大模型文章如下: Windows电脑本地部署运行DeepSeek R1大模型(基于Ollama和Chatbox)【保姆级万字教程】在Windows计算机部署DeepSeek大模型,给在实验室无外网的同事们用(基于Ollama和OpenWebUI…...
使用sublime_text中,TAB键无效怎么解决???
如果你也有这样的困扰,请你跟着我下面的步骤操作 点击首选项(如下图所示) 找到下面这段代码并注释掉 { “keys”:[“tab”], “args”:{“action”:“expand_abbreviation”}, “command”:“run_emmet_action”, “context”:[ { “key”:“…...
Java IO流详解
1. IO概述 IO(Input/Output)即输入和输出,指的是设备或环境之间进行数据的输入或输出。例如,键盘是输入设备,显示器是输出设备。在Java中,输入输出问题通过流(Stream)对象来解决。以…...
智慧农业-虫害及生长预测
有害生物防控系统是一个综合性的管理体系,旨在预防和控制对人类生活、生产甚至生存产生危害的生物。这些生物可能包括昆虫、动物、植物、微生物乃至病毒等。 一、系统构成 1、监测预警系统:利用智能传感器、无人机、遥感技术等手段,实时监测…...
ASIL D要达到多少fit
ASIL(Automotive Safety Integrity Level,汽车安全完整性等级)D是ISO 26262标准中最高等级的安全要求,其对应的随机硬件故障概率目标(以FIT表示)需满足以下要求: ASIL D的FIT目标 根据 ISO 262…...
与传统光伏相比 城电科技的光伏太阳花有什么优势?
相比于传统光伏,城电科技的光伏太阳花有以下优势: 一、发电效率方面 智能追踪技术:光伏太阳花通过内置的智能追踪系统,采用全球定位跟踪算法,能够实时调整花瓣(即光伏板)的角度,确…...
2025年SEO工具有哪些?老品牌SEO工具有哪些
随着2025年互联网的发展和企业线上营销的日益重要,SEO(搜索引擎优化)逐渐成为了提高网站曝光率和流量的重要手段。SEO的工作不仅仅是简单地通过关键词优化和内容发布就能够实现的,它需要依赖一系列专业的SEO工具来帮助分析、监测和…...
深入解析与解决 Oracle 报错:ORA-29275 部分多字节字符20250213
🛠️ 深入解析与解决 Oracle 报错:ORA-29275 部分多字节字符 引言 🌟 在与 Oracle 数据库打交道的日常工作中,你是否遇到过 ORA-29275: partial multibyte character 这个令人头疼的错误?这个错误通常与字符编码、数…...
HTML应用指南:利用GET请求获取全国海底捞门店位置信息
随着新零售业态的快速发展,门店位置信息的获取变得越来越重要。作为餐饮服务行业的先锋,海底捞不仅在服务质量上持续领先,还积极构建广泛的门店网络,以支持其不断增长的用户群体。为了更好地理解和利用这些数据,本篇文…...
数据流图和数据字典
在面向结构的分析和设计阶段,**数据流图(Data Flow Diagram, DFD)和数据字典(Data Dictionary)**是两个非常重要的工具,它们分别从不同的角度描述系统的功能和数据结构,帮助开发团队更好地理解和…...
Ubuntu 22.04 LTS 安装MinerU
1. 检测是否已安装nvidia驱动 nvidia-smi 如果看到类似如下的信息,说明已经安装了nvidia驱动,可以跳过步骤2 Note CUDA Version 显示的版本号应 > 12.1,如显示的版本号小于12.1,请升级驱动 2. 安装驱动 如没有驱动&#…...
OPEN CODER : THE OPEN COOKBOOK FOR TOP -TIER CODE LARGE LANGUAGE MODELS
Abstract 大型语言模型(LLMs)在代码领域已经成为不可或缺的工具,包括代码生成、推理任务和代理系统等多个方面。虽然开放获取的代码LLMs的性能越来越接近专有模型,但适合严格科学研究的优质代码LLMs,特别是那些具有可…...
C语言中printf()函数,格式输出符
在 C 语言中,printf() 函数的格式输出符(格式说明符)用于控制输出的格式和数据类型。以下是常见的格式说明符及其用法: 基本格式符 打印各种类型的值 格式输出符数据类型说明%dint输出有符号十进制整数%uunsigned int输出无符号…...
EasyRTC嵌入式WebRTC视频通话SDK支持Web浏览器、Linux、ARM、Android、iOS
随着互联网技术的飞速发展,实时通信(RTC)已经成为现代应用中不可或缺的一部分。无论是视频会议、在线教育、远程医疗,还是社交娱乐,实时通信技术都在其中扮演着重要角色。 然而,WebRTC技术在PC和移动端的支…...
【JS球球大作战项目实战】+在线体验
个人名片: 🐼作者简介:一名大三在校生,喜欢AI编程🎋 🐻❄️个人主页🥇:落798. 🐼个人WeChat:hmmwx53 🕊️系列专栏:🖼️…...
PHP高效、轻量级表格数据处理库 OpenSpout ,很好用
OpenSpout 是一个高效、轻量级的 PHP 库,用于处理电子表格文件(如 Excel 和 CSV)。它支持读取和写入大型文件,且内存占用低。本文将详细介绍如何安装和使用 OpenSpout。 目录 安装 基本使用 高级功能 参考文档 安装 OpenSp…...
数据库第三次作业
第一题: 学生表:Student (Sno, Sname, Ssex , Sage, Sdept) 学号,姓名,性别,年龄,所在系 Sno为主键 课程表:Course (Cno, Cname,) 课程号,课程名 Cno为主键 学生选课表:S…...
Mac 下使用多版本 Node
一、导读 使用 n 实现 Mac 下 Nodejs 的多版本切换,需要先安装一个版本的 Node.js,然后使用 npm 安装 n,再通过 n 管理 node 的多版本切换。 二、使用 npm 全局安装 n sudo npm install -g n 三、根据需求安装指定版本的 node sudo -E n…...
【油猴脚本/Tampermonkey】DeepSeek 服务器繁忙无限重试(20250214优化)
目录 一、 引言 二、 逻辑 三、 源代码 四、 添加新脚本 五、 使用 六、 BUG 七、 优化日志 1.获取最后消息内容报错 2.对话框切换无法正常使用 一、 引言 deepseek演都不演了,每次第一次提问就正常,后面就开始繁忙了,有一点阴招全…...