Як знайти IP-адресу віртуальної машини за допомогою VMware Fusion?


19

Чи можу я визначити IP віртуальної машини за допомогою VMware Fusion без фактичного входу в операційну систему, що працює на віртуальній машині? Я шукаю параметр меню, командний рядок або інше, що можу видавати проти віртуального зображення разом із самим програмним забезпеченням VMware Fusion.

Спасибі - Адрон


Якщо ви знаєте MAC-адресу віртуальної машини NIC, ви завжди можете спробувати використовувати кеш ARP вашого хост-машини або зворотний ARP.
ta.speot.is

Дивовижно, що vmware не робить цей випадок очевидним та легким, як інші vms! Будьте здорові за відповідь avahi та nmap, якщо ви відчайдушно, але все-таки - великий збій, VMware!
nealmcb

Відповіді:


1

Коротка відповідь: Ні

Довга відповідь: Ні, але можливо

IP-адреса покладається виключно на ОС. Тому віртуальний фреймворк, на якому розміщена ОС, не має уявлення про стек TCP / IP всередині, якщо немає симбіотичних доповнень до фреймворку, таких як додаткові гостьові інструменти Hyper-V та VMware (завдяки todda.speot.is в коментарях нижче) . Це не набагато інакше, ніж бажати переглядати файли у вітрині, не запускаючи його спочатку.

Технічно, якщо ВМ покладається на DHCP, ви могли б шукати Ваш DHCP сервер (ймовірно маршрутизатор вашої мережі LAN) для останньої оренди , який був розданий на MAC - адреса віртуального мережевого адаптера , щоб отримати гарне уявлення про те, що IP буде , ймовірно , буде наступного разу, коли він запускається. Це припущення, що той самий IP не був переданий на інший пристрій між тим, коли ви переглядали історію оренди і коли запускався VM.


1
Арг. Я сподівався, що VMware має деякі гачки в ОС, які б це забезпечили. :( Я не маю доступу до корпоративного DHCP, тому не маю уявлення, оскільки я також не маю доступу до фактичної ОС.
Adron

Гіпервізор може підключитися та отримати IP-адресу, Hyper V робить це за допомогою своїх додатків для гостей. І, схоже, деякі аромати VMware скажуть вам, занадто kb.vmware.com/Platform/Publishing/images/1006098.JPG - але, як сказав WesleyDavid, насправді відповідальність за це турбуватися не має.
ta.speot.is

46

VMWare пропонує, не дивно, вбудований інструмент для цього vmrun,. Це під, /Applications/VMware Fusion.app/Contents/Library/vmrunхоча він трохи перемістився в інших випусках Fusion.

🍺 vmrun list
    Total running VMs: 1
    .docker/machine/machines/myvm.vmx

🍺  vmrun getGuestIPAddress ~/.docker/machine/machines/myvm.vmx
    172.16.213.128

7
Це має бути прийнятою відповіддю. Працювали чудово.
Майкл Поттер

2
Приємно! vmrunза замовчуванням знаходиться в моєму Mac на PATH, тому vmrun getGuestIPAddress "$(vmrun list | grep vmx)"включайте цитати!
Великий Річ

Мабуть, інструменти VMWare потрібно запускати в VM. (Fusion V8.5)
Laryx Decidua

10

Ось підказка на випадок, якщо вона допомагає комусь. Встановіть avahi-daemonна VM. Це дозволяє вам підключитися за допомогою імені хоста vmname.local, де vmnameім'я вашої віртуальної машини. У моєму випадку ім'я VM - baremetalі на хості я можу запустити:

ssh baremetal.local

Не потрібно знати IP-адреси VM. :)


1
Хороша ідея, але як бути з машинами, що працюють під управлінням операційних систем там, де avahi-daemonїх немає? Наприклад, Windows спадає на думку ... :-)
Laryx Decidua

4

Це можливо - принаймні, у звичайному випадку, коли мережа в стилі NAT налаштована для гостя. Оскільки VMWare забезпечує NAT-ing, він повинен бути в змозі сказати нам, для яких адрес він зараз NAT. Щось подібне vmrun listповинно виводити цю інформацію. Що це не є вадою ...

Але, у будь-якому випадку, ось як це можна дізнатися в будь-якому випадку. По-перше, запустіть ifconfigна вашому Mac (можливо, ipconfigзробили б те саме і в Windows, але я його не перевіряв). Тут буде перераховано всі мережеві інтерфейси на машині - як фізичні, так і віртуальні. Шукайте vmnet-них. На моєму Mac це створює:

% ifconfig | grep -A2 ^vmnet
vmnet1: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
ether 00:50:56:c0:00:01 
inet 192.168.82.1 netmask 0xffffff00 broadcast 192.168.82.255
vmnet8: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
ether 00:50:56:c0:00:08 
inet 192.168.123.1 netmask 0xffffff00 broadcast 192.168.123.255

Отже, IP мого гостя знаходиться в одній із цих двох приватних мереж VM: або 192.168.82.0/24, або 192.168.123.0/24. У вашого господаря може бути лише один, вам пощастило, або більше двох - нам потрібно перевірити їх усіх. Ось дуже простий tcsh-скрипт, введений безпосередньо в командному рядку, що зробив це для мене. Він намагається пінг-адреси кожної адреси у всіх приватних мережах класу C, якими керує vmnet, і закінчується, коли ping проходить успішно. -W 500Опція говорить пінг чекати тільки півсекунди відповіді (може, ймовірно, використовувати навіть менше), і -c 1каже йому , щоб послати рівно один пакет:

% set i=2
% while ( $i < 255 )
while? ping -W 500 -c 1 192.168.82.$i && break
while? ping -W 500 -c 1 192.168.123.$i && break
while? @ i++
while? end

