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

时间:2015-03-25 15:20:51

标签: java virtual-machine virtualbox ip-address

我有关于获取IP地址的问题,我已经提到了一些在线资源和一些答案,但我还是无法解决它, https://forums.virtualbox.org/viewtopic.php?f=34&t=65910 - 与我的问题最匹配的链接。

配置: 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。但我无法做的是获取机器的IP地址。 (为什么我需要IP是因为我想通过SSH连接到那台机器,使用JSCH java库并执行一些进程)

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

基于上述链接,

 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")

有人可以帮助我或在适当的方向指导。

1 个答案:

答案 0 :(得分:0)

感谢虚拟框论坛,解决问题的方法是链接 https://forums.virtualbox.org/viewtopic.php?f=34&t=66788&sid=bc4d34a5ad65fe3ff5006f91c8690817

但总结一下解决方案,

  1. 确保在slitaz上添加的客户与虚拟盒版本相匹配(正确版本)。
  2. VBoxService的启动过程中,问题Slitaz未自动启动。
  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:
  6. 希望它可以帮到某人!!!