比赛管理
比赛生命周期
- 创建比赛:配置名称、时间、flag 前缀、队伍规模等基础信息
- 添加题目:从全局题库选择并加入比赛,可覆盖比赛特定参数
- 配置计分:为每个 flag 设置计分类型和参数
- 镜像预热:比赛开始前 30-60 分钟拉取镜像到所有节点
- 参赛管理:比赛中管理队伍、发布公告、处理作弊
- 赛后处理:收集 Writeup、导出数据
比赛状态切换
平台根据 start 和 duration 字段自动切换状态,无需手动操作:
队伍管理
通过 GET /admin/contests/:contestID/teams(admin:team:list)查看所有队伍。
批量靶机控制
通过 POST /admin/contests/:contestID/victims 和 DELETE /admin/contests/:contestID/victims(admin:victim:control
)批量启动/停止该比赛的所有靶机。
流量捕获
管理员可为指定队伍的靶机下载流量捕获文件:
需要 admin:contest_traffic:read 权限。下载的 pcap 文件可用 Wireshark 分析。
公告发布
通过 POST /admin/contests/:contestID/notices(admin:notice:create)发布公告,参赛者可在比赛公告页面实时查看。
镜像预热
通过 POST /admin/contests/:contestID/images(admin:image:pull)触发将该比赛所有题目的容器镜像预拉取到各 Kubernetes
节点,避免比赛开始时因拉取镜像导致延迟。
Tip
建议在比赛开始前 30-60 分钟执行镜像预热。
Writeup 收集
选手上传 Writeup 后,管理员可通过以下方式访问:
作弊检测
详见作弊检测。通过 POST /admin/contests/:contestID/cheats 可手动重新运行一次全量作弊检测。
排行榜
管理员视角排行榜通过 GET /admin/contests/:contestID/rank 查看(admin:contest:rank),功能与选手视图相同但不受隐藏比赛限制。
