Jest to możliwe - przynajmniej w powszechnym przypadku, gdy sieć w stylu NAT jest skonfigurowana dla gościa. Ponieważ VMWare zapewnia NAT, powinien być w stanie powiedzieć nam, dla jakich adresów jest obecnie NAT. Coś takiego vmrun list
powinno wypisywać te informacje. To nie jest wada ...
Ale tak czy inaczej, oto jak można się tego dowiedzieć. Najpierw uruchom ifconfig
na komputerze Mac (być może ipconfig
zrobiłby to samo w systemie Windows, ale go nie przetestowałem). Spowoduje to wyświetlenie listy wszystkich interfejsów sieciowych na komputerze - zarówno fizycznych, jak i wirtualnych. Poszukaj vmnet-tych. Na moim komputerze Mac powoduje to:
% 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
Tak więc adres IP mojego gościa znajduje się w jednej z tych dwóch prywatnych sieci maszyn wirtualnych: 192.168.82.0/24 lub 192.168.123.0/24. Na twoim hoście może być tylko jeden, masz szczęście lub więcej niż dwa - musimy je wszystkie sprawdzić. Oto bardzo prosty skrypt tcsh, wprowadzony bezpośrednio z wiersza poleceń, który zrobił to dla mnie. Próbuje pingować każdy adres we wszystkich prywatnych sieciach klasy C zarządzanych przez vmnet i kończy się, gdy ping się powiedzie. Ta -W 500
opcja mówi pingowi, aby poczekał tylko pół sekundy na odpowiedź (prawdopodobnie prawdopodobnie użyłby jeszcze mniej), i -c 1
nakazuje wysłanie dokładnie jednego pakietu:
% 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
Powyższy mały skrypt działał przez pewien czas z listą wszystkich nieudanych prób dotarcia do nieistniejących adresów:
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
...
Aż w końcu się udało i skończyło:
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
Voilà, mogłem ssh do mojego gościa:
% ssh 192.168.123.130
Password:
Teraz miałem tylko jednego gościa - więc pierwszy adres IP, który odpowiedział na ping, był właściwy. Jeśli uruchamiasz wielu gości jednocześnie, może być konieczne użycie tego samego lub podobnego polecenia ping, aby zbudować listę wszystkich takich ważnych prywatnych adresów IP, a następnie wypróbować je wszystkie, aż uzyskasz prawidłowego gościa ...
(I może .130 i tak dobrze zgaduje adresy oparte na NAT. Ale nie jestem tego pewien).