- 博客(79)
- 收藏
- 关注
原创 贡献Prometheus——从源码到运行(Day01)
本文记录了Prometheus监控系统的本地部署过程,主要包括源码获取、编译运行和健康检查三个步骤。首先通过git克隆源码并配置代理,然后进行编译和基础配置。文章还详细解释了配置文件中的关键参数含义,如scrape_interval和targets等。在问题解决部分,介绍了Node版本管理工具nvm的使用方法,并对比分析了npm、npx、全局node_modules和npm缓存的关系与区别。最后强调健康检查与指标抓取的本质差异,前者是基础存活检测,后者是详细监控数据分析。全文提供了从环境搭建到概念解析的完整
2026-01-05 20:11:30
737
原创 Golang(Handler入门)
本文深入解析Golang HTTP服务开发的三种核心实现方式:1)通过自定义结构体实现Handler接口;2)使用HandlerFunc类型适配普通函数;3)直接调用HandleFunc简化注册。文章从底层接口设计出发,展示了从基础实现到简化封装的演进过程,包含具体代码示例,帮助开发者理解Golang HTTP服务的本质实现原理。
2026-01-05 16:21:06
379
原创 open-webui+deepseek api实现deepseek自由
本文介绍了如何通过Open-WebUI优化使用DeepSeek AI的体验。首先需要配置与Open-WebUI兼容的Python虚拟环境,然后在DeepSeek平台充值获取API密钥。接着在Open-WebUI的管理员面板中输入API URL和密钥,即可在界面中看到新增的DeepSeek模型并开始使用。整个过程旨在改善官网体验,但需要注意API使用费用。
2025-03-08 22:20:13
750
原创 elasticsearch安装插件analysis-ik分词器(深度研究docker内elasticsearch安装插件的位置)
本文记录了在Docker中安装Elasticsearch 7.17.2并配置IK分词器插件的过程。首先下载了Elasticsearch和IK插件,然后通过Docker运行容器,设置内存参数和网络配置。进入容器后,使用elasticsearch-plugin命令安装IK插件,安装完成后检查了文件系统变化,确认插件已成功安装到config/analysis-ik目录下。整个过程展示了从环境搭建到插件安装的完整步骤,为后续使用Elasticsearch进行中文分词处理奠定了基础。
2025-02-07 19:42:59
1224
原创 CrackRTF
md5加密这一步其实可以饶绕过,直接看异或这一步。获取到一个rtf文件。获取到第二次的密码。然后输入两次的密码。注意rtf的文件头。
2023-10-31 11:09:02
311
原创 RSA加解密
本文介绍了RSA非对称加密算法的基本原理与实现过程。首先描述了密钥生成步骤:选择大质数p、q计算n,选择公钥e并计算私钥d。接着说明加密过程:将明文m转换为整数后计算密文C。然后给出了解密方法:使用私钥d还原明文。文章最后提供了Python代码示例,展示如何通过已知的p、q、e计算私钥d,并使用rsa库对加密文件进行解密。该摘要简明扼要地概括了RSA算法的主要流程和实现方式,重点突出了从公钥推导私钥并完成解密的技术要点。
2023-10-30 14:00:00
290
原创 Shellcode——绕过31
所以我想,那就吧所有小于31的加上31,然后运行的时候这部分代码自己修改自己。遇到了一道ctf题目,要求shellcode的每一个字节都必须大于31。也就是SMC,,简称自修改代码。
2023-10-26 22:51:24
658
原创 pwncollege基本使用与scp下载
本文介绍了使用SSH密钥连接Pwn College服务器的步骤:1) 使用ssh-keygen生成公私钥对(key为私钥,key.pub为公钥);2) 将公钥粘贴到服务器Settings的SSH Key中;3) 使用ssh -i key连接服务器。当连接成功后,可以通过scp命令下载挑战文件到本地,避免在线操作卡顿,特别是逆向工程题目建议下载到本地分析。示例下载指令为:scp -i key hacker@dojo.pwn.college:/challenge/文件路径 ./。
2023-07-25 15:43:46
1348
原创 安卓开发二三事儿
安卓开发中调用子模块的方法:在项目中新建模块并将源码和资源放入,在setting.gradle中添加include ':模块名',然后在主模块的build.gradle中添加依赖implementation project(':模块名')即可实现模块间的调用。这种方法简单直接,适用于大多数开发场景。
2023-07-13 21:14:44
289
原创 Java—Spring—BeanFactoryPostProcessor
摘要:该示例展示了Spring框架中BeanFactoryPostProcessor的用法。通过MyBeanFactoryPostProcessor在容器初始化后修改Bean定义,将userDao的实现类从UserDaoImpl改为UserServiceImpl。测试代码从容器获取三个Bean实例(userDao、userService、userService2)时,由于修改了Bean定义,三个实例实际都是UserServiceImpl类型。这验证了BeanFactoryPostProcessor可以在Be
2023-03-03 12:02:23
207
原创 PWN:partial overwrite
摘要:本文讨论了一个关于内存地址覆盖的调试技巧,建议关闭PIE保护后通过GDB调试查看后4字节内容,再编写脚本尝试覆盖。提供的Python脚本演示了如何构造payload进行地址覆盖攻击,利用十六分之一的概率快速触发目标地址。调试时需注意使用send而非其他发送方式以避免影响内存数据。
2022-10-19 20:47:26
293
原创 PWN:Bad Seed
感觉没什么太特殊的地方,都是把原本的代码拿过来用而已,所以就觉得这些东西,没什么意思。上面的代码是我从文章中自己摘出来的,然后自己看了看文章的解决方案写出的代码。第一题:破解下面的程序:random.c#include <stdio.h>#include <stdlib.h>#include <time.h> int main(){ srand((unsigned int)time(NULL)); int targetnum=rand
2022-03-01 19:03:21
356
原创 PWN:关于对Random函数的研究
random在CTF中经常出现,所以今天我想深度的研究这个函数。srand()函数原型:void srand(unsigned seed);给rand()函数设置种子。rand()函数原型在执行前,会先查看是否使用了srand()函数。1.使用了srand(seed),就按照这个东西来产生随机数。2.没有使用srand(seed),就默认使用了srand(1)来产生随机数。time函数原型:time_t time(time_t *timer)timer=NULL时得到当前日历时间(从1
2022-03-01 11:11:47
869
原创 Leetcode-198. 打家劫舍
自己一定要相信自己分析:假设只有一家可以打劫,那就偷窃这一家即可。假设有两家可以偷窃,那就偷窃两者中金额最大的那一家。假设有三家,那就比较偷窃第一家+第三家的金额之和和第二家的金额做比较,选最大的那个。设dp[i]是偷窃到当前人家的最大金额数。当前这家有两种选择:偷如果偷,那么前一家就不能偷,也就是dp[i-1]不能偷,得到的金额就是dp[i-1]+nums[i]。不偷如果不偷,那么前一家就可以偷,得到的金额就是dp[i-1].由此得到状态转移方程:dp[i]=
2022-02-07 12:01:21
285
原创 Leetcode-746. 使用最小花费爬楼梯
已经麻了,熟了,就巧了。边界问题研究,或者说,问题分析。有n层楼梯,从第一层或者第二层开始走,一次走一步或者两步,直到楼梯顶部,也就是第n+1层。那么对应下标是从0或1开始到n。对于这个记录数组来说基础值:dp[0]=dp[1]=0公式:dp[i]=min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2])式子什么意思?到达第i层,有两种可能,从第i-1层走一步,花费为dp[i-1]+cost[i-1]从第i-2层走两步,花费为dp[i-2]+cost[i-2]
2022-02-06 18:25:21
225
原创 Leetcode-70. 爬楼梯
这题秒杀,典型的动态规划。参考链接:Leetcode-1137.第 N 个泰波那契数就是一点,就是关于下标与顺序。class Solution {public: int climbStairs(int n) { //记录数组 vector<int> v; //基础值 v.push_back(1); v.push_back(2); //公式 //v[i]=v[i-1]+
2022-02-06 17:58:53
5965
原创 Bugku-清凉一夏
应该是套神的题目。解压后是一张图片,打开是一张二维码,扫一下:得到字符串:happyctf不知道什么意思。010我自己也看不懂,所以直接kali跑一下。binwalk分析一下,里面有别的内容。得到一个压缩包。打开是一张图片,被加密了。我们可以猜到密码就是扫码的到的字符串。解压成功。图片打开,什么也不显示。可能已经损坏。010看一下,缺少jpg文件头。插入三个字段即可。然后改为 FF D8 FF。图片显示成功:容易想到修改图片宽高。查找一下宽高。搜一下
2022-02-05 20:30:51
2625
原创 Bugku-社工-进阶收集
应该是套神的题目。首先打开压缩包,得到这样的一张图片:百度识图得知是西安大雁塔。高德地图西安地铁线路从始发站开始,经过七站,到达大雁塔的,只有这个韦曲南。我们来看韦曲南:以韦曲南地铁站为中心,以八百米为半径画圆。符合条件的只有:1.兰乔国际城2.广天苑小区然后自己试一试就知道答案是兰乔国际城。flag{lanqiaoguojicheng}...
2022-02-05 19:54:15
494
原创 Leetcode-1137.第 N 个泰波那契数
跟斐波那契数列基本一样。参考文章:斐波那契数列想都不想,直接秒杀:class Solution {public: int tribonacci(int n) { //记录的数组 vector<int> v; //基准值 v.push_back(0); v.push_back(1); v.push_back(1); //公式 //v[i]=v[i-1]+
2022-02-05 19:17:26
460
原创 Leetcode-509斐波那契数
斐波那契额数列。算是最简单的了。第一种:递归class Solution {public: int fib(int n) { if(n<2){ //这一步真是巧妙,我还一直担心,觉得n==0和n==1还要分开讨论, //结果,直接return n;什么心也不用操。 return n; }else{ return fib(n-1)+fib(n-2); }
2022-01-30 19:58:19
626
原创 Leetcode-121
动态规划,不会。硬着头皮上。官方的答案确实很厉害;找历史最低点(),然后计算今天卖得到的收益是多少。首先是找一个很大的值,假设第一天之前的历史最低点(注意不包括今天)为一个很大的值,这样对第一天而言,它的历史最低点是那个很大的值。然后从第一天开始遍历,此时我们已经知道了这一天的历史最低价格,就可以计算倘若今天卖出的收益是多少。计算后,结果肯定是个负值,和我们的初始设置的最大收益0比较,显然是小的,所以我们选择第一天不卖出。接着,我们算算下一天的历史最低价格。然后遍历完就可以了。class
2022-01-29 21:54:29
294
原创 CS:APP-3.2.2
复现mstore.c文件long mult2(long,long);void multstore(long x,long y,long *dest){ long t=mult2(x,y); *dest=t;}然后执行命令:$ gcc -Og -S mstore.c接着就生成了一个.s文件。文件可以直接打开,内容如下: .file "mstore.c" .text .globl multstore .type multstore, @functionmultstore:
2022-01-28 14:25:40
508
原创 set,map,unordered_set,unordered_map
我查了查:set和map底层是红黑树,unordered_set和unordered_map底层是哈希表。底层set,map红黑树unordered_set,unordered_map哈希表set和unordered_set,是集合,不能插入相同元素。set以红黑树为底层,自动排序。unordered_set以哈希表为底层,不会自动排序。map和unordered_mapmap以红黑树为底层,自动排序。unordered_map以哈希表为底层,不会自动排序。
2022-01-28 11:09:49
1284
原创 Leetcode-217
第一种方法:先试用C++内置算法sort来对数组进行排序,然后,从第一个元素开始两两比较,一旦出现相同的就返回true。class Solution {public: bool containsDuplicate(vector<int>& nums) { sort(nums.begin(),nums.end()); int size=nums.size(); for(int i=0;i<size-1;i++){
2022-01-27 18:32:14
162
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅
1