SEED Emulator: An Internet Emulator for Research and Education CCF-C 雪城项目仿真器
摘要:
该文开发了一个开源的互联网仿真器,它是一个Python库,由互联网每个基本元素的类组成,包括自治系统、网络、主机、路由器、BGP路由器、互联网交换等。它还包括类适用于各种服务,包括 Web、DHCP、DNS、僵尸网络、暗网和区块链。许多其他有趣的网络技术也可以部署在仿真器上。使用这个库,用户可以轻松构建一个微型互联网。虽然它很小,但它具备了真正互联网的所有必备要素。构建后编译成Docker容器文件,由Docker在单机或多台云机上执行仿真。
引言:
Seed仿真器是一个有着12000行代码的Python库,由互联网每个基本元素的类组成,包括自治系统、网络、主机、路由器、BGP 路由器、互联网交换等。它还包括各种服务,包括 Web、DNS、僵尸网络、暗网、区块链等,还有一些正在开发中。
使用这个仿真器中的各个类,用户可以构建一个迷你的互联网来仿真现实世界中的互联网。虽然很小,但是它具备了真正互联网的所有必备要素,构建后可以编译成Docker容器文件,可以在单个主机或者云平台上运行。
Seed仿真器具有以下几个非常实用的功能:
- 仿真器是可以扩展的,可以轻松添加插件组件。(这里的意思是,本仿真器分为基础层和服务层。基础层由一个个物理节点(容器)构成,服务层组件在构建时,默认独立不绑定物理节点,这使得它就像插件一样,可以实现移植,部署在不同的互联网仿真器中)。(而且支持安装软件或者服务到节点内)
- 仿真器支持混合仿真,比如用户可以把他的计算机连接到仿真器上,成为仿真器系统中的一个参与者。(作者有演示一个例子,将笔记本的wifi接入点接入仿真系统,让学生连接该wifi,发动仿真系统的dns劫持,能让学生无法访问指定的服务)
- 可以将多个本地或者远程仿真器连接起来形成更大的仿真。(有合并功能)
- 该仿真器有设计可视化功能(map),来可视化整个仿真系统,并且该工具还可以显示仿真器内的数据包流。(这里就是暑假时,演示过的网安实验的那个可视化界面,是通过web页面来显示。可以画出整个系统的网络拓扑图,并且能对每个节点进行交互。还拥有数据流显示,就是能看到节点之间的通信,以及通信路径回放,这里就可以看到攻击的路径信息)(调用这个工具的时候会自动对整个仿真系统进行扫描,并自动绘制拓扑图)
相关工作介绍:
作者认为,互联网仿真和网络仿真不同。一个好的互联网仿真应该要具有以下三个要素:1)网络仿真,2)互联网基础设施仿真,3)服务基础设施仿真。
第一,网络仿真。这部分大多数的仿真器或者仿真器都能做好,本仿真器也涵盖了网络仿真的基本和通用功能,但是跟现有的网络仿真相比较少。比如,对控制网络带宽和速度非常有限(但是实现是可行的,只是并未实现),作者认为这个东西可以有但不是重点。
第二,互联网基础设施仿真。这部分包括自治系统(存根和传输)、互联网交换、BGP路由和对等互联。
第三,服务基础设施仿真。对于研究和教育而言,在系统上运行的应用程序或者说服务才是让互联网变得有趣的地方。Seed仿真器能够仿真这些服务,特别是一些基础的,比如DNS、区块链、暗网、僵尸网络、CDN等。本仿真器降低了仿真这些的复杂性,这也是这个项目的出彩部分。
实现的方法:
该仿真器由三部分组成:编写仿真、运行仿真以及与仿真器进行交互。该仿真器为第一部分和第三部分提供了SDK,同时依靠docker容器技术来运行仿真。
仿真的互联网由主机、路由器、网络、互联网交换机以及自治系统构成,自治系统使用BGP相互对等。这些模块的构建都可以通过提供的类来实现。