VirtualBox Java API - 在 VirtualBox 中获取 VM 的 IP 地址

VirtualBox Java API - Get IP Address of VM in VirtualBox

我有关于获取 IP 地址的问题,我已经参考了一些在线资源和一些答案,但我仍然无法解决它, https://forums.virtualbox.org/viewtopic.php?f=34&t=65910 - link 最符合我的问题。

配置: Host Machine : Windows 8 Guest : Slitaz 4.0 VirtualBox : 4.3.24 VirtualBox Java API : 4.3 Adapter in VM : Host Only Adapter Slitaz Guest Additions are also installed.

我已经使用 VirtualBox API 创建了一个 Java 程序,我基本上可以在 VirtualBox 中连接、克隆和启动 VM。但是我没能得到 machine 的 IP 地址。 (为什么我需要 IP 是因为我想通过 SSH 进入 machine,使用 JSCH java 库并执行一些进程)

这是我到目前为止尝试过的,

根据上述link,

 machine.getGuestPropertyValue("/VirtualBox/GuestInfo/Net/<nicid>/V4/IP") - returns empty result
 machine.getGuestPropertyValue("/VirtualBox/GuestInfo/Net/Count") - returns empty result
 machine.getGuestPropertyValue("/VirtualBox/GuestInfo/Net/<nicid>/MAC") - return empty result
 machine.getGuestPropertyValue("/VirtualBox/GuestInfo/OS/Release") - this gives me release version of linux - which is ok

我又试了这一件事,到底有多少属性可用

 org.virtualbox_4_3.Holder<List<String>> tempList = new Holder<List<String>>();
 org.virtualbox_4_3.Holder<List<String>> tempList1 = new Holder<List<String>>();
 Holder<List<Long>> tempList2 = new Holder<List<Long>>();
 org.virtualbox_4_3.Holder<List<String>> tempList3 = new Holder<List<String>>();
 machine.enumerateGuestProperties("",tempList, tempList1,tempList2,tempList3);

现在在 templist 中,我得到所有可用属性的名称,在 tempList1 中它是值。

[/VirtualBox/GuestInfo/OS/Product, /VirtualBox/HostInfo/GUI/LanguageID, /VirtualBox/HostInfo/VBoxVerExt, /VirtualBox/GuestAdd/Vbgl/Video/SavedMode, /VirtualBox/GuestInfo/OS/Version, /VirtualBox/GuestAdd/VersionExt, /VirtualBox/GuestAdd/Revision, /VirtualBox/HostGuest/SysprepExec, /VirtualBox/GuestAdd/Vbgl/Video/0, /VirtualBox/HostGuest/SysprepArgs, /VirtualBox/GuestAdd/Version, /VirtualBox/HostInfo/VBoxRev, /VirtualBox/HostInfo/VBoxVer, /VirtualBox/GuestInfo/OS/Release, /VirtualBox/GuestAdd/HostVerLastChecked]

就是这个原因,我觉得这个可行

machine.getGuestPropertyValue("/VirtualBox/GuestInfo/OS/Release") - this gives me release version of linux - which is ok

但是没有属性与IP相关。此外,我不确定 nicid 到底是什么以及如何使用 API 获取它,它是 VM 中适配器的 mac 地址,还是其他东西。

machine.getGuestPropertyValue("/VirtualBox/GuestInfo/Net/<nicid>/V4/IP")

有人可以在这里帮助我或指导正确的方向吗?

感谢virtual box论坛,解决这里的问题是link https://forums.virtualbox.org/viewtopic.php?f=34&t=66788&sid=bc4d34a5ad65fe3ff5006f91c8690817

但要总结解决方案,

  1. 已确保 slitaz 上的来宾添加与与虚拟盒版本匹配的版本兼容(正确版本)。
  2. 问题是 VBoxServiceSlitaz 的启动过程中没有自动启动。
  3. 因此 etc/rcS.conf 文件被编辑以在 LOAD_MODULES 中添加额外的程序 .............. /usr/sbin/VBoxService(使用which VBoxService获取服务路径)
  4. 现在当 Slitaz 重新启动时,这个过程是 运行 并且 vboxmanage guestproperty enumerate '<vmname>'列出所有配置
  5. 其中一个有趣的是, Name: /VirtualBox/GuestInfo/Net/0/V4/IP, value: 192.168.56.101, timestamp: 1427467107101664501, flags:

希望对大家有所帮助!!!