- 博客(2210)
- 资源 (58)
- 收藏
- 关注
原创 Wireshark 实战:SSH2 握手全流程拆解,从数据包看懂加密协商每一步
文章摘要:本文分析了SSHv2协议握手过程,通过Wireshark抓包工具解析了基于TCP的SSH2库实现细节。关键流程包括:1)TCP三次握手;2)版本协商确定使用SSHv2;3)算法协商合并ACK与加密参数;4)ECDH密钥交换生成会话密钥;5)新密钥通知与用户认证。整个过程采用"版本→算法→密钥交换→认证"的递进式设计,确保安全远程访问,相比SSHv1显著提升了加密强度和协议效率。(150字)
2025-10-06 10:03:10
531
原创 干货!Wireshark 抓包 HTTP MP4 媒体流:从流量捕获到内容解析,新手也能上手
摘要:本文分析了某大厂基于HTTP的视频流媒体传输机制,重点解析了MP4格式的分片传输原理。通过Wireshark抓包发现,HTTP通过Range头实现分块请求,服务器返回206状态码和部分内容。关键点包括:1)分片传输支持断点续传和边播边下;2)MP4文件由ftyp(格式标识)、moov(元数据容器)和mdat(媒体数据)三部分组成,其中前两者是播放必备要素。实验证明导出分片数据可正常播放,验证了HTTP流媒体的实现机制。(149字)
2025-09-28 13:36:39
563
原创 C++笔记-一种二进制文件拼接技术的实现方式
本文介绍了一种将文件数据附加到可执行文件末尾的技术方法。该方法利用PE/ELF文件格式特性,在不影响程序执行的前提下,通过程序A将指定文件内容附加到程序B末尾,并额外写入8字节的文件大小信息。程序B运行时通过定位自身文件末尾读取附加数据,先获取8字节的文件大小信息,再据此读取相应长度的附加内容。文章提供了完整的Qt实现代码,包括文件写入器和读取器两个程序,并说明了在Windows和Linux系统下的权限注意事项。
2025-09-22 08:38:27
269
1
原创 保姆级 Wireshark 实战:SSH2 握手流程逐包拆解,小白也能看懂核心逻辑
本文介绍了SSHv2协议握手过程的分析。作者通过Wireshark抓包工具,观察到一个文件上传工具中SSH2库的底层通信流程。分析发现SSHv2握手包含以下关键步骤:1)TCP三次握手建立连接;2)版本协商;3)算法协商(合并了ACK和算法表发送);4)ECDH密钥交换生成临时会话密钥;5)新密钥通知;6)用户认证。整个过程采用层层递进的安全机制,通过加密技术确保远程连接的安全性。相比传统协议,SSHv2将多个步骤合并优化,提高了通信效率。
2025-09-16 07:39:00
426
原创 为什么说 FTP 早该淘汰?Wireshark 抓包演示:你的信息正被 “明牌” 传输
本文将带你深入了解FTP协议的基本原理、关键流程以及如何通过Wireshark进行实际抓包分析,帮助你全面掌握文件传输协议的核心知识与实战技能。
2025-09-08 08:47:49
638
原创 C++笔记-调用winsocket发送ICMP
该程序实现了一个基于Windows ICMP API的ping工具,通过IcmpCreateFile、IcmpSendEcho等函数向目标主机发送ICMP请求。程序流程包括:初始化Winsock库、解析目标IP、创建ICMP句柄、循环发送4个请求包(默认1秒间隔)、处理响应并显示往返时间,最后释放资源。核心功能类似系统ping命令,可检测目标主机的可达性和网络延迟,依赖iphlpapi和ws2_32库实现ICMP通信。程序默认测试8.8.8.8的连通性,输出包含数据大小、源地址和响应时间等信息。
2025-09-04 15:35:01
329
原创 Wireshark笔记-DHCP两步交互流程与数据解析
摘要:DHCP两步交互是续租时的简化流程,客户端直接发送DHCPRequest(携带曾用IP),服务器验证后回复ACK,跳过发现和提供阶段。关键点包括:1)Request包通过Option50声明历史IP;2)ACK包通过相同事务ID确认分配;3)服务器单播回复(基于客户端MAC地址);4)网络层与链路层分离设计,使无IP客户端能接收ACK。该设计解决了"客户端无IP时如何接收配置"的问题,体现了DHCP协议的巧妙性。(149字)
2025-09-02 11:16:26
411
原创 Wireshark笔记-DHCP流程与数据包解析
文章摘要:本文通过Wireshark抓包分析DHCP协议的四个关键交互过程:Discover、Offer、Request和ACK。作者从大学时期的DHCP基础认知出发,详细记录了2021年备考网络工程师时整理的DHCP工作原理,并最终在2025年完成实践验证。抓包分析验证了DHCP客户端从广播请求到最终获得IP地址的全过程,包括关键字段如MAC地址、TransactionID、Option参数等。特别关注了Windows系统特有的Vendorclassidentifier标识和IP冲突防范机制,完整呈现了D
2025-08-25 13:53:01
1165
2
原创 终于搞懂!HTTP 代理的账号密码校验:软件怎么做 + 流程怎么走 + 原理是什么?
Proxy-Authorization是HTTP代理认证的核心请求头,在代理返回407响应后,客户端通过该头提交认证凭据。Basic认证将"用户名:密码"Base64编码传输,但需配合HTTPS保障安全。关键机制是客户端仅在收到407响应后才发送凭证,不会主动提交。代码示例展示了代理服务器如何通过检查Proxy-Authorization头并返回407实现认证流程。HTTPS代理同样采用该机制,只是增加了SSL加密层保护传输安全。
2025-08-19 14:16:52
381
原创 HTTP 代理服务器的 C++ 实现与分析:客户端通过代理访问 HTTP 站点的主页劫持流程(软件实现+流程演示+原理讲解)
本文介绍了HTTP协议的基本概念,重点演示了HTTP劫持的实现过程。作者使用C++Qt框架开发了一个HTTP代理服务器程序,通过在数据转发过程中修改HTTP响应内容,实现了页面劫持效果。文章分析了HTTP劫持的原理,即利用HTTP明文传输特性进行中间人攻击,并展示了关键代码逻辑:在代理服务器转发请求时注入修改后的数据。同时指出HTTPS劫持虽可能但难度较大,需要破坏证书信任链才能实现。最后提到后续将专门探讨HTTPS劫持的技术细节。
2025-08-16 10:39:15
389
原创 从抓包到理解:Wireshark 带你看透 TCP 三次握手
摘要:本文介绍了TCP三次握手的过程及相关概念。TCB(传输控制块)存储TCP连接的关键信息。三次握手步骤包括:1)客户端发送SYN包(SYN=1,seq=x);2)服务端回复SYN-ACK包(SYN=1,ACK=1,seq=y,ack=x+1);3)客户端发送ACK包(ACK=1,seq=x+1,ack=y+1)。通过Java服务端和C++客户端的实例演示了握手过程,抓包结果显示序列号(Seq)和确认号(Ack)的变化验证了TCP连接的建立机制。
2025-08-04 15:19:32
475
原创 理解Linux文件系统层次结构
Linux文件系统采用单根结构(/)设计,遵循FHS标准。主要目录包括:/bin存放基础命令、/sbin存放系统管理工具、/etc存储配置文件、/home存放用户数据。系统运行时数据存放在/var,临时文件在/tmp,第三方软件在/opt。硬件驱动位于/dev,内核和进程信息在/proc和/sys。理解这种层次结构有助于系统维护、故障排查和安全防护,是Linux用户必备的基础知识。
2025-06-16 08:50:46
1077
原创 Linux笔记-使用SCL离线升级GCC
本文介绍了在CentOS 7系统中通过离线方式升级GCC编译器的详细步骤。主要流程包括:1)在联网机器上修改软件源为阿里云镜像,安装devtoolset-9;2)查询并打包/opt/rh/devtoolset-9目录;3)将压缩包复制到离线机器解压;4)配置.bashrc文件添加环境变量。关键点:需确保机器架构一致,使用scl工具管理多版本,通过修改软件源解决CentOS 7停止维护的问题,最终通过source命令激活新编译器环境。该方法同样适用于其他devtoolset版本的安装。
2025-06-16 08:49:12
338
原创 React笔记-Ant Design X样本间对接智谱AI
本文介绍了如何将AntDesignX样本间对接智谱AI的API接口。主要步骤包括:1)搭建AntDesignX样本间;2)获取智谱AI的API接入信息;3)修改代码中的请求配置,设置基础URL、API密钥和模型参数;4)调整请求处理逻辑,实现流式响应处理和数据拼接。关键点在于正确配置请求参数和实现流式数据的实时更新,最终完成与智谱AI的对接。
2025-05-26 08:42:29
1387
原创 React笔记-使用Ant Design X样板间
该文档记录了在create-react-app中搭建Ant Design X环境的过程。作者虽无系统React经验但成功实现了基本功能。关键步骤包括:使用TypeScript模板创建项目后需手动升级TypeScript到5.0.0以上版本;从官方示例中提取组件代码到App.tsx;最后安装antd、antd-style和react等必要依赖。整个过程注重实用性和快速可运行性,而非深入的技术细节。
2025-05-26 08:40:54
572
原创 Qt笔记-自定义托盘弹出界面
原始的Tray只能有菜单,不能放表格,浏览器等其他东西,不太灵活,需要弹出的界面自定义。弹出的界面就是TrayWidget.ui,在此界面上美化即可。
2025-04-28 13:58:12
504
原创 MySQL笔记-mysql -hlocalhost和mysql -h127.0.0.1的不同
我这边有台Linux的机器,搭建了MySQL,端口号是1万开头(非3306),因业务需求,需要再搭建一台MySQL,端口号为3306的,为了方便,我搭建了一个docker版MySQL,启动时做了HOST,端口是3306。一开始以为是iptables转发是不是有问题,就强制写了一条nat转发127.0.0.1到docker网关的规则,但还是不行。应用程序里面也是如此,当输入的是localhost时,连接到宿主机。时,他连接到宿主机(端口号1万开头的那个mysql了,查日志查到的)有意思的地方来了,当我输入。
2025-04-28 13:55:18
446
原创 Qt6笔记-对Qt6中对CMakeLists.txt的解析
下面对CMakeLists.txt进行次理解。首先,新建Qt Console Application项目。下面对上述内容进行解析,都来自于文档。
2025-04-21 10:09:30
378
原创 Qt6文档阅读笔记-RESTful API Server解析
上例中,route指定GET方法,以JSON数组的形式返回当前提供的页码的数据。其中QHttpServer::route()中使用QHttpServerRequest::Method::Get枚举类型,指明这个route为GET方法。上例中,route接收POST方法,新增一个实例,并且返回新增的实例。此请求必须被认证,认证的token需要放到请求的head中,其中token为调用服务端api/login和api/register返回的数据。上面的代码通过请求中的ID参数,获取list实例中单独的那条。
2025-04-21 10:06:43
622
原创 CMake文档阅读笔记-Simple “Hello World“ Project
首先创建一个main.cpp文件,包含一个main函数,并且创建CMakeLists.txt文件。CMakeLists.txt文件的作用是指导CMake在当前操作系统编译C++程序。① cmake_minimum_required(VERSION 2.4):设置了当前脚本需要的最小的CMake版本。③ add_executable(app main.cpp):结合main.cpp文件构建app程序。② project(hello_word):开始创建一个新的CMake项目。这种方式会使得目录更加的干净。
2025-04-14 08:57:48
238
原创 Qt6文档阅读笔记-Simple Http Server解析
上述代码中,使用addAfterRequestHandler()函数,使得QHttpServer中的QHttpServerResponse对象在route()之后被处理。上面代码展示了,如果在reponse中添加响应头。此例展示了如何使用QHttpServer类建立服务端。服务端通过QTcpServer的bind()函数监听tcp端口,并且使用route()函数增加不同URL的处理。上述代码中,使用QSslConfiguration类为QHttpServer进行HTTPS相关的SSL配置。
2025-04-14 08:53:32
614
原创 50道MySQL面试题(41-50)
ACL(Access Control List)用于控制连续MySQL的对象。ACL存储在内存中,ACL也被称为权限表。当用户提交SQL命令时,会先判断用户是否有其权限,做这件事情。聚蔟索引:找到了索引就找到了需要的数据,那么这个索引就是聚簇索引。非聚蔟索引:索引的存储和数据的存储是分离的,也就是说找到了索引但没找到数据,需要根据索引上的值(主键)再次回表查询,非聚簇索引也叫做辅助索引。
2025-04-07 08:59:23
862
原创 C++笔记-关于LNK2019和LNK2001的解决思路(2024-12-03)
② 写代码应该满足面向对象基本原则,至少要写成高内聚低耦合,一样的功能要抽出来放一起,为什么会出现2个同样的文件名(不在同一目录)并且里面还及其相似。工作这么多年了,还在记录LNK2019和LNK2001这个感觉有点菜了,但这次一定要记录下这个问题,因为感觉很具有代表性。有两个同名的.h文件,不在同一个目录,里面的内容还特别的像,刚好这个项目的include都包含了这2个目录。① include一般是引用第三方库时,才用的,自己include自己,这个感觉太奇怪了。并且调用时,需要using。
2025-04-07 08:56:12
411
原创 uniapp笔记-自定义分类组件
uniapp就是基于vue的开发,构造自定义组件就和vue的自定义一样。再次调整,只需要一行分类,categoryList.slice(0, 4)下面完善下category.vue相关的代码。下面美化,设置一些css。
2025-03-31 08:52:10
668
原创 50道MySQL面试题(31-40)
MySQL中主键可以是一列,也可以是几列的组合,用于对数据进行唯一标识。主键不能为NULL或为空。使用ALTER TABLE语句删除表的主键。heap表通常用存储临时数据。BLOB及TEXT字段不允许存在heap中;对比操作仅允许:=,<,>,=>,=<;heap表不支持AUTO_INCREMENT;heap表中不允许将索引设置为NULL。视图中不包含表格内容,视图仅包含行和列,视图是一个虚表。视图可以连接1张或多张表。如果表的底层发生了改变,视图也会跟着进行变化。
2025-03-31 08:49:02
912
原创 50道MySQL面试题(21-30)
50道MySQL面试题(21-30)MySQL是一个开源的关系型数据库管理系统(RDMS:Relational Database Management System),使用行和列这样的表格存储结构化数据。使用结构化查询语言(SQL:Structured Query Language)进行访问、管理、操作数据库。MySQL最初起源于瑞士的AB公司,随后被Oracle公司收购,现在也是Oracle公司的产品。MySQL以高性能,高可靠性,使用简单著称,是目前最流行的数据库之一。
2025-03-24 08:44:03
1140
原创 50道MySQL面试题(11-20)
MySQL是一个开源的关系型数据库管理系统(RDMS:Relational Database Management System),使用行和列这样的表格存储结构化数据。使用结构化查询语言(SQL:Structured Query Language)进行访问、管理、操作数据库。MySQL最初起源于瑞士的AB公司,随后被Oracle公司收购,现在也是Oracle公司的产品。MySQL以高性能,高可靠性,使用简单著称,是目前最流行的数据库之一。在此将给出50道MySQL面试题。
2025-03-17 08:47:42
623
原创 uniapp笔记-底部和首部标签页菜单生成
创建完成后修改category/tab2/tab2.vue。默认情况下都会在pages.json中注册。这些都是需要配置pages.json文件。这样首部的菜单就配置完成了。这样底部的菜单就修改完成了。新建category目录。
2025-03-17 08:42:24
644
原创 50道MySQL面试题(01-10)
MySQL是一个开源的关系型数据库管理系统(RDMS:Relational Database Management System),使用行和列这样的表格存储结构化数据。使用结构化查询语言(SQL:Structured Query Language)进行访问、管理、操作数据库。MySQL最初起源于瑞士的AB公司,随后被Oracle公司收购,现在也是Oracle公司的产品。MySQL以高性能,高可靠性,使用简单著称,是目前最流行的数据库之一。在此将给出50道MySQL面试题。
2025-03-10 08:50:38
956
原创 uniapp笔记-pages.json全局基本配置
② pages.json文件用来对uni-app进行全局配置,决定页面文件的路径、窗口样式、原生的导航栏、底部的原生tabbar等。可参考https://uniapp.dcloud.io/collocation/pages。主要就是pages.json中的globalStyle。将以前的pages.json的这些代码。① 框架配置项pages.json。
2025-03-10 08:46:17
494
原创 50个C++经典面试题(41~50)
无数据类型,但void指针存储的是地址,它可以转换为任意类型。50个C++经典面试题(41~50)🤖✨ 想获取更多有趣的IT知识吗?🤖✨📱💡欢迎关注我们的微信公众号“IT先锋社”!📱💡🔍🌟这里有最新的科技动态和实用技巧等你来探索!🔍🌟🚀🎉快来一起加入我们的IT大家庭吧!🚀🎉。
2025-03-03 08:50:38
1143
原创 uniapp笔记-项目中使用iconfont图标
下载完后是一个download.zip的压缩包,最终将iconfont.ttf和iconfont.css拷贝到项目中。② 把iconfont.css和iconfont.ttf文件拷贝到/static/icon/目录下。① 进入https://www.iconfont.cn然后下载到本地。在static下面,新建目录并把这2个文件放进去。使用Font class然后下载至本地。在App.vue中导入刚刚的css。进入网站后,将选中的图标添加入库。再进入购物车,添加至项目,
2025-03-03 08:45:28
692
原创 50个C++经典面试题(31~40)
在class中,普通成员变量加上static标签后,就会编程静态成员变量。静态成员变量在程序中的main函数之前就会被创建,并在创建类的第一个对象时初始化为0。它只对已定义的类可见,作用域是终身的。静态成员函数可以用于方法静态成员变量或者其他静态函数,定义时需要带上static标签。
2025-02-24 08:40:47
1257
原创 NSIS笔记-使用NSIS进行windows程序打包
最近接到做的项目需要尽可能产品化,就和wps,qq,微信那样,下一步,下一步安装。参考是NSIS这款软件,所以就有了这个笔记。感觉这个软件还是比较牛逼的。此上面这篇博文中涉及一个工具,用于操作NSIS的,HW VNIS Edit。东西都比较全Examples里面包含了设置环境变量的东西。这里有一点要说明,编译的时候要慢慢等,要耐住性子。如果安装时要设置环境变量,需要加载这个插件。这里我使用的是博客园的水晶石大佬的修正版。放到nsis的plugins下即可。将Plugins下的几个dll。
2025-02-24 08:33:40
316
原创 50个C++经典面试题(21~30)
虚继承是一种孙子类从最基本类继承时只保留一份数据的技术。主要解决是菱形继承的问题,阻止多继承时,继承下来重复的成员变量和方法。当父类指针指向子类对象,并要进行析构时,使用虚析构函数技术会调用到子类的析构函数,从而释放内存。虚析构函数的调用顺序:首先调用派生类的析构函数,再调用父类的析构函数。这里有一个建议,敲代码时,我们自定义的所有类的析构函数都写成虚析构函数。具体为什么呢?大家应该能猜到。
2025-02-17 08:39:06
751
原创 MySQL笔记-对max_allowed_packet的进一步理解(2024-10-28)
以前都不太喜欢做实施,运维,但是工作6年后,对这些还是比较感兴趣了,毕竟计算机这块不仅仅是开发,还有很多岗位,并且实施和运维会从其他角度加深对某个产品或系统的理解,比如这次的MySQL,在导库时出现的max_allowed_packet相关的报错,以前刚开始工作没多久也遇到过,但没想这么多,就照着网上的方案,敲1,2条命令就解决了。max_allowed_packet 参数针对的是 一次数据交互 或 数据库操作 中的整个数据包,而不仅仅是某条完整的 SQL 语句或某个字段的值。
2025-02-17 08:33:06
1131
原创 Docker笔记-解决Error response from daemon的一种方法
不要去折腾网络了,换一个曲线救项目的方法的,如mysql,使用此网站(2024-10-25 13:59:20记录的日志,不知道这网站能用多久)
2025-02-10 08:44:23
1177
原创 50个C++经典面试题(01~10)
C++中引用的作用是为某一变量创建一个可供代替的别名,引用可作为变量的符号,不需要其他的语法,就能直接进行访问。对应的完整代码是“usingnamespacestd”,写此代码的目的是告知编译器,后面加载的函数或变量等都从std中加载。C++是一门面向对象语言,它的存在的目的是为了克服C语言的短板。不支持OOPs相关的概念,如封装,继承,多态,抽象,类,对象都不支持。多态是函数重载的一个例子,分配类的对象可以被不同类使用和调用。多范式语言,可以安装不同的范式编写程序的逻辑、结构、过程。
2025-01-20 08:36:59
1625
Qt+Opencv-PCA人脸识别+视频
2017-05-07
基于RFID门禁系统源码 ,C/C++
2017-09-10
Qt文本转化工具 realase版本
2019-01-19
Qt文件编码转换工具源码
2019-01-19
libX11生成libX11-xcb.so.1
2018-11-13
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人