Это возможно - по крайней мере, в общем случае, когда сеть в стиле 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. Но я не могу сказать точно.)