18

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

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

10 ответов10

42

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
10

Вот совет на случай, если это кому-нибудь поможет. Установите avahi-daemon на ВМ. Это позволяет вам подключаться через имя хоста vmname.local , где vmname - это имя вашей виртуальной машины. В моем случае имя виртуальной машины - baremetal и на хосте я могу запустить:

ssh baremetal.local

Не нужно знать IP виртуальной машины. :)

4

Как сказал Михаил Т. «Поскольку VMWare обеспечивает NAT-вход, он должен быть в состоянии сказать нам, для каких адресов он в настоящее время используется 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-адрес. Вы можете разобрать эти записи или просто посмотреть самые последние. Убедитесь, что договор аренды, на который вы смотрите, все еще действителен.

4

Это возможно - по крайней мере, в общем случае, когда сеть в стиле NAT настроена для гостя. Поскольку VMWare обеспечивает NAT-вход, он должен быть в состоянии сказать нам, для каких адресов он в настоящее время используется 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-адрес моего гостя находится в одной из этих двух частных сетей виртуальных машин: либо 192.168.82.0/24, либо 192.168.123.0/24. На вашем хосте может быть только один, вам повезло, или более двух - нам нужно проверить их все. Вот очень простой tcsh-скрипт, введенный непосредственно в командной строке, который сделал это для меня. Он пытается пропинговать каждый адрес во всех частных сетях класса C, управляемых vmnet, и завершается, когда эхо-запрос завершается успешно. Опция -W 500 говорит ping ждать только полсекунды для ответа (может, вероятно, использовать даже меньше), а -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 для создания списка всех таких действительных частных IP-адресов, а затем пробовать их все, пока не попадете в нужного гостя ...

(И, может быть, .130 в любом случае является хорошим предположением для адресов на основе NAT. Но не могу точно сказать.)

2

Мое решение этого было:

После установки инструментов VMware настройте общий доступ, чтобы вы могли получить доступ к папке (любой папке) из CentOS. Затем измените /etc /sysconfig /network-scripts /ifup-post, чтобы добавить свою текущую дату и IP-адрес в файл в этой общей папке.

Как это сделать:

Изменить: /etc /sysconfig /network-scripts /ifup-post

добавьте это перед последней строкой ifup-post ("exit 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
1

Запустите в консоли VM ipconfig (если виртуальная машина - Windows) или ifconfig (если виртуальная машина - Linux).

IP-адрес eth0 - это IP-адрес, который вы ищете.

1

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

Оказывается, когда установлен VMPlayer, он не включил dhcp на адаптере vmnet1 и vmnet8. Решение было использовать графический интерфейс Ubuntu для редактирования сетевых подключений с помощью "Редактировать подключения". Найдите vmnet1 под ethernet и нажмите кнопку редактирования. В настройках IPv4 включите DHCP, сохраните и перезагрузите компьютер.

Теперь, если вы запустите ifconfig в командной строке, вы заметите, что vmnet1 имеет IP-адрес. SSHing в nat-ed VM с хоста теперь также работает.

1

Краткий ответ: нет

Длинный ответ: нет, но возможно

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

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

0
arp -a| grep vmnet 
? (172.16.65.132) at 0:c:29:83:1:e0 on vmnet8 ifscope [ethernet]
0

Из man-страниц vmrun (версия 1.14.4 build-3204469):

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

Однако имейте в виду, что для того, чтобы это работало, пакет VMware Tools должен быть установлен в гостевой ОС, и этот шаг не может быть выполнен без входа в гостевую ОС. Вы можете установить инструменты в "базовое изображение" и создавать новые изображения из него с помощью клонирования. Затем вы можете использовать вышеуказанную команду, чтобы получить IP-адрес вновь созданных виртуальных машин.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .