c++ - 编写 Virtualbox 脚本以创建网络

标签 c++ python networking virtualbox

我知道 VB 提供了很多东西来控制它:SDK、API、COM、Web 服务器等

我想做的是有一个 GUI 来简单地创建通过网络连接的 VM,但我必须知道:使用前端 [1]、网络服务器、COM* 或 API 的最佳解决方案是什么?别处 libvirt ?

一个用例示例可能是:我在我的 GUI 上放置了 3 个 VM,选择它们各自的操作系统,为每个创建 1 个或多个网络连接,然后连接这些 VM 以创建网络。

Python、C++ 等,实现语言无关紧要。

[1] http://www.virtualbox.org/manual/ch01.html#frontends

最佳答案

我回答这个问题的资格是我创建并维护的 Vagrant自 2010 年初以来。以下是我对每个可用的 VirtualBox 脚本前端的一般看法:

  • vboxwebsrv 是 VirtualBox 网络服务,它提供了一个 API 来控制 VirtualBox。这样做的好处是现在的 Web 服务很容易编程。主要缺点是您必须手动处理启动和停止此 Web 服务(或检查以确保它已在运行)。从历史上看,Web 服务并未完全与每个版本的 VirtualBox 中可用的最新 API 保持同步,但我不确定现在的状态如何。

  • COM 或 C API。 VirtualBox 在非 Windows 平台上提供基于 XPCOM 的 API,在 Windows 上提供基于 MSCOM 的 API。如果您不能使用 C++,您也可以在 Linux 上使用 C API(但它在 Windows 上不可用/不导出)。我使用这个 API 一年多了。优点:快速而完整。因为它是一个 C API,所以速度非常快,可以直接与 VirtualBox 进程通信。它也是完整的,因为这是 VirtualBox GUI 使用和内部使用的相同 API。主要缺点是 XPCOM 并不容易,并且 Windows 上不提供 C API,这意味着您要么必须痛苦地通过 XPCOM,要么需要同时处理 C 和 MSCOM。我选择了后者,结果证明这是兼容性的噩梦。 VirtualBox 的几乎每个次要版本(3.1、3.2 等)都会以向后不兼容的方式(轻微地)更改 API,而主要版本则完全可以忘记(3.0、4.0 等)。这使得处理旧版本的 VirtualBox 变得……棘手。这绝对是一个高级用例。

  • VBoxManage 是 VirtualBox 基于 CLI 的前端。在幕后 VBoxManage 当然只是使用基于 COM 的 API,但在它之上提供了一个更加用户友好的封面。我发现对于 99% 的用例,VBoxManage 都可以覆盖它。 VBoxManage 还处理所有错误处理,执行正确的退出状态(0 表示成功,非零表示其他一切)等。在使用 C API 1.5 年后,我切换回 VBoxManage,因为它更易于使用并且可以做我想做的事情需要做。缺点是您必须使用子进程与 VBoxManage 对话。好处是 VBoxManage 的变化相对较少,因此它可以很容易地支持多个版本的 VirtualBox。

希望对您有所帮助!

关于c++ - 编写 Virtualbox 脚本以创建网络,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8052088/

相关文章:

c++ - 在给定 Sum 的未排序数组中配对

python - django 如何与 virtualenv 一起工作?

python - 获取 Pandas 中 2 个相应系列的最小和最大元素

Python:使用字符串调用子函数

networking - PACKET DROPPED - 找出哪些数据包被丢弃?

python socket.connect 似乎不适用于虚拟 IP

C++ 词汇表;在 vector/ map 中找到完整的描述

C++ - 具有 volatile 变量的模板函数 - 无法调用模板特化

c++ - 如何通过复制和引用将 vector 传递给函数?

android - 从 Android 应用程序访问 Chromebook 的本地主机?