Labtainers:基于 Docker 的网络实验框架
Labtainers 包含 50 多个网络实验练习和用于构建自定义实验的工具。导入单个 VM 设备 或在 Linux 系统上安装,学生即可完成配置和管理设置,适用于当前及未来的实验练习。
- 通过 Docker 容器实现一致的实验执行环境和自动化配置
- 在性能适中的笔记本电脑上实现多组件网络拓扑
- 自动评估学生的实验活动和进度
- 个性化实验练习,防止学生共享答案
Labtainers 提供受控且一致的执行环境,学生完全在自己的计算机范围内完成实验,不受学生计算机上安装的 Linux 发行版和软件包的影响。Labtainers 可在我们的 [VM 设备][vm-appliancee] 上运行,也可在任何安装了 Docker 的 Linux 上运行。此外,Labtainers 还可作为基于云的 VM 使用,例如在 Azure 上,详见 学生指南。
安装和使用请参阅 学生指南,学生评估请参阅 教师指南。开发和自定义实验练习请参阅 设计者指南。
有关该框架的更多信息,请参阅 论文。
Labtainers 网站及下载(包括预装 Labtainers 的 VM 设备)位于 https://nps.edu/web/c3o/labtainers。
发行版创建时间:09/11/2026 11:33
修订版本:v1.4.4n
提交:9f1012dc
分支:master
内容
分发与使用
目录指南
支持
发行说明
分发与使用
请参阅 docs/license.md 文件 中的许可和分发信息。
目录指南
-
scripts/labtainers-student -- 用于运行和
测试学生实验的工作目录。你必须在该目录下才能运行
学生实验。
-
scripts/labtainers-instructor -- 用于
运行和测试自动评估以及查看学生
结果的工作目录。
-
labs -- 每个实验特有的文件
-
setup_scripts -- 用于安装 Labtainers 和 Docker 以及更新 Labtainers 的脚本
-
docs -- labdesigner.pdf 的 latex 源文件及其他文档。
-
UI -- Labtainers 实验编辑器源代码(Java)。
-
headless-lite -- 用于管理 Docker Workstation 和 Labtainers 云实例(没有原生 X11 服务器的系统)的脚本。
-
scripts/designer -- 用于构建新实验和管理基础 Docker 镜像的工具。
-
config -- 系统级配置设置(这些不是
实验特定的配置设置)。
-
distrib -- 分发支持脚本,例如用于将实验发布到 Docker hub。
-
testsets -- 测试过程和预期结果。(SimLab 的每个实验的驱动程序不
分发)。
-
pkg-mirrors -- 用于内部 NPS 软件包镜像的实用脚本,以减少测试和分发期间的外部
软件包拉取。
支持
请使用 GitHub 问题报告,或发送电子邮件至 [email protected]
另请参阅 https://my.nps.edu/web/c3o/support1
发行说明
标准 Labtainers 发行版不包含开发
新实验所需的文件。如需这些文件,请从 labtainer/trunk/setup_scripts 目录运行 ./update-designer.sh。
安装脚本和 update-designer.sh 脚本会设置环境变量,
因此你可能需要注销/登录,或在首次使用 Labtainers 之前
启动一个新的 bash shell。
2026 年 1 月 6 日
2025 年 12 月 30 日
- 将 checkwork 报告格式修改为垂直显示;无头模式的视频指南;便捷路径
2025 年 10 月 15 日
- 修订 packet-introspection 实验,更新 maxmind 地理位置数据库的链接,并注明使用旧版数据库。
2025 年 4 月 24 日
- 修复 imodule,使其根据 pull request #96 正确创建缺失的目录
2024 年 11 月 22 日
- 替换了 google cloud VM,这次是因为容器内 systemd 故障。
2024 年 9 月 23 日
- 替换了 google cloud VM,其使用了错误的 Docker 版本
2024 年 9 月 10 日
2024 年 7 月 26 日
- 修改 capinout,不再使用 grantpt clib 函数,该函数现在从容器中运行时似乎会崩溃。
2024 年 7 月 22 日
- 添加 Ubuntu22 的基础容器,并对框架进行更改以支持它。
2024 年 7 月 5 日
- 迁移到 Ubuntu 24 作为 VM 设备
- docker python 包使用了损坏的 python http 库,需要降级软件包。
- 使用虚拟 python 环境以避免 Ubuntu 对 python 软件包的锁定。
- 添加启动参数以允许在容器和 VM 之间共享 systemd。
- 重定向更新时损坏的 tar 工具产生的错误消息。
- Ubuntu 更新导致 msc 软件包损坏(参见 update-ubuntu.sh),针对版本 18 VM
- docker-compose 命令已损坏,请使用 "docker compose"
- 在无头 labtainers 中强制设置 socket 权限。
- 更新无头 Labtainers 以使用 Ubuntu 24
2023 年 11 月 27 日
- 为 ec2 机器上的 ubuntu22 添加 Google Cloud Platform 选项。
2023 年 9 月 18 日
2023 年 8 月 8 日
- 处理 DockerHub 镜像 json 格式的变更。感谢 Kees!
2023 年 4 月 17 日
- 强制使用最新的实验版本,例如使用 iptables2 而非 iptables。修复 tab 补全以仅显示最新版本。(Issue #77)
- CyberCIEGE 实验安装因 X11 竞态条件而失败。(Issue #76)
- 在 CyberCIEGE readme 中注明,引导学生将收集的日志保存到 $HOME 目录。(Issue #75)
- Radius 实验 checkwork 错误地报告 "radiusd not running",缺少 prestop 脚本。(Issue #74)
- 当使用 MACVLAN_EXT 选项时,Labedit 损坏了启动配置文件。(Issue #73)
2023 年 2 月 1 日
- 非默认用户的 Bash 历史记录未被保存。
2023 年 1 月 26 日
- 修改 gcloud 的 powershell 脚本,使用所选区域来限定 VM 名称。
2023 年 1 月 4 日
- 使用 systemd 的容器在 Ubuntu 22 中较新的 systemd 上失败
- 为 google cloud 脚本添加 --zone 参数,其值从 set_defaults 脚本派生。
2022 年 12 月 21 日
- 修复 xforge 结果标准,不再期望路径名,并添加检查以查看是否发出了 POST 来编辑配置文件。并修复攻击者
http 服务器以从主目录运行。
2022 年 12 月 19 日
- 添加 strace 实验以介绍系统调用跟踪。
- 如果 /tmp/.X11-unix 目录中有多个设备,X11 DISPLAY 值不正确。
- 使用不带参数的 python/bash/sh/etc 会导致 capinout 崩溃。
2022 年 12 月 9 日
- 修改 Azure vm 创建脚本,使用来自 Azure Community Gallery 的预构建 Labtainer VM 镜像。
- 云 VM 上的终端在启动期间或右键单击终端时因未知原因崩溃。尝试
通过启动/停止终端来解决。
2022 年 12 月 5 日
- 收集工件时,包含来自非默认用户目录的已修改文件,例如他们的 bash 历史记录。
- 修改 web 评估以显示新的 "其他用户" 文件。
- 在工件中包含每个容器上 .local/bin 中的文件。旨在使这些文件可通过 web 评估供教师使用。
- 在 ACL 实验中,将 /shared_data/bob/fun 文件包含在结果中,供教师参考。
- 捕获命令行中 "sh" 或 "bash" 的使用,并在解析给定命令时跳过,例如对 "time" 或 "sudo" 所做的那样。
- 在 tcpip 实验中,在后续实验会话期间无法 ssh 到服务器,/run/sshd 目录未被重新创建。
2022 年 11 月 16 日
- 修复 snort 实验中 Snort 手册的路径。
- 在 ossec 手册中,修复 manage_agents 的路径
2022 年 10 月 12 日
- Google cloud 从 gnome-terminal 命令中移除后台操作符,右键单击时仍会崩溃
但在运行 newterm.sh 后似乎稳定了。
2022 年 10 月 10 日
- 修复 Google cloud newterm.sh;将该启动磁盘扩展到 30G。
2022 年 9 月 20 日
- 在实验手册中注明 TCP/IP 实验的用户 ID 和密码。
2022 年 8 月 30 日
- 从容器的 .profile 设置 DISPLAY 时使用 X11 socket 名称
2022 年 8 月 9 日
- 修复 grader 中 processValueMax 函数的名称。Issue #63
2022 年 8 月 4 日
- labedit 程序使用错误的 JDK 重新构建,导致较旧的 JRE 无法运行 labedit
2022 年 7 月 18 日
- 在 IModules 中创建基于 Ubuntu20 的容器失败。Issue #61。
2022 年 3 月 23 日
- 修复 tap 锁目录的路径;此前导致使用网络 tap 的实验失败
- 更新 plc-traffic netmon 计算机,使其具有 java 环境中新 grassmarlin 所需的 openjfx
- 通过避免 chown -R 来加速实验启动,这在 docker 中非常慢。
- 再次尝试避免删除容器 /tmp 目录中的 X11 链接。
- 修复 webtrack 对访问站点的计数,并移除 live-headers 目标,该工具已不再可用。
澄清了一些实验手册步骤。
2022 年 3 月 2 日
- 添加新的 ssh-tunnel 实验(感谢 GWD!)
- 修复 labedit 未能反映 new_lab_setup 设置的 X11 值
- 添加不参数化容器的选项
2022 年 2 月 23 日
- 在添加新容器后,labedit 损坏了 start.config
- 学生 README 文件中学生指南的路径不正确;为云配置动态更改
- update-labtainer.sh 的扩展名不正确
- Msc 指南增强
- 更新 ghidra 实验以包含 Ghidra 10.1.2 版本
2022 年 2 月 15 日
- 将 Azure 云支持恢复为为每个学生进行配置。Azure 不鼓励共享资源。
2022 年 1 月 24 日
- Azure 云现在使用存储在 Azure blob 中的镜像,而不是为每个学生进行配置。
- 添加对 Google Cloud 的支持。
2022 年 1 月 19 日
- 在 Azure 云上引入 Labtainers。有关如何使用它的详细信息,请参阅学生指南。
2022 年 1 月 3 日
- 修订 setuid-env 实验以添加更好的评估;simlab 测试并避免 printenv 子进程中的 sighup。
- 修复评估目标计数指令,以排除结果标签值为 false 的情况。
- 当使用带有 debug 选项启动的 grader 运行 gradelab -a 时,不要求 labname。
- 修订 capinout(stdin/stdout 镜像)以处理命令进程子进程的孤儿化,改进文档
和错误处理。
- 添加首次运行实验时正在拉取的 docker 镜像的进度条显示。
- 向用户反馈容器初始化进度。
- pcap-lib 实验缺少自动评估所需的 notify 文件;从实验手册中移除多余步骤。
2021 年 11 月 23 日
- 在测试 VM 上禁用 ubuntu 弹出错误。
- 修复不同 DISPLAY 变量格式的处理。
2021 年 10 月 22 日
- 修订 tcpip 实验指南,注明成功的 syn-flood 攻击是不可能的。修复其自动评估并添加 SimLab 脚本。
- 将工件文件扩展名从 zip 更改为 lab,并添加前导内容以迷惑 GUI 文件管理器。学生此前会打开 zip 并提交其内容。
- 将 gradelab 的 -r 选项设为默认,添加 -c 选项用于 grader 的累积使用。
- 修改 refresh_mirror 以引用本地发布日期,避免频繁查询 DockerHub。每次此类查询都算作一次镜像拉取,
而他们现在正试图将其货币化。
2021 年 9 月 30 日
- 更改 bufoverflow 实验指南和评分,不再期望在开启 ASLR 时成功,评估其是否运行过。
- web grader 在缺少学生结果时的错误处理。
- 运行已弃用实验时打印警告。
- 更改 formatstring 评分,移除未使用的 "_leaked_secret" 描述并澄清 leaked_no_scanf 的值。
- 同时更改 formatstring 评分,允许易受攻击的可执行文件使用任意名称。
2021 年 9 月 29 日
- Gradelab 错误处理,减少因损坏的 zip 文件导致的崩溃实例。
- 将 stdout 工件文件限制为 1MB
2021 年 9 月 17 日
- Ghidra 实验指南中的 IP 地址错误,未从源重新制作。
2021 年 9 月 14 日
- 使用 SSL 的 LDAP 和 Mariadb 示例实验。旨在作为新实验的模板。
- 处理 Mariadb 日志格式
- 添加每个容器的参数以限制 CPU 使用或将容器固定到 CPU 集。
- Labpack 创建现在可通过 GUI(makepackui)使用。
- labtainer、labpack 和 gradelab 命令的 Tab 补全。
- 使用 MPI 的新并行计算实验 ``parallel''。
2021 年 8 月 3 日
- 添加 "WAIT_FOR" 配置选项,使容器延迟参数化,直到
另一个容器完成其参数化。
- 在结果解析中支持 Mariadb 日志格式
- 移除对 Mac 和 Windows 使用 Docker Desktop 的支持。该产品太不稳定,我们无法支持。
- 当用户使用内置 bash 命令(如 "which")时抑制 stderr 消息。
- makepack/labpack 程序的 bug 修复。
2021 年 7 月 19 日
- 添加 DNS 实验以介绍 DNS 协议和配置。
- 修订 VirtualBox 设备镜像,使其以正确的更新脚本启动。
- 将 resolv.conf nameserver 参数从 lab_gw 配置字段中拆分出来,作为独立值。
- 如果在任何实验启动之前运行,IModule 命令会失败。
2021 年 7 月 5 日
- DISPLAY 环境变量管理中的错误破坏了 Docker Desktop 上的 GUI 应用程序。
2021 年 7 月 1 日
- 支持 Mac 软件包安装无头 Labtainers。
- routing-basics 实验自动评估因缺少 treataslocal 文件而失败
- 更正 routing-basics 实验中的拼写错误和错误地址,并修复自动评估。
- pcapanalysis 的评估失败。
2021 年 6 月 10 日
- 所有实验手册 PDF 现在都在 github 仓库中
- 将 vpnlab 和 vpnlab2 说明转换为 PDF 实验手册。