Как получить IP-адрес, назначенный виртуальной машине, работающей в фоновом режиме?


27

Я запускаю свой экземпляр Ubuntu из Virtual Box в фоновом режиме, используя следующую команду:

VBoxManage startvm ${VM_NAME} --type headless

Основное различие между этим и выполнением его через графический интерфейс состоит в том, что, когда я нахожусь в графическом интерфейсе после его запуска, я могу проверить, ifconfigчто такое IP-адрес, чтобы я мог sshподключиться к нему со своего терминала на хосте и, очевидно, мог сделать это в фоновом режиме.

Предполагая динамическое назначение IP-адресов в сети, есть ли способ извлечь назначенный IP-адрес во вновь созданный экземпляр для целей ssh ​​ИЛИ есть ли способ подключиться к нему по ssh, не зная IP (например, через порт бэкдора на хосте? )?

Ответы:


16

Вы можете использовать команду VBoxManage для извлечения IP-адреса, как показано в этом сообщении на форуме на virtualbox.org:

VBoxManage guestproperty enumerate <vmname>

Если, конечно, у вас нет веских причин, вам стоит рассмотреть возможность назначения статического IP-адреса вашему гостевому виртуальному компьютеру. Это возможно, даже если вы, вероятно, используете DHCP. Просто выберите IP-адрес вне диапазона, который выделяет ваш DHCP-сервер.


7
эта команда не вернула IP-адрес
амфибия

3
Для этого вам нужно установить гостевые дополнения.
тяжело

Хорошо, тогда как вы это делаете, когда гостевые дополнения не установлены?
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/Downloads

После этого вы можете получить 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 для меня
Джош Нанкин

@JoshNankin Ты решил это?
user3933607

@JoshNankin, что перечисляет guestproperty VBoxManage <_name_of_VM_> | grep IP тебе дает?
Weivall

для 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 в маршрутизаторе, до запуска и после, и сравнить их. Если маршрутизатор отображает имя компьютера, это, конечно, делает его намного проще. Возможно, это не изощренное решение, но оно работает.

Большинство маршрутизаторов присваивают динамические адреса, но большую часть времени они дают машине или виртуальной машине (маршрутизатор не знает разницы) один и тот же IP-адрес. Если вы копируете виртуальную машину в Virtualbox, вы можете выбрать новый MAC-адрес, который маршрутизатор идентифицирует виртуальную машину.


0

У меня была похожая задача в питоне. Вероятно, это будет полезно.

pip install pyvbox

а потом в питоне:

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 для запуска трассировки пакетов на активном нише гостя и открыл локальный файл с помощью 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

@ G-Man: если у вас есть тысячи аккаунтов, войдите в них, и голосование вниз .. К сожалению, я не буду удалять ответ.
Абденнур TOUMI
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.