CTFd-Whale 项目教程
CTFd-Whale项目地址:https://gitcode.com/gh_mirrors/ct/CTFd-Whale
1. 项目的目录结构及介绍
CTFd-Whale 是一个用于 CTFd 平台的插件,允许用户为每个挑战启动独立的 Docker 实例。以下是项目的目录结构及其介绍:
CTFd-Whale/
├── admin.py
├── api.py
├── config.py
├── docker.py
├── __init__.py
├── models.py
├── templates/
│ └── admin/
│ └── plugins/
│ └── whale.html
├── utils.py
└── views.py
admin.py
: 管理界面相关的功能。api.py
: 提供 API 接口。config.py
: 配置文件处理。docker.py
: Docker 相关的操作。__init__.py
: 插件初始化文件。models.py
: 数据库模型定义。templates/
: 包含 HTML 模板文件。utils.py
: 工具函数。views.py
: 视图处理。
2. 项目的启动文件介绍
CTFd-Whale 的启动文件主要是 __init__.py
,这个文件负责插件的初始化和注册。以下是 __init__.py
的主要内容:
from CTFd.plugins import register_plugin_assets_directory
from CTFd.plugins.challenges import CHALLENGE_CLASSES
from . import views, api
def load(app):
app.register_blueprint(views.blueprint)
app.register_blueprint(api.blueprint)
register_plugin_assets_directory(app, base_path='/plugins/ctfd-whale/assets/')
CHALLENGE_CLASSES['dynamic_docker'] = 'ctfd_whale.models.DynamicDockerChallenge'
register_plugin_assets_directory
: 注册插件的静态资源目录。app.register_blueprint
: 注册蓝图,包括视图和 API。CHALLENGE_CLASSES
: 注册新的挑战类型dynamic_docker
。
3. 项目的配置文件介绍
CTFd-Whale 的配置文件主要是 config.py
,这个文件包含了插件的配置选项。以下是 config.py
的主要内容:
class WhaleConfig:
FRP_HTTP_DOMAIN = 'frp.example.com'
FRP_HTTP_PORT = 80
FRP_HTTP_SUBDOMAIN_HOST = 'challenges'
FRP_HTTP_SUBDOMAIN_SUFFIX = '.challenges.frp.example.com'
FRP_HTTP_SUBDOMAIN_WILDCARD = True
FRP_HTTP_SUBDOMAIN_ENABLED = True
FRP_HTTP_SUBDOMAIN_LENGTH = 8
FRP_HTTP_SUBDOMAIN_CHARSET = 'abcdefghijklmnopqrstuvwxyz0123456789'
FRP_HTTP_SUBDOMAIN_PREFIX = 'ctf'
FRP_HTTP_SUBDOMAIN_SUFFIX = '.challenges.frp.example.com'
FRP_HTTP_SUBDOMAIN_WILDCARD = True
FRP_HTTP_SUBDOMAIN_ENABLED = True
FRP_HTTP_SUBDOMAIN_LENGTH = 8
FRP_HTTP_SUBDOMAIN_CHARSET = 'abcdefghijklmnopqrstuvwxyz0123456789'
FRP_HTTP_SUBDOMAIN_PREFIX = 'ctf'
FRP_HTTP_SUBDOMAIN_SUFFIX = '.challenges.frp.example.com'
FRP_HTTP_SUBDOMAIN_WILDCARD = True
FRP_HTTP_SUBDOMAIN_ENABLED = True
FRP_HTTP_SUBDOMAIN_LENGTH = 8
FRP_HTTP_SUBDOMAIN_CHARSET = 'abcdefghijklmnopqrstuvwxyz0123456789'
FRP_HTTP_SUBDOMAIN_PREFIX = 'ctf'
FRP_HTTP_SUBDOMAIN_SUFFIX = '.challenges.frp.example.com'
FRP_HTTP_SUBDOMAIN_WILDCARD = True
FRP_HTTP_SUBDOMAIN_ENABLED = True