Як отримати IP-адресу, призначену VM, що працює у фоновому режимі?


27

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

VBoxManage startvm ${VM_NAME} --type headless

Основна відмінність між цим і запуском його через GUI полягає в тому, що, коли я перебуваю в графічному інтерфейсі після його запуску, я можу перевірити, ifconfigщо таке IP-адреса, щоб я міг sshпотрапити в неї з мого терміналу на хості і, очевидно, можу ' не робити це на задньому плані.

Якщо припустити динамічне присвоєння IP-адрес у мережі, чи є спосіб вилучити призначений IP новоствореному екземпляру для цілей ssh ​​АБО чи є спосіб ssh в нього, не знаючи IP (наприклад, через задній порт на хості )?

Відповіді:


16

Ви можете скористатися командою VBoxManage для витягування IP-адреси, як показано в публікації цього форуму на virtualbox.org:

VBoxManage guestproperty enumerate <vmname>

Якщо у вас немає дуже вагомих причин, ви хочете настійно розглянути можливість призначення статичної IP-адреси вашому гостю vm. Це можливо, навіть якщо ви, ймовірно, використовуєте 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/Завантажити

Після цього ви можете отримати IP VM

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 Ви це вирішили?
користувач3933607

@JoshNankin, що перераховує гостьова власність VBoxManage <_name_of_VM_> | grep IP дає вам?
weivall

для OSX - VBoxManage гостьова власність перераховує 4ab1029f-23ff-4c5c-b4bd-3b6d68aa7cc0 | grep IP | grep -oE "\ b ([0-9] {1,3} \.) {3} [0-9] {1,3} \ b" Regex для 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 (маршрутизатор не знає різниці) більшу частину часу. Якщо ви копіюєте VM у Virtualbox, ви можете встановити нову 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, щоб запустити трасування пакетів на активній нік гостя і відкрив локальний файл за допомогою 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 каже: "Відновіть Моніку"

:). Вас вітають .. зовсім не
Абденноур ТОУМІ

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