Как найти IP-адрес виртуальной машины с помощью VMware Fusion?

18

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

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

Adron
источник
Если вы знаете MAC-адрес сетевой карты виртуальной машины, вы всегда можете попытаться использовать ARP-кеш вашего хост-компьютера или реверсировать ARP.
ta.speot.is
Удивительно, что vmware не делает такой очевидный и простой, как другие vms! Приветствую ответ avahi и nmap, если вы в отчаянии, но все же - большой провал, VMware!
nealmcb

Ответы:

1

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

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

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

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

Wesley
источник
1
Argh. Я надеялся, что у VMware есть несколько хуков в ОС, которые обеспечат это. :( У меня нет доступа к корпоративному DHCP, поэтому я понятия не имею, поскольку у меня нет доступа и к самой ОС.
Adron
Гипервизор может подключиться и получить IP-адрес, Hyper V делает это со своими гостевыми дополнениями. И кажется, что некоторые разновидности VMware скажут вам тоже kb.vmware.com/Platform/Publishing/images/1006098.JPG - но, как сказал WesleyDavid, гипервизор не должен беспокоиться об этом.
ta.speot.is
43

Не удивительно, что 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
DCH
источник
7
Это должен быть принятый ответ. Работал отлично.
Майкл Поттер
1
Ницца! vmrunпо умолчанию находится в PATH моего Mac, так что vmrun getGuestIPAddress "$(vmrun list | grep vmx)"включайте кавычки!
Большой Богатый
Очевидно, что VMWare Tools нужно запустить в ВМ. (Fusion V8.5)
Ларикс Децидуа
10

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

ssh baremetal.local

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

Берто
источник
1
Хорошая идея, но как насчет виртуальных машин, на которых работают операционные системы, avahi-daemonнедоступные? Например, Windows приходит на ум ... :-)
Laryx Decidua
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Опция говорит пинг ждать только полсекунды ответа (может, вероятно, использовать даже меньше), и -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. Но я не могу сказать точно.)

Михаил Т.
источник
1
С nmap вы быстрее находите IP-адреса ;-)nmap -sP 192.168.123.*
Роберт Рейз
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. Вы можете разобрать эти записи или просто посмотреть самые последние. Убедитесь, что аренда, на которую вы смотрите, все еще действительна.

Ларикс Децидуа
источник
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
Mr.BassHatt
источник
msgstr "чтобы вы могли получить доступ к папке (любой папке) из CentOS." Как насчет тех людей, которые 1) используют другие дистрибутивы Linux, 2) используют операционные системы UNIX, отличные от Linux, 3) используют не-Unix операционные системы, такие как Windows, ... в своих виртуальных машинах? :-)
Laryx Decidua
1

Запустите в консоли VM ipconfig(если VM - Windows) или ifconfig(если VM - 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 с хоста теперь также работает.

Atifm
источник
0

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

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

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

pldimitrov
источник
0
arp -a| grep vmnet 
? (172.16.65.132) at 0:c:29:83:1:e0 on vmnet8 ifscope [ethernet]
Мохаммад Шахид Сиддики
источник