Wireshark数据抓包分析之传输层协议(TCP协议)
根据实验环境,本实验的步骤如下:
1.在测试环境使用发包工具和Wireshark抓取TCP三次握手和四次断开的数据包。
2.详细分析TCP协议的三次握手以及四次断开。
任务描述:安装发包工具,并配置TCP客户端,服务端,与Wireshark配合使用 此工具与分析UDP协议时相同,实验室环境中已经安装,在此再重复一遍,我们使用" TCP&UDP测试工具"来制作和发送TCP数据包。双击测试者机器桌面的" TCP&UDP测试工具",会出现下图显示页面:
下面我们需要配置TCP的服务端以及客户端。
1.配置服务器端
选择10.1.1.33的机器,双击桌面的" TCP&UDP测试工具",右键点击服务器模式,在下拉列表中,选择创建服务器,如下图:
选择"创建服务器"之后,会弹出服务器端口设置,本次使用默认工具给的6000端口即可,点击"确定"按钮。
点击"确定"按钮之后,在左侧的服务器模式列表中,会出现创建的列表,选择我们创建的服务器,右键点击,选择"启动服务器",即完成了服务器端的配置
2.配置客户端
选择10.1.1.142的机器,双击桌面的" TCP&UDP测试工具",右键点击客户端模式,在下拉列表中,选择"创建连接",如下图:
在弹出的窗口中,选择TCP协议,服务器IP为10.1.1.33.端口6000,本机随意IP,如下图
点击创建后,如下图,
3.获取TCP数据包
获取的TCP协议的数据包。分为两部分,即TCP三次握手,四次断开的数据。但在实际的操作中,可能遇到的情况较多,比如源IP和目的IP比较多,协议的帧号乱序等各种问题。在此,我们教大家简单的过滤功能,着色功能方便过滤和查看。 启动Wireshark,在Filter中输入tcp,点击Apply会看到很多的数据包,这是因为测试环境中,有很多的应用程序,与其服务器连接,使用TCP协议。如下图,
我们可以看到,有很多的数据,不方便查看。在这里,我们已知两台机器的IP情况下,可以在filter中输入"ip.addr == 10.1.1.142 and ip.addr == 10.1.1.33"来过滤出我们想要的数据,点击工具中的"连接"按钮。如下图
在发送区域输入"hetinlabtcp"点击发送,会持续的更新TCP数据。
在点击"断开连接"后,会出现TCP的四次断开。全部的过程截图,如下
如上图,如果还是觉得不方便分析协议的话,Wireshark还为我们提供了着色和指定的帧信息保存功能。左键点击某一帧,右键选择"Colorize Conversation",横向选择"TCP",横向再选择自己喜欢的颜色,操作如下图
从上面可以很容易的看出,4226,4227,4228帧是tcp的三次握手,4740,4741,4742,4743帧是四次断开的数据。如果你还想把三次握手和四次断开的数据包分别保存,Wireshark也提供了这样的功能,并且支持帧序号乱序的情况。下面,我们先来保存三次握手的数据包,因三次握手的帧是乱序,我们先右键点击4226帧,选择"Mark Packet(toggle)',在依次选择4227帧,4228帧,如下图
在Wireshark的菜单栏中,依次选择FIle->Export Specified Packets 命令,打开如下所示页面
选择Marked packets,并选择保存名字和路径,即可。下面来保存四次断开的数据,因428-431为连续的序号,所以在Wireshark的菜单栏中,依次选择FIle->Export Specified Packets 命令,打开如下所示页面
选择Range,输入序号的起始和结束数字,选择保存名字和路径即可。、
任务描述:通过实验一,我们已经获取了数据包,并且进行了分类保存,实验二将对TCP的三次握手进行详细分析
1.TCP首部
在分析TCP数据包之前,先介绍一下TCP首部格式,如下
TCP首部格式
在上面的表中,TCP首部的各字段含义如下所示:
源端口:用来传输数据包的端口。
目标端口:数据包将要被发送到的端口。
序号:该数字用来表示一个TCP片段。这个域用来保证数据流中的部分没有流失。
确认号:该数字是通信中希望从另一个设备得到的下一个数据包的序号。
保留:包括Resverved、Nonce、CWR、和ENC-Echo,共6个比特位。
标记:用来表示所传输的TCP数据包类型。该字段中可用的标记包括URG、ACK、PSH、RST、SYN和FIN。
窗口大小:TCP接收者缓冲的字节大小。
校验和:用来保证TCP首部和数据的内容,在达到目的地时的完整性。
紧急指针:如果设置了URG位,这个域将被检查作为额外的指令,告诉CPU从数据包的哪里开始读取数据。
选项:各种可选的域,可以在TCP数据包中进行指定。
上面提到了TCP传输时,可用到的标记位,下面分别介绍这6种标记的作用,如下:
URG:紧急标志,表示TCP包的紧急指针有效,用来保证TCP连接不被中断,并且督促中间层设备要尽快处理这些数据。
ACK:确认标志,表示应答域有效,就是前面所说的TCP应答号将会包含在TCP数据包中,该标志位有两个值,分别是0和1。当为1的时候,表示应答域有效。反之为0。
PSH:该标志位表示Push操作。所谓Push操作就是指在数据包到达接收端以后,立即传送给应用程序,而不是在缓存区排队。
RST:该标志位表示链接复位请求,用来复位那些产生错误的链接,也被用来拒绝错误和非法的数据包。
SYN:表示同步序号,用来建立连接。SYN 标志位和ACK标志位搭配使用,当连接请求的时候,SYN=1,ACK=0;当连接被响应的时候,SYN=1,ACK=1。这个标志的数据包经常被用来进行端口扫描。扫描者发现一个只有SYN的数据包,如果对方主机响应了一个数据包回来,就表面该主机存在这个端口;但是由于这种扫描方式只是进行TCP三次握手的第一次握手,因此这种扫描成功表示扫描的机器不安全。因为一个安全的主机,将会强制要求一个链接严格的进行TCP的三次握手。
FIN:表示发送端以及达到数据末尾,也就是说双方的数据传送完毕,没有数据可以传送了。此时发送FIN标志位的TCP数据包后,链接将被断开。这个标志的数据包也经常被用于进行端口扫描。当一个FIN标志的TCP数据包发送到一台计算机的特定端口后,如果这台计算机响应了这个数据,并且反馈回来一个RST标志的TCP包,就表明这台计算机上没有打开这个端口,但是这台计算机是存在的;如果这台计算机没有反馈回来任何数据包,这就标明,这台被扫描的计算机存在这个端口。
2.分析TCP的三次握手
TCP三次握手是理解TCP协议最重要的部分,下面我们就以tcp-handshake.pcapng捕获文件为例,来分析TCP的三次握手
2.1.第一次握手
TCP第一次握手,捕获的数据包信息如下所示
从Wireshark的Packet List面板中的Info列可以看到显示的TCP标志位是SYN。所以该数据包是客户端向服务器发送的第一次握手连接。在Packet Details面板中,显示了该包的详细信息,下面详细介绍
以上信息,表示这是第1个数据帧的相信信息,并且该包的大小为62个字节。
以上内容是以太网帧头部信息,其实源MAC地址为02:00:04:78:01:7b,目标MAC地址为02:00:7b:16:02:43。
以上内容是IPv4首部的详细信息。其中源IP是10.1.1.142,目的IP为10.1.1.33。
以上内容是传输层首部的详细信息,这里使用TCP协议,其中源端口为56678,目标端口为6000.下面对该首部中的每个字段进行详细介绍,
Source Port: 56678 (56678) #源端口号
Destination Port: 6000 (6000) #目标端口号
Stream index: 0 #流节点号
TCP Segment Len: 0 #分段长度
Sequence number: 0 (relative sequence number) #序列号
Acknowledgment number: 0 #确认编号
Header Length: 28 bytes #首部长度
.... 0000 0000 0010 = Flags: 0x002 (SYN) #标志,这里是SYN
000. .... .... = Reserved: Not set
...0 .... .... = Nonce: Not set
.... 0... .... = Congestion Window Reduced (CWR): Not set
.... .0.. .... = ECN-Echo: Not set
.... ..0. .... = Urgent: Not set #紧急指针
.... ...0 .... = Acknowledgment: Not set #确认编号
.... .... 0... = Push: Not set
.... .... .0.. = Reset: Not set
.... .... ..1. = Syn: Set #设置SYN标志位,值为1
Expert Info (Chat/Sequence): Connection establish request (SYN): server port
6000 #专家信息
Connection establish request (SYN): server port 6000 #消息
Severity level: Chat #安全级别
Group: Sequence #组
.... .... ...0 = Fin: Not set #FIN标志位
Window size value: 8192 #窗口大小
Calculated window size: 8192 #估计的窗口大小
Checksum: 0x16d3 [validation disabled] #校验和
Good Checksum: False
Bad Checksum: False
Urgent pointer: 0
Options: (8 bytes), Maximum segment size, No-Operation (NOP), No-Operation (NOP), SACK permitted #选项
Maximum segment size: 1460 bytes #最大段大小
Kind: Maximum Segment Size (2)
Length: 4
MSS Value: 1460
No-Operation (NOP) #无操作指令
Type: 1
0... .... = Copy on fragmentation: No
.00. .... = Class: Control (0)
...0 0001 = Number: No-Operation (NOP) (1)
No-Operation (NOP) #无操作指令
Type: 1
0... .... = Copy on fragmentation: No
.00. .... = Class: Control (0)
...0 0001 = Number: No-Operation (NOP) (1)
TCP SACK Permitted Option: True #TCP SACK允许选项
Kind: SACK Permitted (4)
Length: 2
根据以上信息的描述,可以看出该包是客户端发送给服务器建立连接请求的一个数据包。建立连接的源端口号为56678,目标端口号为6000,确认编号为0。而且在标志位FLAGS(0x0002)中,只设置了SYN,也就是位同步标志,表示请求建立连接。选项是8个字节,里面的内容有最大段(MSS),大小为1460字节。
我们将上面的信息,对应到TCP首部格式的每个字段,如下:
第一次握手TCP首部
2.2.第二次握手
TCP第二次握手捕获数据包相信信息,如下:
在该界面显示了第二次握手数据包的详细信息,其中位于TCP上面的信息与第一次握手时相近似,这里不做解释,重点看TCP协议部分,如下
Source Port: 6000(6000) #源端口号
Destination Port: 56678(56678) #目标端口号
Stream index: 0 #流节点号
TCP Segment Len: 0 #分段长度
Sequence number: 0 (relative sequence number) #序列号
Acknowledgment number: 1 (relative ack number) #确认编号,值为1
Header Length: 28 bytes #首部长度
.... 0000 0001 0010 = Flags: 0x012 (SYN,ACK) #标志位,此处为(SYN,ACK)
000. .... .... = Reserved: Not set
...0 .... .... = Nonce: Not set
.... 0... .... = Congestion Window Reduced (CWR): Not set
.... .0.. .... = ECN-Echo: Not set
.... ..0. .... = Urgent: Not set
.... ...1 .... = Acknowledgment: Not set #确认编号已设置
.... .... 0... = Push: Not set
.... .... .0.. = Reset: Not set
.... .... ..1. = Syn: Set #请求位
Expert Info (Chat/Sequence): Connection establish request (SYN): server port
6000 #专家信息
Connection establish request (SYN): server port 6000 #消息
Severity level: Chat #安全级别
roup: Sequence #组
.... .... ...0 = Fin: Not set #FIN标志位
Window size value: 8192 #窗口大小
Calculated window size: 8192 #估计的窗口大小
Checksum: 0x5bf8 [validation disabled] #校验和
Good Checksum: False
Bad Checksum: False
Urgent pointer: 0
Options: (8 bytes), Maximum segment size, No-Operation (NOP), No-Operation (NOP), SACK permitted #选项
Maximum segment size: 1460 bytes #最大段大小
Kind: Maximum Segment Size (2)
Length: 4
MSS Value: 1460
No-Operation (NOP) #无操作指令
Type: 1
0... .... = Copy on fragmentation: No
.00. .... = Class: Control (0)
...0 0001 = Number: No-Operation (NOP) (1)
No-Operation (NOP) #无操作指令
Type: 1
0... .... = Copy on fragmentation: No
.00. .... = Class: Control (0)
...0 0001 = Number: No-Operation (NOP) (1)
TCP SACK Permitted Option: True #TCP SACK允许选项
Kind: SACK Permitted (4)
Length: 2
SEQ/ACK analysis #序列号/确认编号分析
This is an ACK to the segment in frame: 1
The RTT to ACK the segment was: 0.002362000 seconds
iRTT: 0.002387000 seconds
以上描述的详细信息是服务器收到请求后,发给客户端的确认包(SYN+ACK)。根据以上描述,可以看到在该帧数据包中包含这个主机初始的序列号0,以及一个确认号1。这个确认号比之前那个数据包(1帧数据包)序列号大1,是因为该域是用来表示主机所期望得到的下一个序列号的值。
我们将上面的信息,对应到TCP首部格式的每个字段,如下:
第二次握手TCP首部
2.3.第三次握手
TCP第三次握手捕获数据包相信信息
这里我们直接看重点的TCP协议部分
Source Port: 56678(56678) #源端口号
Destination Port: 6000(6000) #目标端口号
Stream index: 0 #流节点号
TCP Segment Len: 0 #分段长度
Sequence number: 1 (relative sequence number) #序列号
Acknowledgment number: 1 (relative ack number) #确认编号,值为1
Header Length: 20 bytes #首部长度
.... 0000 0001 0000 = Flags: 0x010 (ACK) #标志位,此处为(ACK)
000. .... .... = Reserved: Not set
...0 .... .... = Nonce: Not set
.... 0... .... = Congestion Window Reduced (CWR): Not set
.... .0.. .... = ECN-Echo: Not set
.... ..0. .... = Urgent: Not set
.... ...1 .... = Acknowledgment: Not set #确认编号已设置
.... .... 0... = Push: Not set
.... .... .0.. = Reset: Not set
.... .... ..0. = Syn: Set #请求位
.... .... ...0 = Fin: Not set #FIN标志位
Window size value: 64240 #窗口大小
Calculated window size: 64240 #估计的窗口大小
Window size scaling factor: -2 (no window scaling used) #窗口大小缩放比例因素
Checksum: 0x16cb [validation disabled] #校验和
Good Checksum: False
Bad Checksum: False
Urgent pointer: 0
SEQ/ACK analysis
This is an ACK to the segment in frame: 2
The RTT to ACK the segment was: 0.000025000 seconds
iRTT: 0.002387000 seconds
以上信息就是客户端向服务器发送的确认包。在以上信息中,序列号和确认号都是1。标志位中只设置了ACK,表示该数据包是一个确认包。这样就完成了TCP链接的建立阶段。此时没有Options字段。
我们将上面的信息,对应到TCP首部格式的每个字段,如下:
第三次握手TCP首部
任务描述:TCP的四次断开,也是TCP协议的主要工作之一。下面将通过捕获的tcp-break.pcapng文件,来分析TCP的四次断开。
1.第一次断开
TCP第一次断开连接的数据包,
在该界面显示了TCP第一次断开,数据包的详细信息,我们具体来看下TCP部分
Source Port: 56678(56678) #源端口号
Destination Port: 6000(6000) #目标端口号
Stream index: 0 #流节点号
TCP Segment Len: 0 #分段长度
Sequence number: 1 (relative sequence number) #序列号
Acknowledgment number: 1 (relative ack number) #确认编号
Header Length: 20 bytes #首部长度
.... 0000 0001 0001 = Flags: 0x011 (FIN,ACK) #标志位,此处为(FIN,ACK)
000. .... .... = Reserved: Not set
...0 .... .... = Nonce: Not set
.... 0... .... = Congestion Window Reduced (CWR): Not set
.... .0.. .... = ECN-Echo: Not set
.... ..0. .... = Urgent: Not set
.... ...1 .... = Acknowledgment: Not set #确认编号已设置
.... .... 0... = Push: Not set
.... .... .0.. = Reset: Not set
.... .... ..0. = Syn: Set #请求位
.... .... ...1 = Fin: Not set #FIN标志位
Expert Info (Chat/Sequence): Connection finish (FIN) #专家信息
Connection finish (FIN) #消息内容,连接完成(FIN)
Severity level: Chat #安全级别
Group: Sequence
Window size value: 64240 #窗口大小
Calculated window size: 64240 #估计的窗口大小
Window size scaling factor: -1 (unknown) #窗口大小缩放比例因素
Checksum: 0x16cb [validation disabled] #校验和
Good Checksum: False
Bad Checksum: False
Urgent pointer: 0
通过以上信息的描述,可以看到客户端向服务器发送FIN和ACK标志的数据包开始断开连接,其中FIN和ACK标志位都为1.
我们将上面的信息,对应到TCP首部格式的每个字段,如下:
第一次断开TCP首部格式
2.第二次断开
TCP第二次断开连接的数据包,
在该界面显示了TCP第二次断开,数据包的详细信息,我们具体来看下TCP部分
Source Port: 6000(6000) #源端口号
Destination Port: 56678(56678) #目标端口号
Stream index: 0 #流节点号
TCP Segment Len: 0 #分段长度
Sequence number: 1 (relative sequence number) #序列号
Acknowledgment number: 2 (relative ack number) #确认编号
Header Length: 20 bytes #首部长度
.... 0000 0001 0000 = Flags: 0x010(ACK) #标志位,此处为(ACK)
000. .... .... = Reserved: Not set
...0 .... .... = Nonce: Not set
.... 0... .... = Congestion Window Reduced (CWR): Not set
.... .0.. .... = ECN-Echo: Not set
.... ..0. .... = Urgent: Not set
.... ...1 .... = Acknowledgment: Not set #确认编号已设置
.... .... 0... = Push: Not set
.... .... .0.. = Reset: Not set
.... .... ..0. = Syn: Set #请求位
.... .... ...0= Fin: Not set #FIN标志位
Window size value: 64240 #窗口大小
Calculated window size: 64240 #估计的窗口大小
Window size scaling factor: -1 (unknown) #窗口大小缩放比例因素
Checksum: 0xadbe [validation disabled] #校验和
Good Checksum: False
Bad Checksum: False
Urgent pointer: 0
SEQ/ACK analysis
This is an ACK to the segment in frame: 1
The RTT to ACK the segment was: 0.000369000 seconds
通过以上信息的描述,可以看出该包是服务器向客户端发送的ACK包。其中ACK标志位为1.
我们将上面的信息,对应到TCP首部格式的每个字段,如下:
第二次断开TCP首部格式
3.第三次断开
TCP第三次断开连接的数据包,
在该界面显示了TCP第三次断开,数据包的详细信息,我们具体来看下TCP部分
Source Port: 6000(6000) #源端口号
Destination Port: 56678(56678) #目标端口号
Stream index: 0 #流节点号
TCP Segment Len: 0 #分段长度
Sequence number: 1 (relative sequence number) #序列号
Acknowledgment number: 2 (relative ack number) #确认编号
Header Length: 20 bytes #首部长度
.... 0000 0001 0001 = Flags: 0x010(FIN,ACK) #标志位,此处为(FIN,ACK)
000. .... .... = Reserved: Not set
...0 .... .... = Nonce: Not set
.... 0... .... = Congestion Window Reduced (CWR): Not set
.... .0.. .... = ECN-Echo: Not set
.... ..0. .... = Urgent: Not set
.... ...1 .... = Acknowledgment: Not set #确认编号已设置
.... .... 0... = Push: Not set
.... .... .0.. = Reset: Not set
.... .... ..0. = Syn: Set #请求位
.... .... ...1= Fin: Not set #FIN标志位
Expert Info (Chat/Sequence): Connection finish (FIN) #专家信息
Connection finish (FIN)
Severity level: Chat
Group: Sequence
Window size value: 64240 #窗口大小
Calculated window size: 64240 #估计的窗口大小
Window size scaling factor: -1 (unknown) #窗口大小缩放比例因素
Checksum: 0xadbe [validation disabled] #校验和
Good Checksum: False
Bad Checksum: False
Urgent pointer: 0
通过以上信息的描述,可以看出该包是服务器向客户端发送的FIN和ACK包。其中FIN和ACK标志位为1.
我们将上面的信息,对应到TCP首部格式的每个字段,如下:
第三次断开TCP首部格式
4.第四次断开
TCP第四次断开连接的数据包,
在该界面显示了TCP第四次断开,数据包的详细信息,我们具体来看下TCP部分
Source Port: 56678(56678) #源端口号
Destination Port: 6000(6000) #目标端口号
Stream index: 0 #流节点号
TCP Segment Len: 0 #分段长度
Sequence number: 2 (relative sequence number) #序列号
Acknowledgment number: 1 (relative ack number) #确认编号
Header Length: 20 bytes #首部长度
.... 0000 0001 0000 = Flags: 0x010 (ACK) #标志位,此处为(ACK)
000. .... .... = Reserved: Not set
...0 .... .... = Nonce: Not set
.... 0... .... = Congestion Window Reduced (CWR): Not set
.... .0.. .... = ECN-Echo: Not set
.... ..0. .... = Urgent: Not set
.... ...1 .... = Acknowledgment: Not set #确认编号已设置
.... .... 0... = Push: Not set
.... .... .0.. = Reset: Not set
.... .... ..0. = Syn: Set #请求位
.... .... ...1 = Fin: Not set #FIN标志位
Window size value: 64240 #窗口大小
Calculated window size: 64240 #估计的窗口大小
Window size scaling factor: -1 (unknown) #窗口大小缩放比例因素
Checksum: 0x16cb [validation disabled] #校验和
Good Checksum: False
Bad Checksum: False
Urgent pointer: 0
SEQ/ACK analysis
This is an ACK to the segment in frame: 3
The RTT to ACK the segment was: 0.000040000 seconds
通过以上信息的描述,可以看到客户端向服务器发送ACK的包。其中,ACK标志位都为1.
我们将上面的信息,对应到TCP首部格式的每个字段,如下:
第四次断开TCP首部格式
相关文章:
Wireshark数据抓包分析之传输层协议(TCP协议)
根据实验环境,本实验的步骤如下: 1.在测试环境使用发包工具和Wireshark抓取TCP三次握手和四次断开的数据包。 2.详细分析TCP协议的三次握手以及四次断开。 任务描述:安装发包工具,并配置TCP客户端,服务端࿰…...
用ai做机器视觉的事情
cnn(卷积神经网络)是典型的ai算法。 我们已经cnn实现像机器视觉中形状匹配的功能,因为使用了roi抠图匹配,所以就叫做roicnn,以区分整图匹配。下面是roicnn笔记总结: 20241022,roicnn搞定&…...
LLM - 开源视觉多模态 LLaVA-CoT(o1) 深度推理模型 测试与源码 教程
欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/144304351 免责声明:本文来源于个人知识与公开资料,仅用于学术交流,欢迎讨论,不支持转载。 LLaVA-…...
qtcanpool 知 10:包管理雏形
文章目录 前言痛点转机雏形实践后语 前言 曾听闻:C/Qt 没有包管理器,开发起来太不方便。这是一个有过 node.js 开发经验的人对 Qt 的吐槽。 确实,像 python、golang、node.js 这些编程语言都有包管理器,给用户带来了极佳的开发体…...
[保姆式教程]使用目标检测模型YOLO11 OBB进行旋转目标检测:训练自己的数据集(基于卫星和无人机的农业大棚数据集)
之前写了一个基于YOLOv8做旋转目标检测(OBB)的文章,内容写得不够好,内容也有些杂乱无序。现如今YOLO已经更新到11了,数据集也集齐了无人机和卫星的农业大棚,所以这次就写一个基于YOLO11 OBB的农业大棚旋转检…...
MySQL 权限管理分配详解
MySQL 权限管理分配详解 MySQL权限系统的工作原理权限表的存取用户通过权限认证、进行权限分配的流程账号管理我们常用的授权all privileges到底有哪些权限呢?以及带来的安全隐患有哪些?创建账户的时候最好分配指定的权限,这样子安全也高管理…...
【期末速成】《微机原理与接口技术》知识点总结
文章目录 前言第一、二章 接口技术概述1. 接口的定义*2. 接口功能特点*3. 接口的分类*4. 接口中的传输信息及其组成5. 接口的编址与译码*6. CPU 与外设之间的数据传送方式* 第三章 总线1. 总线(BUS)的定义*2. 总线的标准3. 采用标准总线的优点*4. 总线的…...
华为、华三交换机纯Web下如何创关键VLANIF、操作STP参数
华为交换机WEB操作 使用的是真机S5735,目前主流的版本都适用(V1R5~V2R1的就不在列了,版本太老了,界面完全不一样,这里调试线接的console口,电脑的网络接在ETH口) 「模拟器、工具合集」复制整段内…...
【Elasticsearch】初始化默认字段及分词
1、添加分词插件 1)在线安装 执行命令 需要指定相同的版本 bin/elasticsearch-plugin.bat install https://get.infini.cloud/elasticsearch/analysis-ik/7.17.24 2)离线安装 将安装包解压到 /plugins 目录下 安装包可以从对应的资源处下载 启动成…...
asdf-java配置
asdf list all java 无结果 asdf list all java 显示结果 No compatible versions available 解决方案 参考 执行 cp ~/.asdf/plugins/java/data/jdk-macosx-x86_64-ga.tsv $TMPDIR/asdf-java-$(whoami).cache/releases-macosx-x86_64.tsv 在此执行 asdf list all java 就可…...
2-2-18-14 QNX系统架构之 TCP/IP 网络
阅读前言 本文以QNX系统官方的文档英文原版资料为参考,翻译和逐句校对后,对QNX操作系统的相关概念进行了深度整理,旨在帮助想要了解QNX的读者及开发者可以快速阅读,而不必查看晦涩难懂的英文原文,这些文章将会作为一个…...
RabbitMQ延迟消息的实现
RabbitMQ延迟队列的实现 延迟消息是什么延迟消息的实现死信交换机代码实现 延迟消息插件 延迟消息是什么 延迟消息是将消息发送到MQ中,消费者不会立即收到消息,而是过一段时间之后才会收到消息,进行处理。在一些业务中,可以用到延…...
Docker 安装 中文版 GitLab
Docker 安装系列 安装GitLab、解决服务器内存不足问题、使用域名/IP地址访问项目 1、拉取 [rootTseng ~]# docker pull twang2218/gitlab-ce-zh:latest latest: Pulling from twang2218/gitlab-ce-zh 8ee29e426c26: Pull complete 6e83b260b73b: Pull complete e26b65fd11…...
Ubuntu22.04深度学习环境安装【Anaconda+Pycharm】
anaconda可以提供多个独立的虚拟环境,方便我们学习深度学习(比如复现论文); Pycharm编辑器可以高效的编写python代码,也是一个很不错的工具。 下面就记录下Ubuntu22.04的安装流程: 1.Anaconda安装 下载Ana…...
springboot整合canal
学习链接 Cannal项目地址 SpringBoot整合Canal实现数据同步到ElasticSearch - 原文地址 Spring Boot整合canal实现数据一致性解决方案解析-部署实战 Java:SpringBoot整合Canal实现数据同步 docker环境安装mysql、canal、elasticsearch,基于binlog利…...
8.在 Vue 3 中使用 OpenLayers 加载天地图示例(多种形式)
前言 OpenLayers 是一个强大的开源地图框架,可以轻松实现地图加载与操作。而 Vue 3 则通过 Composition API 提供了更加简洁和灵活的开发体验。本文将介绍如何在 Vue 3 中结合 OpenLayers 实现对天地图的加载,包括矢量地图、卫星地图以及中文和英文标记等…...
如何设置 Java 开发环境
如果你在这里,可能是想学习如何为 Java 开发设置环境。第一步是安装 SDK(软件开发工具包),它是一组由硬件和软件供应商提供的工具和库。 对于 Java,我们使用 JDK(Java 开发工具包)。JDK 是一组…...
MetaGPT 安装
1. 创建环境 conda create -n metagpt python3.10 && conda activate metagpt2. 可编辑方式安装 git clone --depth 1 https://github.com/geekan/MetaGPT.git cd MetaGPT pip install -e .3. 配置 metagpt --init-config运行命令,在C盘位置C:\Users\325…...
石岩湿地公园的停车场收费情况
周末石岩湿地公园停车场【967个】小车停车费封顶14元价格还行,我还记得2020年的时候湿地公园还是10元一天封顶。现在的收费情况也是可以的,尤其是周末停车比工作日停车便宜还是很得民心的哈。 车型 收费标准 小车 工作日 高峰时间8:00~20:00 首小时…...
v3账号密码登录随机图片验证码
安装插件 pnpm i identify --save图形验证码组件 <template><div class"s-canvas"><!-- 图形验证码的宽和高都来自于父组件的传值,若父组件没有传值,那么就按当前子组件的默认值进行渲染 --><canvas id"s-canvas&…...
mysql8 主从复制一直失败
问题描述: 开启同步后从服务器一直失败,报错如下: Last_SQL_Error: Coordinator stopped because there were error(s) in the worker(s). The most recent failure being: Worker 1 failed executing transaction ANONYMOUS at source log …...
Java项目实战II基于微信小程序的消防隐患在线举报系统(开发文档+数据库+源码)
目录 一、前言 二、技术介绍 三、系统实现 四、核心代码 五、源码获取 全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 随着城市化进程的加快&…...
【第二十四周】从大语言模型到多模态大模型的发展
摘要 大语言模型(Large Language Model, LLM)是指一类基于深度学习的人工智能系统,它们被设计用来理解和生成自然语言。这些模型通常是在大量的文本数据上进行训练的,通过学习文本中的模式和结构,它们能够执行各种各样…...
深入理解Java的 JIT(即时编译器)
🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/literature?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,…...
数据库技术文档撰写:全方位剖析
在技术的浩瀚海洋中,一份优秀的技术文档宛如精准的航海图。它是知识传承的载体,是团队协作的桥梁,更是产品成功的幕后英雄。然而,打造这样一份出色的技术文档并非易事。你是否在为如何清晰阐释复杂技术而苦恼?是否纠结…...
设计模式之原型模式:深入浅出讲解对象克隆
~犬📰余~ “我欲贱而贵,愚而智,贫而富,可乎? 曰:其唯学乎” 原型模式概述 在我们的日常生活中,经常会遇到"复制"这样的场景。比如我们在准备文件时,常常会复印一份原件&a…...
centos 查看版本
在 CentOS 中,查看系统版本有多种方法。以下是几种常用的方法: 方法 1:使用 cat 命令查看 /etc/centos-release 文件 cat /etc/centos-release 这个文件包含了 CentOS 的版本信息。例如,输出可能是: CentOS Linux rel…...
如何本地存储中的文件路径
文章目录 1. 概念介绍2. 实现方法3. 示例代码我们在上一章回中介绍了"如何实现本地存储"相关的内容,本章回中将介绍如何实现文件存储.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 我们在上一章回中介绍的本地存储只能存储dart语言中基本类型的数值,如果遇到…...
服务器加固
1.服务器密码复杂度 密码最小长度,密码复杂度策略 vim /etc/pam.d/system-auth --------------- #密码配置 #ucredit:大写字母个数;lcredit:小写字母个数;dcredit:数字个数;ocredit:…...
MongoDB change stream实战
什么是 Chang Stream Change Stream指数据的变化事件流,MongoDB从3.6版本开始提供订阅数据变更的功能。 Change Stream 是 MongoDB 用于实现变更追踪的解决方案,类似于关系数据库的触发器,但原理不完全相同: Change Stream 的实…...
TSWIKI知识库软件
TSWIKI 知识库软件介绍 推荐一个适合本地化部署、自托管的知识库软件 TSWIKI介绍 tswiki 是一个适合小团队、个人的知识库、资料管理的软件,所有数据均本地化存储。可以本地化、私有云部署,安装简单。在线预览。 主要功能说明 1、简化的软件依赖和安…...
【Linux课程学习】第十九弹---深入理解进程间通信---匿名管道,命名管道,多匿名管道的BUG
🎁个人主页:我们的五年 🔍系列专栏:Linux课程学习 🌷追光的人,终会万丈光芒 🎉欢迎大家点赞👍评论📝收藏⭐文章 Linux学习笔记: https://blog.csdn.n…...
【C语言】库函数常见的陷阱与缺陷(1):字符串处理函数
目录 一、 strcpy 函数 1.1. 功能与常见用法 1.2. 陷阱与缺陷 1.3. 安全替代 1.4. 代码示例 二、strcat 函数 2.1. 功能与常见用法 2.2. 陷阱与缺陷 2.3. 安全替代 2.4. 代码示例 三、strcmp 函数 3.1. 功能与常见用法 3.2. 陷阱与缺陷 3.3. 安全替代 3.4. 代…...
Qt中的 tableView 设置 二进制 十六进制 序号表头
二 进制序号 因为QTableView的垂直表头并不支持使用委托来自定义。 相反,可以通过将自定义的QWidget作为QHeaderView的标签来实现这一目标。 代码: #include <QApplication> #include <QMainWindow> #include <QVBoxLayout> #include …...
leetCode121.买卖股票的最佳时机
题目: 给定一个数组prices,它的第i个元素prices[i]表示一支给定股票第i天的价格。 你只能选择某一天买入这只股票,并选择在未来的某一个不同的日子卖出该股票。设计一个算法来计算你所能获取的最大利润。 返回你可以从这笔交易中获取的最大利润。如果你…...
基于单片机的自限位电机正反转控制电路
【摘要】 针对减速直流电机正反转和停转控制问题,设计了正反转及自限位控制电路,编制了基于STM8S103单片机的控制电机正反转及自限位的子程序,并应用IAR软件进行仿真,搭建实验装置验证设计效果,实验结果表明所设计控制电路能够良好地控制电机正转、反转和停转,在生活实际…...
为什么使用 Token 而不是 Cookie 来管理用户认证和会话
使用 Token 而不是 Cookie 来管理用户认证和会话的原因主要有以下几点: 跨域问题 (Cross-Domain) Token:通常是存储在客户端的 localStorage 或 sessionStorage 中,不会自动随请求发送到服务器,这使得它在处理跨域请求时更加灵活…...
WIDER FACE数据集转YOLO格式
1. 引出问题 本人最近在做毕设相关内容,第一阶段目标是通过目标检测来统计课堂人数,因此需要对人脸和人头进行目标检测。模型方面没什么好说的无脑用YOLO,数据集方面,人脸部分找到了来自港中文的WIDER FACE数据集。但是解压后发现…...
机器学习概述详解
文章目录 机器学习概述详解一、引言二、机器学习基础1、机器学习定义及应用场景2、监督学习与无监督学习 三、机器学习开发流程四、使用示例1、LeNet网络结构代码示例2、AlexNet网络结构代码示例 五、总结 机器学习概述详解 一、引言 机器学习作为人工智能的一个重要分支&…...
VTK编程指南<三>:基于VTK入门程序解析来理解VTK基础知识
1、VTK入门程序 下面是一个完整的Vtk入门程序,我们基于这个程序来对VTK的基本知识进行一个初步了解。 #include <iostream>#include <vtkAutoInit.h> VTK_MODULE_INIT(vtkRenderingOpenGL2);// VTK was built with vtkRenderingOpenGL2 VTK_MODULE_INI…...
【UE5 C++课程系列笔记】07——使用定时器实现倒计时效果
使用定时器实现如下倒计时效果 效果 步骤 1. 新建一个Actor类,这里命名为“CountDownTimerActor” 2. 在头文件中先定义倒计时时间和更新剩余时间的函数方法 前向声明一个文本渲染组件 3. 在源文件中引入文本渲染组件 创建文本渲染组件并进行一些设置 实现Update…...
基于DDPM的PyTorch简单实现
基于DDPM的PyTorch简单实现 文章目录 基于DDPM的PyTorch简单实现摘要Abstract一、DDPM实现1. 获取数据集2. DDPM类3. 训练算法4. 去噪神经网络5. 实验结果与采样 总结 摘要 本周的学习与实践围绕扩散模型(Diffusion Model)的基础理论和实现展开…...
php laravel 学习管理系统(LMS)
Lernen LMS(学习管理系统)是一个综合性的在线教育平台,旨在为学生和导师提供灵活、高效、便捷的学习体验。该系统不仅帮助学生找到最适合自己的导师,还通过一系列强大的功能,提升了课程安排、学习管理和师生互动的效率…...
【JAVA】Java高级:数据库监控与调优:SQL调优与执行计划的分析
作为Java开发工程师,理解SQL调优和执行计划的分析是至关重要的。这不仅可以帮助我们提高数据库查询的效率,还能减少系统资源的消耗,提升整体应用的性能。 1. SQL调优的重要性 随着数据量的增加和用户请求的增多,数据库的性能问题…...
centos9升级OpenSSH
需求 Centos9系统升级OpenSSH和OpenSSL OpenSSH升级为openssh-9.8p1 OpenSSL默认为OpenSSL-3.2.2(根据需求进行升级) 将源码包编译为rpm包 查看OpenSSH和OpenSSL版本 ssh -V下载源码包并上传到服务器 openssh最新版本下载地址 wget https://cdn.openb…...
jeccg-boot修改密码
最近在使用jeccg-boot框架,遇到一个需要批量修改用户密码的问题 由于框架使用的是加密盐算法生成的密码 ,无法直接通过数据库修改密码 例如将password字段和salt值复制过去,密码是不对的 查看代码发现通过user.getUsername(), user.getPasswo…...
linux 生成 nginx 的https ssl 证书详解
证书生成 1. 生成证书 会提示输入密码,输入两次相同密码即可。 openssl genrsa -des3 -out server.key 20482. 去除密码校验 如果想去除此输密码的步骤,可以执行如下命令,根据使用需求选择。 openssl rsa -in server.key -out server.ke…...
详细介绍vue的递归组件(重要)
递归组件在 Vue 中是一个非常强大的概念,尤其在渲染层级结构(如树形结构、嵌套列表、评论系统等)时,能够极大地简化代码。 什么是递归组件? 递归组件就是一个组件在其模板中引用自身。这种做法通常用于渲染树形结构或…...
gitlab配置调试minio
官方文档 rails console 调试 查看配置Settings.uploads.object_store加载minio clientrequire fog/awsfog_connection Fog::Storage.new(provider: AWS,aws_access_key_id: 你的MINIO_ACCESS_KEY,aws_secret_access_key: 你的MINIO_SECRET_KEY,region: <S3 region>,e…...
Docker(Nginx) 部署 uniapp
目录 一、准备工作 1.Docker安装nginx 2.安装HBuild X工具 二、HBuild X打包项目 1.在HBuild X导入项目 2.配置manifest.json 3.打包 (1)点击发行 (2)填写信息,点击发行 三、nginx部署uniapp 1.生成文件上传…...