Go红队开发— 收官工具
文章目录
- 免责声明
- 个人武器开发
- 美观输出
- Whois查询
- 反查ip
- 目录扫描
- 子域名爆破
- 被动扫描
- 主动扫描(字典爆破)
- CDN检测
免责声明
💡 本博客绝不涉及任何非法用途。
💡 使用者风险自担,违规后果自负。
💡 守法为先,技术向善。
💡 请合理、合法地使用网络安全技术,共同维护一个健康、安全的网络环境!
个人武器开发
学习项目用到的代码以及数据已开源,喜欢的师傅可以帮忙点一下免费的💡star
💡,后续可能考虑开源自己写的一些工具,感兴趣的师傅可以耐心等待…
国内项目地址:https://gitee.com/whoisDhan/LoveTools
国外项目地址:https://github.com/whoisdhan/LoveTools
这里可以开始给你第一个安全工具起名字了,_______ <- 名字留给各位师傅替自己填
注:本章节的所有代码放github仓库中,作者建议各位还是去github上直接下载整个项目来学习,不用自己创建了
(如果喜欢的话可以顺手点一个免费的star~后续我肯定会出一些安全工具的,各位师傅可以持续关注我的公众号!!!)
tips:
这里先告诉各位师傅我存了两个全局参数在root.go中,target是通用的,proxy也是通用的,同时target目标可以用逗号分隔开作为多个目标传递,因为我使用了StringSliceVarP函数接收参数,OK交代完毕。
美观输出
先对后面的终端输出简单的美观装饰一下,装b必备,学了安全开发可以给不懂安全的朋友装一下多是一件美事。
- 设置表头:SetHeader(v[0])
- 启用边框:SetBorder(true)
- 启用行分隔线:SetRowLine(true)
- 开启自动换行:SetAutoWrapText(true)
- 自定义中心分隔符:SetCenterSeparator(“+”) // 即每一个列之间的分隔符
- 自定义列分隔符:SetColumnSeparator(“|”)
- 自定义行分隔符:SetRowSeparator(“-”)
当我们传入数据调用函数的时候
输出如下图所示:
函数代码如下:
func PrettyPrint(v [][]string) {table := tablewriter.NewWriter(os.Stdout)table.SetHeader(v[0]) // 设置表头table.SetBorder(true) // 启用边框table.SetRowLine(true) // 启用行分隔线table.SetAutoWrapText(true) // 开启自动换行table.SetCenterSeparator("+") // 自定义中心分隔符,即每一个列之间的分隔符table.SetColumnSeparator("|") // 自定义列分隔符table.SetRowSeparator("-") // 自定义行分隔符// 添加数据if len(v) == 0 {//如果没有数据,直接返回table.Render()return}for _, row := range v[1:] {// 这里v[1:]从第二行开始添加数据,第一行是表头,因为表头已经设置好了table.Append(row)}table.Render() // 将结果 prettily 打印到标准输出fmt.Println("")}
Whois查询
下载
go get -u github.com/likexian/whois
简单测试一个域名:
t := "baidu.com"
tmp, err := whois.Whois(t)if err != nil {panic(err)}
fmt.Println(res)
这个是最简单的用法,然后为了接收返回的结果,我创建了一个结构体来接收
但是whois返回的是整个查询结果的原生字符串,所以只能够自己写正则匹配来提取内容了
代码较多,就发核心代码截图来讲解(所有源码在结尾)
util文件的一些函数
-
加载动画
-
whois主要功能
其中包含了加载动画、正则提取、打印结果
-
运行结果
更多函数细节不用深究,后面我会给出所有源码,而且这些函数功能其实用ai也能写出来,不用造轮子。
反查ip
最终效果
自己在https://site.ip138.com/网站上找ip进行反查作为例子即可,很多ip都可以反查到域名
这功能在https://site.ip138.com/网站请求
-
核心函数
iprSearch
:
负责对单个域名进行ip反查
-
iprsSearch
,ipr后多了一个s区分,用来对域名列表进行ip反查
-
ipr
最终调用功能函数
-
运行结果
目录扫描
练习项目我们这里就直接用字典扫url一层目录即可
- 2xx 状态码:绿色
- 3xx 状态码:橙色
- 4xx 状态码:蓝色
- 5xx 状态码:红色
最终运行效果如下:
(我们仅仅做于学习,并没有对服务器造成影响,扫了几个请求而已哈~)
细节:
- 目录扫描要设置禁止自动跟踪跳转,否则服务器有完整的302跳转的话,你扫出来的都是200
- 超时时间建议也带上,可控性强
- 这里其实还可以加一个延迟请求效果,比如每一个请求之间间隔多久,否则发送太快容易被服务端封禁(这里留着可以给感兴趣的师傅自己写)
- 线程设置,这里不做实现(×)
- 我们scanner读取每一行的时候,由于可能用户会给多个目标,所以我们的字典要指针要回到头部进行重新读取,seek需要第二层循环完成字典后记得将指针指向头部
对url进行清洗
- checkHttp:检查是否是http开头,因为有的用户可能会直接给一个域名
- 去除多余空格
- 去除多余
/
对不同状态码之间的请求路径上色
- 这里判断一下状态码的范围即可,注意我第一个用了
IsSuccessState
,他就是判断200~299之间的,后面就没有了,只剩下一个IsErrorState
,他是大于400就true,不符合我们的要求
一个目标完成扫描后,我们的字典到尾部了,所以我们需要将这个指针指向头部重新给下一个目标扫描目录
最后给命令Run给上运行逻辑和init上添加子命令和对应的参数即可
最后就是运行go run main.go -t xxx.com,aaa.ccc
,多个目标可以用逗号隔开
(仅仅做学习,不要对服务器造成影响)
这里还有几个状态码效果颜色需要找到对应的服务器返回状态码才行,这里就忽略了,能够打印颜色就表示成功了。
子域名爆破
这里有一个细节要注意:
-
由于子域名爆破中主动扫描要用到dict字典,之前在目录扫描中也有一个字典,为了方便,使用同一个参数就合并起来了,放到root中作为全局参数
同时为了更容易区分和防止子命令撞参数就把全局的短选项参数更改为大写
-
同时也在root添加了yaml配置文件变量名
-
被动扫描用的是subfinder提供出来的sdk进行开发,下载的时候需要注意go get是否能下载到,下载不了可能你是更改成为了其他加速的地址需要更改回来官方的:
具体要看你能不能下载,下载失败就要更改回官方的
go env -w GOPROXY=https://goproxy.io,direct
<- 这是官方的,之前可能你更改了阿里云或者其他国内加速地址
被动扫描
使用subfinder的核心接口sdk,有官方使用代码例子:
https://github.com/projectdiscovery/subfinder/blob/dev/v2/examples/main.go
我这里写了三个函数,将官方示例代码小小的拆开了几部分
-
subDomainFinder
:扫描单个域名
0.写一个&runner.Options
结构体
1.NewRunner
创建一个runner
2.&bytes.Buffer{}
缓冲区
3.使用EnumerateSingleDomainWithCtx
进行被动扫描,参数按照官方给的用就行,这些代码都是官方上拿的
4.改动:我将结果作为函数返回值,因为我们是对多个目标进行扫描,这里单个结果返回即可
-
对多个目标进行扫描,就是结合单个域名扫描那里进行包装循环
-
打印结果:没啥好说的,就看你自己需求,我这里就直接用官方给的打印方式了,唯一不同就是由于我们有加载动画,首先不能让加载动画覆盖我们的域名打印结果,所以我们在打印结果之前进行清行:
\r\033[K
,当然
主动扫描(字典爆破)
主动扫描意思是使用字典进行爆破,所以自己就能写,可以不用subfinder的代码,使用lookup
就能判断域名是否有效。
我这里用了一个函数一个结构体
-
结构体
LookupResult
:
用来存储域名和对应的ip,因为他lookup
会返回一个lookup的ip地址列表 -
bruteSubdomains
:go协程、加锁、文件读取、yaml文件解析都用上了,这里学习了一个新的解析格式yaml
,建议自己去看https://www.runoob.com/w3cnote/yaml-intro.html菜鸟这篇文章,短小精悍,一看就懂。
- 单个域名解析:
scanDomain
函数变量
这里还涉及到多个协程操作一个results
列表变量的问题,所以需要用到互斥锁,否则会出现不同步的问题,可能会导致死锁。
还有一个就是ip显示还是不显示的问题,这个也提取出来作为一个可选参数,毕竟我们爆破域名的时候也想看看ip(默认是不开启)
- 为了更加定制化,所以我将url字典提取出来了,放到了yaml文件中,方便以后url字典能够在配置文件更换
- 这里需要添加一个config.go文件存储结构体
- 接着就是写解析
yaml
函数,其实就是之前学的导出文件中的函数一样,只不过函数类别换成了yaml来调用
- 因为要用
bufio.NewScanner
,在util.go文件中添加一个函数,所以要读取url返回一个io.Reader
类型,那么就直接封装到util.go
文件中使用了
- 本地扫描就忽略了,因为就是一个读取文件一行一行拼接就行,下面我直接放剩下的代码截图
- 单个域名解析:
-
参数添加如下
所以我们可以使用的命令组合有:
subdomain -a true -T xxx.cxm
默认使用url字典主动扫描
subdomain -a true -F dict.txt -T xxx.cxm
使用字典路径扫描
subdomain -b true -T xxx.cxm
被动扫描
subdomain -T xxx.cxm
两个都是false的时候,默认就是被动扫描,函数代码中有进行判断两个false
subdomain -i true -T xxx.cxm
加上-i组合就更多了,自己测试即可
这里贴一个运行结果
命令是:go run main.go subdomain -a true -u true -T baidu.com -i true
CDN检测
检测最终结果,仅做学习用途,无非法动作。
-
yaml文件添加cdn检测节点
节点检测方式:CDNURL/?domain=baidu.com
-> 响应返回用逗号隔开的ip列表(检测成功) 或者检测失败
-
config.go文件添加属性
-
创建
cdn.go
文件,分别写了三个函数以及一个结构体去完成这个功能cdnInfo
就是用来存储一个域名去多个cdn节点检测结果的一个结果合集
所以除了domain都是string列表类型,看下图抓包就能看到请求的完整路径,所以知道请求路径就知道怎么写代码了。
-
cdnCheck
最核心的函数:最终要的是在你config := util.ParseConfig(yamlPath)
读取配置文件后怎么请求,其实就是很简单,用创建好的client请求,如果状态码200就请求成功,否则就请求失败,在响应结果和相应列表的append中自己修改一下即可。
- 在第二层循环的时候记得把
target
和yaml配置中的cdn归属地址address
添加进cdnInfo
里面即可
- 在第二层循环的时候记得把
-
cdns函数
:
就是对多个目标进行遍历给到cdnCheck检测即可
同时记得加上加载动画过程
-
打印CDN结果
双层遍历找到cdnInfo
的结果列表,因为他就是最深一层,然后按照需求添加进去res
里面给到util.PrettyPrint
函数就行(这个函数是之前写的,一直都有用)
-
Command结构体的Run属性写法:
-
最终运行结果:
正在扫描中
结果
还有其他功能在前面几个章节的功能函数拿来就能填充进去作为一个功能参数使用,这里就不做无谓的扩展了。
Go红队开发暂时告一段落了,想必各位师傅已经跟着我前面几期学下来,自己就能够开发小工具了,告别脚本小子的第一步已经迈出,接下来师傅们就可以靠这些基础修行了,没想到这一个合集内容收获了这么多师傅的光临,让各位见笑了,接下来我也要继续前进,打磨技术希望后面出更好的高质量文章给各位师傅~
.......如您所见,鄙人总喜欢在最后放一些内容感谢能够看到这里的师傅,不管是否看到这里还是划到这里的都是一种缘分
无论如何😶竹某人非常感动还有这么师傅在看我的文章!!
相关文章:
Go红队开发— 收官工具
文章目录 免责声明个人武器开发美观输出Whois查询反查ip目录扫描子域名爆破被动扫描主动扫描(字典爆破)CDN检测 免责声明 💡 本博客绝不涉及任何非法用途。 💡 使用者风险自担,违规后果自负。 💡 守法为先,技术向善。 …...
Android 应用程序包的 adb 命令
查看所有已安装应用的包名 命令:adb shell pm list packages说明:该命令会列出设备上所有已安装应用的包名。可以通过管道符|结合grep命令来过滤特定的包名,例如adb shell pm list packages | grep com.pm,这将只显示包名中包含co…...
北京南文观点:后糖酒会营销,以战略传播重构品牌信心坐标
第112届全国糖酒会落下帷幕,参展品牌面临一个关键命题。如何在流量洪流中沉淀品牌价值?北京南文(全称:南文乐园科技文化(北京)有限公司)认为,糖酒会的结束恰是算法时代品牌认知战的真…...
Qt - findChild
findChild 1. 函数原型2. 功能描述3. 使用场景4. 示例代码5. 注意事项6. 总结 在 Qt 中,每个 QObject 都可以拥有子对象,而 QObject 提供的模板函数 findChild 就是用来在对象树中查找满足特定条件的子对象的工具。下面我们详细介绍一下它的使用和注意事…...
2025年3月个人工作生活总结
本文为 2025年3月工作生活总结。 研发编码 一个curl下载失败问题的记录 问题: 某程序,指定IP和账户密码配置,再使用curl库连接sftp服务器,下载文件。在CentOS系统正常,但在某国产操作系统中失败,需要用命…...
Spring Boot 七种事务传播行为只有 REQUIRES_NEW 和 NESTED 支持部分回滚的分析
Spring Boot 七种事务传播行为支持部分回滚的分析 支持部分回滚的传播行为 REQUIRES_NEW:始终开启新事务,独立于外部事务,失败时仅自身回滚。NESTED:在当前事务中创建保存点(Savepoint),可局部…...
NVIDIA工业设施数字孪生中的机器人模拟
工业设施数字孪生中的机器人模拟 文章目录 工业设施数字孪生中的机器人模拟数字孪生技术的价值NVIDIA Omniverse平台工业机器人仿真的核心组件示例一:使用Isaac Sim创建基本机器人场景示例二:机器人运动规划和轨迹执行示例三:传感器集成与感知…...
docker安装jenkins
docker安装jenkins 1.安装javaJDK 服务器安装javaJDK ,因为我的服务器是直接集成了宝塔面板,我就直接从宝塔面板去安装JDK 最好安装17的JDK,因为后面会安装jenkins,需要17的版本 1.2查看安装是否完成 java --version 安装成功如下&#x…...
量子计算与人工智能融合的未来趋势
最近研学过程中发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击链接跳转到网站人工智能及编程语言学习教程。读者们可以通过里面的文章详细了解一下人工智能及其编程等教程和学习方法。 在当今科技飞速发展…...
人工智能在生物医药-新版ChatGPT-4o辅助一键生成机制图
新版ChatGPT-4o辅助一键生成机制图 作为一位生物医学教授专家,我将基于PubMed最新研究和科研大数据信息,遵循您的要求,一步一步进行思考和预测。 核心问题:乳酸化修饰促进肾透明细胞癌(ccRCC)恶性进展的机…...
支持 MCP 协议的开源 AI Agent 项目
关键要点 研究表明,目前有多个开源 AI Agent 项目支持 MCP 协议,包括 ChatMCP、HyperChat、5ire 和 Cherry Studio 等。这些项目主要用于聊天或桌面助手,允许通过 MCP 协议连接外部数据和工具。MCP 协议是 2024 年 11 月由 Anthropic 开源的…...
JavaRedis和数据库相关面试题
JavaRedis面试题 1. Redis是什么以及Redis为什么快? Redis(Remote Dictionary Server)是一个开源的内存键值数据库,支持多种数据结构(如字符串、哈希、列表、集合等),并提供持久化、复制、…...
Android开发RxJava3延迟操作
Android开发RxJava3延迟操作 直接上代码: /*** param timeMillis 毫秒单位* desc : 延迟多少毫秒操作,* 注:它和Activity生命周期绑定,界面关闭了不会再执行delayTodoListener.delayTodo()* author : congge on 2021-03-25 15:31**/p…...
android 设置状态栏背景
一 让activity ui界面和手机状态栏一样的背景 要让 Activity 的 UI 界面和手机状态栏具有相同的背景颜色,并且能够随着深色模式和非深色模式的切换而改变颜色,你可以按照以下步骤操作: 1. 让 Activity 和 状态栏背景颜色一致 使用 window.s…...
vue 常见优化手段
文章目录 vue常见的优化手段前言使用key(避免明明相同的dom,每次更新都要重新生成)使用冻结的对象(避免无意义的响应式数据)使用函数式组件(减少vue组件实例的生成)vue3vue2使用计算属性(减少数据计算的次数)非实时绑定的表单项(避免表单过多触发监听事件)保持对象的…...
vue生命周期、钩子以及跨域问题简介
Vue 的生命周期是指 Vue 实例从创建到销毁的整个过程。在这个过程中,Vue 提供了一系列的生命周期钩子(Lifecycle Hooks),允许开发者在特定的时间点执行代码。以下是 Vue 的生命周期和钩子的简单说明: Vue 的生命周期阶…...
主相机绑定小地图
资源初始化:在类中通过 property 装饰器定义主相机、小地图相机、小地图精灵等资源属性,便于在编辑器中赋值。在 start 方法里,当确认这些资源存在后,创建渲染纹理并设置其大小,将渲染纹理与小地图相机关联,…...
关于音频采样率,比特,时间轴的理解
是的,你的理解完全正确!-ar、-af aresampleasync1000 和 -b:a 64k 分别用于控制音频的采样率、时间戳调整和比特率。它们各自有不同的作用,但共同确保音频的质量和同步性。下面我将详细解释每个参数的作用和它们之间的关系。 1. -ar 参数 作用…...
三、FFmpeg学习笔记
FFmpeg是一个开源、跨平台的多媒体处理框架,能够实现音视频的录制、转换、剪辑、编码、解码、流媒体传输、过滤与后期处理等几乎所有常见的多媒体操作。其强大之处在于几乎支持所有的音视频格式、编解码器和封装格式,是业界公认的“瑞士军刀”。 FFmp…...
什么是 Java 泛型
一、什么是 Java 泛型? 泛型(Generics) 是 Java 中一种强大的编程机制,允许在定义类、接口和方法时使用类型参数。通过泛型,可以将数据类型作为参数传递,从而实现代码的通用性和类型安全。 简单来说&…...
从 WPF 到 MAUI:跨平台 UI 开发的进化之路
一、引言 在软件开发领域,用户界面(UI)开发一直是至关重要的环节。随着技术的不断发展,开发者对于创建跨平台、高性能且美观的 UI 需求日益增长。Windows Presentation Foundation(WPF)和 .NET Multi - pl…...
Docker学习之dockerfile篇(day8)
文章目录 前言一、问题描述二、具体内容1. Docker 镜像原理2. Docker 镜像制作3. Dockerfile 概念Dockerfile 的基本结构: 4. Dockerfile 关键字5. Docker 实战案例5.1 基于 Nginx 构建 Web 服务器 6. 验证与总结6.1 验证 Dockerfile6.2 总结 前言 Docker 是一种轻…...
Kotlin 作用域函数:apply、let、run、with、also
在 Kotlin 开发中,作用域函数(Scope Functions)是一组能让代码更简洁、更函数式的高阶函数。它们通过不同的作用域规则和返回值设计,解决了对象配置、空安全处理、链式操作等常见场景问题。本文将结合核心特性、代码示例和对比表格…...
Java 线程池与 Kotlin 协程 高阶学习
以下是Java 线程池与 Kotlin 协程 高阶学习的对比指南,结合具体代码示例,展示两者在异步任务处理中的差异和 Kotlin 的简化优势: 分析: 首先,我们需要回忆Java中线程池的常见用法,比如通过ExecutorService创…...
C++学习笔记(三十三)——forward_list
一、std::forward_list (1) forward_list与其适用场景 std::forward_list 是 C的STL中的单向链表(Singly Linked List),它相比 std::list(双向链表)更轻量,适用于仅需要单向遍历的场景。 主要特点&#…...
ROS订阅相机图像识别颜色并发布识别信息
一、前言 区别于之前的直接驱动相机,这里改为读取图像话题进行处理,原因是如果opencv驱动相机后只能单一使用,就限制了其他识别功能(除非将原始图像发布出来),所以这里改成可以读取任意相机图像话题的方法…...
Redis-15.在Java中操作Redis-Spring Data Redis使用方式-操作集合类型的数据
一.操作集合类型的数据 package com.sky.test;import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.data.redis.core.*;import j…...
第十一届蓝桥杯大赛软件赛省赛C/C++ 大学 B 组
1.字串排序 不会做,感觉挺难的,有兴趣的可以看下面题解 #include <iostream> #include <string.h> using namespace std; int V; int len;//符合交换次数V,字符串长度最小值 int now; //当前已经构造好的那一部分字符串逆序对个数…...
CentOS 安装 zip
安装软件 sudo yum install zip unzip # CentOS 7 sudo dnf install zip unzip # CentOS 8/9压缩文件 # 压缩单个文件 zip 压缩包名.zip 文件1# 压缩多个文件 zip 压缩包名.zip 文件1 文件2 文件3# 压缩目录(包含子目录) zip -r 压缩包名.zip 目…...
FastPillars:一种易于部署的基于支柱的 3D 探测器
FastPillars:一种易于部署的基于支柱的 3D 探测器Report issue for preceding element Sifan Zhou 1 , Zhi Tian 2 , Xiangxiang Chu 2 , Xinyu Zhang 2 , Bo Zhang 2 , Xiaobo Lu11{}^{1}start_FLOATSUPERSCRIPT 1 end_FLOATSUPERSCRIPT11footnotemark: 1 Chengji…...
LVS高可用负载均衡
一、项目图 二、主机规划 主机系统安装应用网络IPclientredhat 9.5无NAT192.168.72.115/24lvs-masterredhat 9.5ipvsadm,keepalivedNAT192.168.72.116/24 VIP 192.168.72.100/32lvs-backupredhat 9.5ipvsadm,keepalivedNAT192.168.72.117/24 VIP 192.168…...
Kafka延迟队列实现分级重试
技术方案 方案背景 Kafka队列消息消费处理过程中,发生处理异常,需要实现重试机制,并基于重试次数实现不同延迟时间重试方案。 方案介绍 通过实现Kafka延迟队列来实现消息重试机制。 目标: 支持所有业务场景的延迟重试支持多…...
谷粒微服务高级篇学习笔记整理---异步线程池
多线程回顾 多线程实现的4种方式 1. 继承 Thread 类 通过继承 Thread 类并重写 run() 方法实现多线程。 public class MyThread extends Thread {Overridepublic void run() {System.out.println("线程运行: " Thread.currentThread().getName());} }// 使用 pub…...
3.第二阶段x64游戏实战-分析人物移动实现人物加速
免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 本次游戏没法给 内容参考于:微尘网络安全 上一个内容:2.第二阶段x64游戏实战-x64dbg的使用 想找人物的速度,就需要使用Ch…...
MQTT 服务器(emqx)搭建及使用(一)
一. EMQX 服务器搭建 1.下载EMQX 下载链接:Windows | EMQX 文档 官方手册 2.下载内容解压至盘符根目录 3.进入bin文件夹,在地址栏输入cmd 4.依次输入下面命令安装服务 .\emqx.cmd install .\emqx.cmd console 5.设置自启动 创建批处理文件&#x…...
什么是SSE和websocket
以下是 SSE(Server-Sent Events) 和 WebSocket 在大模型(如 ChatGPT)流式输出中的实际例子对比,包含代码实现和场景分析: —### 1. SSE(Server-Sent Events)#### 场景 大模型生成文本…...
蓝桥杯专项复习——二分查找、二分答案
目录 二分查找、二分答案基础知识 二分查找模版 【模版题】数的范围 借教室 二分查找、二分答案基础知识 二分模版 二分查找 【模版题】数的范围 输入样例 6 3 1 2 2 3 3 4 3 4 5输出样例 3 4 5 5 -1 -1 思路: 对应两个模版,起始位置是对应第一…...
Android学习总结之Kotlin 协程
一、引言 在 Android 开发中,异步任务处理是绕不开的话题。传统的线程、Handler、AsyncTask 等方案要么过于繁琐,要么存在生命周期管理问题。Kotlin 协程的出现,以优雅的语法和强大的结构化并发能力,成为解决异步编程难题的理想方…...
docker的与使用
1 docker初体验 1.1 docker简介 问题:为什么会有docker出现? 一款产品从开发到上线,从操作系统,到运行环境,再到应用配置。作为开发运维之间的协作我们需要关心很多东西,这也是很多互联网公司都不得不面对…...
解决ubuntu18.04无法进入系统桌面
解决ubuntu18.04无法进入系统桌面 解决ubuntu18.04无法进入系统桌面前言1、原因2、解决现象总结 前言 Vmware虚拟机运行跑Linux项目,没有关掉运行的进程就关机,导致系统无法进入系统桌面,一直卡在系统的初始化界面,按下快捷键发…...
Docker学习之容器虚拟化与虚拟机的区别(day11)
文章目录 前言一、问题描述二、具体内容1. 虚拟机(VM)2. 容器虚拟化(Docker)容器虚拟化的核心技术 三、总结1. 资源占用对比2. 适用场景3. 结论 前言 在现代软件开发和部署过程中,Docker 和虚拟机(VM&…...
无人机数据链技术及运行方式详解!
一、无人机数据链技术要点 1. 通信传输技术 频段选择: 常用频段包括 L波段(1-2 GHz)、C波段(4-8 GHz)、Ku/K波段(12-40 GHz),不同频段在传输距离、带宽和抗干扰性间权衡。 低…...
【JavaEE】MyBatis - Plus
目录 一、快速使用二、CRUD简单使用三、常见注解3.1 TableName3.2 TableFiled3.3 TableId 四、条件构造器4.1 QueryWrapper4.2 UpdateWrapper4.3 LambdaQueryWrapper4.4 LambdaUpdateWrapper 五、自定义SQL 一、快速使用 MyBatis Plus官方文档:MyBatis Plus官方文档…...
设计模式 三、结构型设计模式
一、代理模式 代理设计模式(Proxy Design Pattern)是一种结构型设计模式,它为其他对象提供了一个代理,以控制对这个对象的访问。 代理模式可以用于实现懒加载、安全访问控制、日志记录等功能。简单来说,代理模式 就是通…...
视频编码器的抉择:x264、x265、libaom、vvenc 对比测试实验
264、x265、libaom、vvenc 对比测试实验 测试机器配置:Apple M1 Pro -16G编码器版本(选择自己编译):所有源码都是当前最新更新的状态,此外各类编码具体的编译过程可参考我的相关系列博客。 编码器GitHubx264git clon…...
JMeter脚本录制(火狐)
录制前准备: 电脑: 1、将JMeter证书导入,(bin目录下有一个证书,需要安装这个证书到电脑中) 2、按winr,输入certmgr.msc,打开证书,点击下一步,输入JMeter证书…...
10、Linux C 网络编程(完整版)
1、网络发展历史和分层 1.1 Internet 的历史 起源: 1957 年:苏联发射第一颗人造卫星 "Sputnik"。 1958 年:美国总统艾森豪威尔成立 DARPA(国防部高级研究计划署)。 1968 年:DARPA 提出 "…...
拼多多 anti-token unidbg 分析
声明: 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 逆向分析 版本7.3-7.4 都试过加密没什…...
Swoole 的 Hyperf 框架和 Go 的 Gin 框架高并发原理以及技术实现对比分析
Swoole 的 Hyperf 框架和 Go 的 Gin 框架虽然都支持高并发,但它们的实现原理、底层机制和适用场景有显著差异。以下从 高并发原理、技术实现区别、优缺点 三个方面详细分析: 一、高并发实现原理 1. Hyperf (PHP Swoole) Hyperf 的高并发能力基于 Swoo…...
CSS3学习教程,从入门到精通,CSS3 媒体查询实现响应式布局语法指南(21)
CSS3 媒体查询实现响应式布局语法指南 一、媒体查询核心语法 1. 基础语法结构 media 媒体类型 and (媒体特性) {/* 匹配条件时应用的CSS规则 */ }2. 媒体类型(可省略) 类型值说明all所有设备(默认值)screen屏幕设备print打印机…...