Наведений вище сценарій деякий час працював з переліком усіх невдалих спроб дістатися до неіснуючих адрес:

PING 192.168.82.2 (192.168.82.2): 56 data bytes

--- 192.168.82.2 ping statistics ---
1 packets transmitted, 0 packets received, 100.0% packet loss
PING 192.168.123.2 (192.168.123.2): 56 data bytes
...

Поки це остаточно не вдалося і закінчили:

64 bytes from 192.168.123.130: icmp_seq=0 ttl=64 time=0.307 ms

--- 192.168.123.130 ping statistics ---
1 packets transmitted, 1 packets received, 0.0% packet loss

Вуаля, мені вдалося ввійти до свого гостя:

% ssh 192.168.123.130
Password:

Тепер у мене працював лише один гість - тому перша IP-адреса, яка відповіла на ping, була правильною. Якщо ви запускаєте декілька гостей одночасно, можливо, вам потрібно буде використовувати одну і ту ж чи подібну команду ping, щоб скласти список усіх таких дійсних приватних IP-адрес, а потім спробувати їх усіх, поки ви не потрапите в потрібний гість ...

(І, можливо, .130 - це гарна здогадка для адрес на основі NAT. Але я не можу сказати точно.)


1
За допомогою nmap ви швидше знаходите IP-адреси ;-)nmap -sP 192.168.123.*
Роберт Реїз

4

Як сказав Михайло Т., "Оскільки VMWare забезпечує NAT-ing, він повинен бути в змозі сказати нам, для яких адрес він зараз NAT". Справді це:

У моїй установці VMware Fusion 6 vmnet-dhcpdдемон демонструє свої оренди у файли /var/db/vmware/vmnet-dhcpd-vmnetX.leases, де "X" дорівнює 1 і 8. Емпірично :-) Я встановив, що саме vmnet8 мені слід шукати. Ось уривок із файлу оренди /var/db/vmware/vmnet-dhcpd-vmnet8.leases:

lease 192.168.177.129 {
    starts 1 2014/02/17 09:34:19;
    ends 1 2014/02/17 09:36:56;
    hardware ethernet 00:0c:29:2b:2b:10;
    client-hostname "ubuntu";
}

client-hostnameЦе ім'я віртуальної машини і число після слова leaseє його IP. Ви можете проаналізувати ці записи або просто просто переглянути найсвіжіші записи. Переконайтесь, що оренда, яку ви дивитесь, все ще діє.


2

Моє рішення для цього було:

Після встановлення інструментів VMware налаштуйте спільний доступ, щоб мати доступ до папки (будь-якої папки) з CentOS. Потім змініть / etc / sysconfig / network-script / ifup-post, щоб додати свою поточну дату & ip-адресу до файлу в цій спільній папці.

Як це зробити:

Змініть: / etc / sysconfig / network-script / ifup-post

додайте це до останнього рядка ifup-post ("вихід 0"):

date >> /path/to/shared/folder/guest_ip.log
ifconfig >> /path/to/shared/folder/guest_ip.log

Це додасть ваш guest_ip.log із датою та значенням повернення ifconfig щоразу, коли мережа з’являється.

У моєму випадку я вирішив похвалитись за префіксом 192 на своїй ip-адресі, оскільки я знаю, що між моїм домом та роботою це завжди 192. Це можна зробити, відрегулювавши вище наведене нижче:

date >> /path/to/shared/folder/guest_ip.log
ifconfig | grep 192 >> /path/to/shared/folder/guest_ip.log

"щоб ви могли отримати доступ до папки (будь-якої папки) з CentOS." Що з тими людьми, які 1) використовують інші дистрибутиви Linux, 2) використовують операційні системи UNIX, крім Linux, 3) використовують не-Unix операційні системи, такі як Windows, ... у своїх віртуальних машинах? :-)
Laryx Decidua

1

Запуск у консолі VM ipconfig(якщо VM - це Windows) або ifconfig(якщо VM - Linux).

IP-адреса eth0- це IP-адреса, яку ви шукаєте.


Первісне питання було "без фактичного входу в операційну систему, що працює на віртуальній машині?" Це, можливо, уникне вашої уваги.
Laryx Decidua

Це може не відповісти на питання, але я опинився тут дещо іншим питанням, і це було корисно.
Джеймі-Вілсон

1

У мене була така ж проблема під час запуску VMPlayer на Ubuntu 15.04. Моя віртуальна машина була встановлена ​​на NAT, і, хоча я міг визначити її ip-адресу, увійшовши в gui та запустивши ifconfig у віртуальній машині, я не міг пінг-файлу або ssh в неї.

Виявляється, коли VMPlayer встановлений, він не вмикав dhcp на vmnet1 та vmnet8 адаптер. Рішенням було використовувати gui ubuntu для редагування мережевих з'єднань за допомогою "Редагувати з'єднання". Знайдіть vmnet1 під Ethernet та натисніть кнопку редагування. У налаштуваннях IPv4 увімкніть DHCP, збережіть і перезавантажте.

Тепер якщо ви запустите ifconfig в командному рядку, ви помітите, що vmnet1 має ip адресу. SSHing у nat-ed VM від хоста тепер працює також.


0

З мапазів vmrun (версія 1.14.4, збірка-3204469):

getGuestIPAddress        Path to vmx file     Gets the IP address of  the guest
                         [-wait]

Однак майте на увазі, що для цього пакет програм VMware Tools повинен бути встановлений у гостьовій ОС, і цей крок неможливо виконати без входу в гостьову ОС. Ви можете встановити інструменти в "базовий образ" і створити з нього нові зображення за допомогою клонування. Тоді ви можете скористатися вищевказаною командою, щоб отримати IP-адресу новостворених VM.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.