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
但要总结解决方案,
- 已确保 slitaz 上的来宾添加与与虚拟盒版本匹配的版本兼容(正确版本)。
- 问题是
VBoxService
在 Slitaz
的启动过程中没有自动启动。
- 因此
etc/rcS.conf
文件被编辑以在 LOAD_MODULES 中添加额外的程序
.............. /usr/sbin/VBoxService
(使用which VBoxService
获取服务路径)
- 现在当 Slitaz 重新启动时,这个过程是 运行 并且
vboxmanage guestproperty enumerate '<vmname>'
列出所有配置
- 其中一个有趣的是,
Name: /VirtualBox/GuestInfo/Net/0/V4/IP, value: 192.168.56.101, timestamp: 1427467107101664501, flags:
希望对大家有所帮助!!!
我有关于获取 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
但要总结解决方案,
- 已确保 slitaz 上的来宾添加与与虚拟盒版本匹配的版本兼容(正确版本)。
- 问题是
VBoxService
在Slitaz
的启动过程中没有自动启动。 - 因此
etc/rcS.conf
文件被编辑以在 LOAD_MODULES 中添加额外的程序.............. /usr/sbin/VBoxService
(使用which VBoxService
获取服务路径) - 现在当 Slitaz 重新启动时,这个过程是 运行 并且
vboxmanage guestproperty enumerate '<vmname>'
列出所有配置 - 其中一个有趣的是,
Name: /VirtualBox/GuestInfo/Net/0/V4/IP, value: 192.168.56.101, timestamp: 1427467107101664501, flags:
希望对大家有所帮助!!!