如何获取分配给在后台运行的虚拟机的IP地址?


27

我使用以下命令在后台从Virtual Box中运行Ubuntu实例:

VBoxManage startvm ${VM_NAME} --type headless

与通过GUI运行它之间的主要区别在于,当启动GUI后,当我进入GUI时,我可以检查ifconfigIP地址是什么,以便可以ssh从主机上的终端插入该IP地址,并且显然可以。不要在后台这样做。

假设在网络上动态分配了IP地址,是否有一种方法可以将分配的IP提取到新创建的实例中以用于ssh的目的,或者有一种方法可以在不知道IP的情况下将其插入到新实例中(例如,通过主机上的后门端口) )?

Answers:


16

您可以使用VBoxManage命令提取IP地址,如virtualbox.org上的该论坛帖子所示:

VBoxManage guestproperty enumerate <vmname>

但是,除非有很好的理由,否则您将强烈考虑为访客虚拟机分配一个静态IP地址。即使您可能正在使用DHCP,这也是可能的。只需选择DHCP服务器分配范围之外的IP地址即可。


7
该命令未返回IP地址
两栖系统,2013年

3
您需要安装来宾添加才能正常工作。
2013年

好的,那么,当安装来宾添加时,该如何做呢?
–'code_dredd

1
或:VBoxManage guestproperty get <vmname> "/VirtualBox/GuestInfo/Net/0/V4/IP"
托德·沃尔顿

9

首先,请确保已安装VirtualBox Extension Pack,否则请确保已安装。

例如(对于Ubuntu)

> wget http://download.virtualbox.org/virtualbox/4.2.12/Oracle_VM_VirtualBox_Extension_Pack-4.2.12-84980.vbox-extpack
> sudo VBoxManage extpack install ./Oracle_VM_VirtualBox_Extension_Pack-4.2.12-84980.vbox-extpack

或来自

https://www.virtualbox.org/wiki/下载

之后,您可以获得虚拟机的IP

VBoxManage guestproperty enumerate <_name_of_VM_> | grep IP | grep -o -w -P -e '\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}'

3
仍然没有为我显示IP
Josh Nankin

@JoshNankin您解决了这个问题吗?
user3933607's

@JoshNankin VBoxManage guestproperty枚举的内容<_name_of_VM_> | grep IP给你吗?
weivall

for OSX-VBoxManage guestproperty枚举4ab1029f-23ff-4c5c-b4bd-3b6d68aa7cc0 | grep IP | grep -oE“ \ b([0-9] {1,3} \。){3} [0-9] {1,3} \ b” IP正则表达式我使用stackoverflow.com/questions/11482951/…
weivall

5

我知道我参加这个聚会很晚,但是可以在VirtualBox 5.0.6中使用。

这使用VBoxManage来获取正在运行的虚拟机的列表,循环查询其属性,并以漂亮的方式显示IP地址。

#!/bin/bash

for f in $(VBoxManage list runningvms | awk -F\" '{print $2}'); do
      echo "$f:"
      VBoxManage guestproperty enumerate "$f" | grep IP
    done

1

您可以在启动之前和之后查看路由器中的DHCP表,并进行比较。如果路由器显示计算机名称,那么当然可以轻松得多。这可能不是一个复杂的解决方案,但它可以工作。

大多数路由器都分配动态地址,但是在大多数情况下,它们始终为计算机或VM(路由器不知道区别)提供相同的IP。如果在Virtualbox中复制VM,则可以选择设置新的MAC地址,这是路由器识别VM的方式。


0

我在python中有类似的任务。可能会有所帮助。

pip install pyvbox

然后在python中:

import virtualbox

vbox = virtualbox.VirtualBox()
vm = vbox.find_machine('running_vb_machine_name')
res = vm.enumerate_guest_properties('/VirtualBox/GuestInfo/Net/0/V4/IP')
ip = res[1][0]
print ip

0

我使用controlvm选项在来宾的活动nic上启动数据包跟踪,并使用wireshark打开了本地文件。访客的IP地址将在其中。

VBoxManage controlvm <vm-name> nictracefile<1-N> /full/path/to/file
VBoxManage controlvm <vm-name> nictrace<1-N> on

wireshark /full/path/file

完成后,别忘了禁用跟踪。

VBoxManage controlvm <vm-name> nictrace<1-N> off

-4
VMNAME="..."; # save ID of VM  in VMNAME variable
vboxmanage guestproperty enumerate $VM_NAME|grep IP|cut -f2 -d,|cut -f2 -d:

5
我们正在寻找能够提供一些解释和上下文的实质性答案。请不要只给出两行代码的答案;解释为什么你的答案是正确的,最好是引用。不包含说明的答案可能会被删除。而且,除了琐碎的格式差异外,您的答案与以前的答案相同。除非您确实有新贡献,否则请不要发布答案。
G-Man说'恢复莫妮卡'

:)。我们欢迎您..根本不
Abdennour TOUMI 2015年

@ G-Man:如果您有数千个帐户,请登录并投票。.不幸的是,我不会删除答案。
阿布登诺·图米
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.