CTF靶场搭建及Web赛题制作与终端docker环境部署
写在前面
╔══════════════════════════════════════════════════════════════════════════╗
哈喽大家好!我是Myon,趁着我的云服务器还没过期,这次给大家出一期很详细的CTF比赛的靶场搭建以及关于Web赛题的制作与docker环境的部署教程,由于本人能力有限,也只能给大家讲一些基础简单的东西,欢迎大家在评论区互相交流学习,希望通过这篇博客大家能学到一些新东西,也期待大家的关注和支持!
╚══════════════════════════════════════════════════════════════════════════╝
**因为这种CTF的靶场我之前搭过,如果你们看过我之前写的博客就知道,之前介绍的是单纯基于CTFd搭建,而这次是基于H1ve(这个外观看着更好)。**我们学校上次的CTF比赛就是我负责搭建和运维的,以及Pwn和Web赛题的环境部署,后面我会一并介绍。
先给大家看一下成品效果图
首页:
排行:
challenges:
公告:
写这篇博客主要是对之前一些内容的补充和总结吧,如果在阅读过程中有不懂的也欢迎大家参考我前面的文章,在《网站搭建》专栏里,再次感谢大家的支持和关注!
文章开始前给大家分享一个学习人工智能的网站,通俗易懂,风趣幽默
人工智能[这里是图片006]https://www.captainbed.cn/myon/
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
使用服务器:centos8 OK正文开始
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
目录
Part1、CTF靶场搭建
1、从github上克隆H1ve
2、安装 docker
3、安装 python-pip?
4、安装 docker-compose?
5、拉取镜像并启动 Single Mode
6、将H1ve整个目录下的所有容器设置为自启动
Part2、Web赛题制作与终端docker环境部署
1、题目文件的制作
(1)files文件夹
(2)Dockerfile
?(3)docker-compose.yml
2、docker环境部署
3、赛题前端部署
4、终端赛题运维
Part1、CTF靶场搭建
如果是新的服务器是没有git命令的,我们先安装
yum install git
1、从github上克隆H1ve
位置大家随便放就行了,我这里是在root目录下创了一个Myon的文件夹然后克隆到里面
git clone https://github.com/D0g3-Lab/H1ve.git
克隆好之后,我们还需要先安装一些东西
设置yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
2、安装 docker
yum install -y docker-ce
看到complete代表安装完成
我们查看一下docker的版本并设置开机自启动
docker versionsystemctl start dockersystemctl enable docker
接着我们安装 docker-compose
(这个docker-compose命令在后面拉取镜像以及赛题的环境时会经常用到)
3、安装 python-pip
注意这里默认安装的pip会导致一个错误,先不要执行下面命令,先看后面的报错解释
默认安装的是Python2.7的版本,而这里我们需要Python3版本的pip
yum -y install epel-releaseyum -y install python-pip
看到complete则代表安装成功,我们也可以使用命令检查一下
pip -V
但是当我们尝试安装docker-compose 时就会遇到报错
pip install docker-compose -i https://pypi.tuna.tsinghua.edu.cn/simple
大概意思就是我们的pip版本太老了,找不到合适的docker-compose 版本满足
尝试升级pip版本
pip install --upgrade pip -i https://pypi.tuna.tsinghua.edu.cn/simplepip install --upgrade pip
但是大概率你们会遇到以下的报错:
Could not find a version that satisfies the requirement docker-compose (from versions: )
No matching distribution found for docker-compose
You are using pip version 8.1.2, however version 23.3.1 is available.
You should consider upgrading via the ‘pip install --upgrade pip’ command.
解决方法:安装python3的pip
由上面pip -v我们知道默认安装的是Python2.7的版本
因此这里我们安装Python3的pip并且进行升级
yum install python3-pippip3 install --upgrade pip
可以看到 pip 成功升级到21.3.1
之后的pip操作都用pip3代替
4、安装 docker-compose
pip3 install docker-compose -i https://pypi.tuna.tsinghua.edu.cn/simple
可以看到安装成功,至于那个warning不用管它
接下来我们进入到之前克隆好的H1ve目录下
修改配置文件
(这一步最好先不要操作,因为我不确定后面的报错是否与这步有关,建议先尝试直接进行后面的镜像拉取操作,如果有问题可以尝试删掉H1ve再次克隆)
sed -i 's/mariadb:10.4/mariadb:10.4.12/g' single.ymlsed -i 's/mariadb:10.4/mariadb:10.4.12/g' single-nginx.yml
5、拉取镜像并启动 Single Mode
docker-compose -f single.yml up
遇到如下的报错:
ERROR: manifest for mariadb:10.4.12.12.12.12 not found: manifest unknown: manifest unknown
这种情况意思是docker需要我们指定下载镜像的版本号
但是我并没有找到解决办法,因此我替换了它的single.yml文件
然后就可以拉取了(我怀疑是前面修改配置文件导致的)
之后访问 8000 端口
填写好基本信息后,即可加载出下图所示页面
于是我删掉了H1ve重新克隆进行测试
确定是否因为修改配置文件导致single.yml出了问题
克隆好之后什么都不要做,进入目录直接拉取,居然成了
接着尝试拉取Single-Nginx Mode
docker-compose -f single-nginx.yml up
这里可以拉取成功但是无法访问
修改配置文件进行验证,发现也可以拉取成功
就很奇怪了,当然不排除是我拉取之前的版本时对我刚从github上克隆下来的版本环境这些有影响
总的来说给大家的建议就是克隆好之后先直接尝试拉取镜像(后面测试,不需要设置配置文件也是可以拉取成功的,具体还是要看你自己服务器的环境配置),操作错误也可以尝试删除H1ve之后重新克隆。
顺便说一下,你们还需要确保用到的端口那些是允许的,在服务器的安全组规则里面设置。
当然如果你希望直接访问ip就到靶场,那么这里可能需要设置代理转发,将80端口转发到8000。
(在我之前讲的完全基于CTFd搭建的那个里是不需要的,直接访问ip即是靶场首页)
具体内容可以参考我之前的博客:《基于云服务器的博客和靶场搭建-经验教训》
我们需要将与H1ve有关的容器都开启并设置为自启动
查看容器
docker ps -a
启动容器
docker start 容器名
6、将H1ve整个目录下的所有容器设置为自启动
docker update --restart=always $(docker ps -aq)
查看开启的容器
docker ps
现在我们不用再拉取镜像,直接访问靶场地址+端口号即可,靶场将一直处于开启状态
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
接下来进入第二部分
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Part2、Web赛题制作与终端docker环境部署
为了方便测试,我这里将服务器的所有端口都开放了,你们可以根据题目所在的端口自行添加
1、题目文件的制作
每个网页它至少应该包含一个index.php或者index.html(首页文件)
我们先做一个最简单的web题,比如将flag藏在一个网页的源码里
该文件命名为index.php,内容如下图
内容可能看着复杂,其实它就是一个页面而已。
(1)files文件夹
这样我们的题目文件就有了,新建一个文件夹files,将这个文件index.php放到files目录下
(为什么文件夹叫files,因为后面我会给你们两个模版文件,按照我说的来就行)
当然如果你会自己写Dockerfile和docker-compose.yml,那么你可以自己想怎么来就怎么来。
我让ChatGPT写过,是可行的,但是这里我主要是讲基础的套路方法,所以给你们模版,按照我说的来,你就可以部署简单的web赛题。
除了files,我们还需要另外两个文件:
(2)Dockerfile
(这个文件你可以直接用,不用修改)
内容如下:
FROM php:5.6-fpm-alpineRUN rm -rf ar/wwwml/*COPY ./files ar/wwwmlEXPOSE 80WORKDIR ar/wwwml
CMD ["php", "-S", "0.0.0.0:80"]
(3)docker-compose.yml
(这个文件需要将端口修改为你自己题目部署在的端口)
内容如下:
version: "2"services:web:build: .restart: alwaysports:- "0.0.0.0:8001:80"environment:- FLAG=Myon{s0_eaSyest_wEb_fl2}
关于第二个文件内容解释:
0.0.0.0:8001:80 # 题目部署在8001端口,选手访问8001端口即可访问到题目环境
80是ngnix所在端口,具体取决于自己环境,一般都是在80,当然我之前部署Pwn赛题时遇到过其他问题,需要修改配置文件的,具体你们可以参考我之前的博客:
**《基于CTFTraining在CTFd部署Web题目》**和
《基于xinetd部署pwn题(百分百搭成并且可以nc靶场地址)》
FLAG=Myon{s0_eaSyest_wEb_fl2} # 这个其实后面我发现它似乎没什么影响,因为正确的flag是你自己放在文件里的,除非题目是那种与环境变量有关系的可能会影响,因此保险起见,你可以把这里的FLAG值改为自己题目的flag值,只是为了进一步确保一致。
其他内容保持不变。
将上述文件:files、Dockerfile、docker-compose.yml 统一放进一个新的文件夹
为了方便记忆和运维,我喜欢以题目名字来命名,比如就叫 f12 (查看源码的题)
这样我们web赛题的文件就都准备好了,将f12这个文件夹放入终端
我这里先建了一个testctf的文件夹,里面用来存放CTF赛题
新建文件夹的命令
mkdir 文件夹名
传文件的话我比较喜欢用xftp,直接拉动或者粘贴复制
2、docker环境部署
进入f12这个目录,使用命令拉取镜像
docker-compose up -d
拉取成功后,使用命令查看该容器
docker ps
访问该题目所在端口,这里是8001
使用F12,在网页源码里找到flag
3、赛题前端部署
那么关于赛题如何放上去,添加到我们靶场的前端,设置flag,分数这些,在我博客《基于CTFTraining在CTFd部署Web题目》里面已经详细讲过,这里就不再赘述。
http://t.csdnimg.cn/TRiOo
链接应该会过期,你们直接搜索我博客的名字即可找到,或者在《网站搭建》的专栏里面
此外,我这里还有一些其他类型的Web题的源码,小游戏、基本传参、php反序列化、命令执行、文件上传、php绕过、信息泄露这些题搭建起来还是很容易的,欢迎大家找我交流讨论。
sql注入的话就需要结合数据库了,有些题的源码也可以让ChatGPT帮写。
4、终端赛题运维
如果我们部署docker环境时遇到问题,比如无法访问,或者有些文件信息没有修改,但是又已经拉取了题目的镜像环境,那么我们就需要先删除这个容器,然后重新拉取:
查看题目容器名字
docker ps
使用命令删除有问题的容器
docker rm -f 容器名
此时题目页面已经无法访问
但是,重点来了,我们还能直接使用docker-compose up -d去拉取吗
这样操作是不行的,拉取之后你会得到一个与你删除前一样的容器,尽管你已经修改了文件内容
这个问题还是可以看我之前的博客《基于xinetd部署pwn题(百分百搭成并且可以nc靶场地址)》
http://t.csdnimg.cn/3QPno
因为docker搭建的是一个容器,你可以理解为一个独立的环境,里面的文件所在路径这些是不一样的。为什么我们敢把漏洞直接部署在自己的服务器上,正因为docker的安全性还是很强的,当然也可能存在docker容器逃逸到本地,但是一般用docker搭建的东西还是很安全的,就算容器里的东西被打烂了,也不会影响到你服务器本地的东西,它是一个单独的环境。
要想真正替换掉题目环境,正确的操作有两种:
方法一:重命名题目文件夹(比如f12改为F12)使用mv命令
当然你需要确保你重命名的名字是未被拉取过镜像的名字,即一个全新的名字
mv f12 F12
这个时候,我们进入到F12进行镜像拉取,也是使用
docker-compose up -d
方法二:删除所有未使用的网络,未使用的网络是不被任何容器引用的网络。
docker network prune
因为这个网络原本的容器已经被我们删除了,但是它的网络还存咋,但是未被容器引用,所以需要先清除掉,之后再进行镜像拉取才会拉取到你修改后的文件内容。
建议使用方法二,不过也可以用重命名的方法,等未使用的网络堆积一段时间后再统一进行清除。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
文章至此结束 希望你们看完有所收获 期待大家的关注与支持
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
相关文章:
CTF靶场搭建及Web赛题制作与终端docker环境部署
写在前面 ╔══════════════════════════════════════════════════════════════════════════╗ 哈喽大家好!我是Myon,趁着我的云服务器还没过期,这次给大家出一…...
Java 应用程序CPU 100%问题排查优化实战
🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/literature?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,…...
计网(王道的总结)-数据链路层-网络层-传输层
由于时间有限,把每个王道的章节最后一节放在一起,分别看看复习知识点。 3.6.4 IEEE 802.11 无线局域网 重点: 3.7 广域网 真题考频:极低 3.8以太网交换机 4.1网络层的功能 4.2.1IPv4分组 最重要的: TTL:…...
1-4 C单向链表
目录 1.0 基本概念 2.0 初始化链表 2.0 插入数据 3.0 删除数据 4.0 获取链长度 5.0 查询链表 6.0 返回第一个节点 7.0 打印链表节点 8.0 释放内存 9.0 链表调用 1.0 基本概念 线性表的顺序存储:用一块连续的内存空间,线性表的链式存储ÿ…...
在Windows 10中使用SSH远程连接服务器(附花生壳操作方法)
SSH 在 linux 中是一种重要的系统组件,用户可以使用 SSH 来远程连接 linux 系统的计算机,或者传输文件。不过在 win10 以前,windows 并不原生支持 SSH,需要借助第三方工具来使用 SSH 功能。而实际上,微软在 2015 年就曾…...
韶音科技嵌入式面试题及参考答案
Bootloader 的启动流程是什么? Bootloader 是在操作系统内核运行之前运行的一段小程序。它的启动流程主要分为以下几个阶段。 首先是硬件初始化阶段。这个阶段会对处理器以及一些关键的硬件设备进行初始化。比如,会配置处理器的工作模式、设置堆栈指针等…...
C++ ——— 类的 6 个默认成员函数之 构造函数
目录 何为默认成员函数 一、构造函数 构造函数的概念 构造函数的特性 日期类的构造函数 栈的构造函数 编译器自动生成的构造函数 总结 何为默认成员函数 默认成员函数就是用户没有显示实现,但是编译器会自动生成的成员函数称为默认成员函数 一、构造函数 …...
【优选算法篇】:揭开二分查找算法的神秘面纱--数据海洋中的精准定位器
✨感谢您阅读本篇文章,文章内容是个人学习笔记的整理,如果哪里有误的话还请您指正噢✨ ✨ 个人主页:余辉zmh–CSDN博客 ✨ 文章所属专栏:c篇–CSDN博客 文章目录 一.二分查找算法二.算法模板模板一模板二模板三 三.例题演练1.x的平…...
【机器学习算法】——数据可视化
1. 饼图:显示基本比例关系 import matplotlib.pyplot as pltplt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False# ——————————————————————————————————————————————————————…...
比特币与区块链原理解析:矿机挖矿与去中心化的未来
✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢,在这里我会分享我的知识和经验。&am…...
SpringBoot教程(十四) SpringBoot之集成Redis
SpringBoot教程(十四) | SpringBoot之集成Redis 一、Redis集成简介二、集成步骤 2.1 添加依赖2.2 添加配置2.3 项目中使用之简单使用 (举例讲解)2.4 项目中使用之工具类封装 (正式用这个)2.5 序列化 &…...
Qt之第三方库QCustomPlot使用(二)
Qt开发 系列文章 - qcustomplot(二) 目录 前言 一、Qt开源库 二、QCustomPlot 1.qcustomplot介绍 2.qcustomplot下载 3.qcustomplot移植 4.修改项目文件.pro 5.提升QWidget类 三、技巧讲解 1.拖动缩放功能 2.等待更新 总结 前言 Qt第三方…...
机器学习决策树原理详解
一、引言 在当今蓬勃发展的人工智能与大数据领域,大模型正以前所未有的影响力改变着众多行业的格局。而决策树作为机器学习算法家族中的经典成员,以其简洁直观的特点和广泛的适用性,不仅能独立解决诸多实际问题,更是诸多先进大模…...
深入探索JavaScript循环语句:从基础到高级应用
深入探索JavaScript循环语句:从基础到高级应用 在前端开发中,JavaScript 的循环语句是构建动态和交互式网页的关键工具。本文将全面介绍 JavaScript 中的几种主要循环语句,包括 for、while、do...while 以及 for...in 和 for...of࿰…...
从0开始深度学习(35)——YOLO V5原理详解
以YOLO V5s为例,介绍YOLO V5的网络结构,以及其中具体的功能模块 1 YOLO V5的整体网络结构 YOLO V5网络结构分为四个部分: 输入端: 输入端负责对输入图像进行预处理,包括数据增强、锚框计算等。骨干网络(Ba…...
高级数据库模式设计与性能优化
数据库模式设计不仅仅是创建表和字段那么简单,还需要考虑数据的一致性、性能优化、安全性和可扩展性等多个方面。本文将深入探讨数据库模式设计的高级技巧,并提供一个实际的例子来展示如何在项目中应用这些技巧。 1. 数据库模式设计的高级技巧 1.1 多对…...
【开源免费】基于SpringBoot+Vue.JS图书进销存管理系统(JAVA毕业设计)
博主说明:本文项目编号 T 082 ,文末自助获取源码 \color{red}{T082,文末自助获取源码} T082,文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析…...
监控易助力扩容1000个点位
铁路交通作为城市发展的重要动脉,其IT系统的稳定运行对于保障铁路运输的安全与高效至关重要。近期,四川某铁路用户为了进一步提升IT基础资源的监控和管理水平,决定对现有的运维体系进行扩容升级,引入了监控易一体化运维软件&#…...
克服大规模语言模型限制,构建新的应用方法——LangChain
大模型 大模型的出现和落地开启了人工智能(AI)新一轮的信息技术革命,改变了人们的生 活方式、工作方式和思维方式。大模型的落地需要数据、算力和算法三大要素。经过几 年发展,大模型的数据集(包括多模态数据集)制作已经形成了规约,Meta、Go…...
MacOS 下 pico/pico2 学习笔记
1.安装开发工具 cmake brew install cmakeopenocd brew install openocdarm-none-eabi-gcc 用 brew 安装的版本会出现如下错误: arm-none-eabi-gcc: fatal error: cannot read spec file nosys.specs: No such file or directory用 arm 官方的版本没有问题。 cd …...
Leetcode 每日一题 1.两数之和
目录 问题描述 示例 示例 1 示例 2 示例 3 提示 解决方案 算法思路 过题图片 代码实现 复杂度分析 注意事项 题目链接 结论 问题描述 给定一个整数数组 nums 和一个目标值 target,请你找出数组中和为目标值的那两个整数,并返回它们的数组下…...
柯桥职场商务英语生活英语口语培训外贸纺织口语学习
"等一下"该怎么说? 大家应该都知道,wait a moment是一个祈使句,祈使句就难免带有命令的口吻,还有点不耐烦。 如果你把“等一下”说成wait a moment,外国人多半认为你是个傲慢无礼的人。毕竟在他们看来wait a…...
ElasticSearch如何做性能优化?
大家好,我是锋哥。今天分享关于【ElasticSearch如何做性能优化?】面试题。希望对大家有帮助; ElasticSearch如何做性能优化? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在 Elasticsearch 中,性能优化是…...
深度学习常用损失函数介绍
均方差损失(Mean Square Error,MSE) 均方误差损失又称为二次损失、L2损失,常用于回归预测任务中。均方误差函数通过计算预测值和实际值之间距离(即误差)的平方来衡量模型优劣。即预测值和真实值越接近&…...
PSHuman 部署笔记
目录 github地址: 依赖项: xformers安装: 解决方法,安装xformers smpl_data下载: 推理步骤: SMPLDataset 香港科技大学提出了一种叫PSHuman的新框架。这个方法利用了一个多视角扩散模型的“先验知识…...
怎么样能使Ubuntu的文件浏览器显示当前目录的路径,而不是只显示一个文件名?
默认情况下Ubuntu的文件浏览器是只显示当前目录的目录名的,这很不便我们查看路径或直接利用路径进行定位,那么怎么样能使Ubuntu的文件浏览器显示当前目录的路径呢? 两种方法: 第1种-临时方法 按下快捷键 Ctrl L,导航…...
自回归模型(AR )
最近看到一些模型使用了自回归方法,这里就学习一下整理一下相关内容方便以后查阅。 自回归模型(AR ) 自回归模型(AR )AR 模型的引入AR 模型的定义参数的估计方法模型阶数选择平稳性与因果性条件自相关与偏自相关函数优…...
工具推荐-js爬取工具
现在测试方向都偏向于从js中的接口来入手找到可以进的点,关于快速扫描js文件来发现敏感接口的工具有很多,下面的jjjjs就是其一 项目地址: GitHub - ttstormxx/jjjjjjjjjjjjjs: 爬网站JS文件,自动fuzz api接口,指定api接口&#x…...
CSS学习记录05
CSS外边距 CSS margin属性用于在任何定义的边框之外,为元素周围创建空间。通过CSS,您可以完全控制外边距,一些属性可用于设置元素每侧(上、右、下和左)的外边距。 Margin - 单独的边 CSS拥有用于为元素的每一侧指定…...
差异基因富集分析(R语言——GOKEGGGSEA)
接着上次的内容,上篇内容给大家分享了基因表达量怎么做分组差异分析,从而获得差异基因集,想了解的可以去看一下,这篇主要给大家分享一下得到显著差异基因集后怎么做一下通路富集。 1.准备差异基因集 我就直接把上次分享的拿到这…...
ISO 45001 职业健康安全管理体系的实施具有多方面的重要意义
对企业的意义 提升企业形象:实施 ISO 45001 体系体现了企业对员工职业健康安全的重视和承诺,有助于树立良好的企业形象,增强企业在社会公众、客户、投资者等方面的认可度和美誉度,提升企业的市场竞争力。增强员工满意度和忠诚度&a…...
HarmonyOS-中级(三)
文章目录 合理使用动画和转场Web组件和WebView给应用添加通知和提醒 🏡作者主页:点击! 🤖HarmonyOS专栏:点击! ⏰️创作时间:2024年12月08日12点12分 合理使用动画和转场 动效场景设计&#x…...
报错:Invalid HTTP method: PATCH executing PATCH http://XXX.XXX
分析: 问题在于我使用feignclietn调用PatchMapping方法时,发送的 PATCH 请求方法出现了不匹配的情况。虽然说springboot自带了RESTful风格的方法(GET、POST、PUT、DELETE、PATCH,但是PATCH相较于前几个来说算是新的HTTP方法&#…...
Open WebUI项目源码学习记录(从0开始基于纯CPU环境部署一个网页Chat服务)
感谢您点开这篇文章:D,鼠鼠我是一个代码小白,下文是学习开源项目Open WebUI过程中的一点笔记记录,希望能帮助到你~ 本人菜鸟,持续成长,能力不足有疏漏的地方欢迎一起探讨指正,比心心~…...
WPF Prism 01-BootstrapperShell
Prism介绍 Prism 是一个用于在 WPF、.NET MAUI、Uno 平台和 Xamarin Forms 中构建松耦合、可维护和可测试的 XAML 应用程序的框架。每个平台都有单独的发布版本,并且这些版本将在独立的开发时间线上进行开发。Prism 提供了一组设计模式的实现,这些模式有…...
在Ubuntu22.04 jammy下用qemu模型riscv32环境装鸿蒙(未完成,待续)
在使用实体ESP32C3 安装鸿蒙失败后,就是这个:完全按照手册win10里装Ubuntu 虚拟机然后编译ESP32(主要是想针对ESP32C3和S3)开发板的鸿蒙系统(失败)-CSDN博客转向用qemu模拟环境装鸿蒙 学习手册riscv32_virt/README_zh.md OpenHar…...
第2章:CSS基本语法 --[CSS零基础入门]
CSS(层叠样式表,Cascading Style Sheets)是用来描述HTML或XML(包括各种XML:SVG, MathML 或 XHTML)等文档的外观和格式的语言。以下是CSS的基本语法: 1.选择器 1.元素选择器 元素选择器是基于HTML标签名称来选择元素的。当你使用元素选择器时,你是在告诉浏览器对页面…...
win11 恢复任务栏copilot图标, 亲测有效
1、修改C:\Windows\System32\IntegratedServicesRegionPolicySet.json,解除中国不能使用copilot的限制。 使用Notepad搜索copilot全文搜索,将下面两处的“CN,”删除,删除后如下: {"$comment": "Show Copilot on t…...
Python爬虫实战:抓取拼多多商品详情数据(基于pdd.item_get接口)
在当前的电商市场中,拼多多以其独特的拼团模式和优惠价格吸引了大量用户,成为继淘宝、京东之后的又一大电商平台。对于数据分析和市场研究者来说,获取拼多多的商品详情数据显得尤为重要。本文将介绍如何使用Python爬虫技术,通过调…...
如何在x86模拟器和鸿蒙API9如何使用MQTT模块ohos_mqtt
目录 引言 安装失败的原因 如何编译so文件的x86_64版本 下载源代码 安装NDK 代码编译 安装MQTT软件包 避免MQTT软件包自动升级 设置libs 客户端程序的编写 运行测试 结语 参考文献 引言 在上周的博客(如何在鸿蒙API9和x86模拟器中使用MQTT-CSDN博客&am…...
VB.NET 从入门到精通:开启编程进阶之路
摘要: 本文全面深入地阐述了 VB.NET 的学习路径,从基础的环境搭建与语法入门开始,逐步深入到面向对象编程、图形用户界面设计、数据访问、异常处理、多线程编程以及与其他技术的集成等核心领域,通过详细的代码示例与理论讲解&…...
芝法酱学习笔记(1.3)——SpringBoot+mybatis plus+atomikos实现多数据源事务
一、前言 1.1 业务需求 之前我们在讲解注册和登录的时候,有一个重要的技术点忽略了过去。那就是多数据源的事务问题。 按照我们的业务需求,monitor服务可能涉及同时对监控中心数据库和企业中心数据库进行操作,而我们希望这样的操作在一个事…...
图像处理插件:让小程序焕发视觉新生的秘密武器
在小程序开发中,图像处理是一个重要的环节,它涉及到图片的加载、显示、裁剪、压缩等多个方面。为了简化这一复杂过程,开发者通常会使用图像处理插件。这些插件不仅提供了丰富的图像处理功能,还封装了底层的图像操作逻辑࿰…...
力扣刷题TOP101: 27.BM34 判断是不是二叉搜索树
目录: 目的 思路 复杂度 记忆秘诀 python代码 目的: 给定一个二叉树根节点,请判断这棵树是不是二叉搜索树。 二叉搜索树满足每个节点的左子树上的所有节点均小于当前节点且右子树上的所有节点均大于当前节点。 思路 什么是二叉搜索树&am…...
Linux图形化工具推荐
1、MobaXterm MobaXterm Xserver with SSH, telnet, RDP, VNC and X11 - DownloadFree X server for Windows with tabbed SSH terminal, telnet, RDP, VNC and X11-forwarding - Downloadhttps://mobaxterm.mobatek.net/download.html 2、FinalShell FinalShell SSH工具,服…...
蓝队基础:企业网络安全架构与防御策略
声明 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,此文章为对视频内容稍加整理发布,文章所提到的网站以及内容,只做学习交流,其他…...
数据结构:栈
什么是栈: 栈是一种特殊的线性表,仅能在线性表的一端操作,栈顶允许操作,栈底不允许操作。 栈的特点是:先进后出,或者说是后进先出,从栈顶放入元素的操作叫入栈,取出元素叫出栈。 栈…...
tcp_recvmsg 函数
tcp_recvmsg 函数是 Linux 内核 TCP 栈的一部分,它主要用于处理从 TCP socket 接收数据的过程。这个函数的主要任务是从 TCP 接收队列中提取数据,并将这些数据拷贝到用户空间提供的缓冲区中。 以下是 tcp_recvmsg 函数的一般工作流程和功能解释: 函数签名和参数 int tcp_re…...
《数据结构》(应用题)
历年真题(09~24) 2009 最短路径(Dijkstra青春版) 【2009统考真题】带权图(权值非负,表示边连接的两顶点间的距离)的最短路径问题是找出从初始顶点到目标顶点之间的一条最短路径。假设从初始顶点…...
阿里内部正式开源“Spring Cloud Alibaba (全彩小册)”
年轻的毕业生们满怀希望与忐忑,去寻找、竞争一个工作机会。已经在职的开发同学,也想通过社会招聘或者内推的时机争取到更好的待遇、更大的平台。 然而,面试人群众多,技术市场却相对冷淡,面试的同学们不得不面临着 1 个…...