Jak znaleźć adres IP maszyny wirtualnej za pomocą VMware Fusion?


19

Czy mogę określić adres IP maszyny wirtualnej za pomocą VMware Fusion bez faktycznego wchodzenia do systemu operacyjnego uruchomionego na maszynie wirtualnej? Szukam opcji menu, wiersza polecenia lub w inny sposób, który mogę wystawić przeciwko obrazowi wirtualnemu za pomocą samego oprogramowania VMware Fusion.

Dzięki - Adron


Jeśli znasz adres MAC karty sieciowej maszyny wirtualnej, zawsze możesz spróbować wykorzystać pamięć podręczną ARP komputera hosta lub odwrócić ARP.
ta.speot.is

To niesamowite, że vmware nie sprawia, że ​​ta niesamowita i oczywista i łatwa jak inne vms! Pozdrowienia dla odpowiedzi avahi i nmap, jeśli jesteś zdesperowany, ale nadal - Wielka porażka, VMware!
nealmcb

Odpowiedzi:


1

Krótka odpowiedź: Nie

Długa odpowiedź: Nie, ale może

Za adres IP odpowiada wyłącznie system operacyjny. Dlatego wirtualna struktura utrzymująca system operacyjny nie ma pojęcia o stosie TCP / IP, chyba że istnieją symbiotyczne dodatki do struktury, takie jak Hyper-V i dodatkowe narzędzia gościa VMware (dzięki todda.speot.is w komentarzach poniżej) . Nie różni się niczym od przeglądania plików na maszynie wirtualnej bez uprzedniego uruchomienia.

Technicznie rzecz biorąc, jeśli VM opiera się na DHCP, to mógłby szukać serwera DHCP (prawdopodobnie routera sieci'S) za ostatni dzierżawy, która została przekazana na zewnątrz na adres MAC wirtualnej karty sieciowej, aby uzyskać dobry pomysł, co IP będzie prawdopodobnie być przy następnym uruchomieniu. Zakłada się, że ten sam adres IP nie został przekazany innemu urządzeniu pomiędzy, kiedy spojrzałeś na historię dzierżawy, a kiedy uruchomiono maszynę wirtualną.


1
Argh. Miałem nadzieję, że VMware ma pewne haczyki do systemu operacyjnego, które to zapewnią. :( Nie mam dostępu do korporacyjnego DHCP, więc nie mam pojęcia, ponieważ nie mam również dostępu do faktycznego systemu operacyjnego.
Adron,

Hiperwizor może podłączyć się i uzyskać adres IP, Hyper V robi to z dodatkami gości. I wydaje się, że niektóre smaki VMware też ci powiedzą, kb.vmware.com/Platform/Publishing/images/1006098.JPG - ale, jak powiedział WesleyDavid, tak naprawdę to nie odpowiedzialność hiperwizora to martwić się o to.
ta.speot.is

46

VMWare zapewnia, co nie dziwi, wbudowane narzędzie do tego vmrun. Jest poniżej, /Applications/VMware Fusion.app/Contents/Library/vmrunchoć trochę się zmienił w innych wydaniach Fusion.

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

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

7
To powinna być zaakceptowana odpowiedź. Działał idealnie.
Michael Potter

2
Ładny! vmrunjest domyślnie w ŚCIEŻCE mojego Maca, więc vmrun getGuestIPAddress "$(vmrun list | grep vmx)"dołącz cytaty!
Big Rich

Najwyraźniej narzędzia VMWare muszą działać na maszynie wirtualnej. (Fusion V8.5)
Laryx Decidua

10

Oto wskazówka na wypadek, gdyby komukolwiek to pomogło. Zainstaluj avahi-daemonna maszynie wirtualnej. Umożliwia to połączenie za pośrednictwem nazwy hosta vmname.local, gdzie vmnamejest nazwa maszyny wirtualnej. W moim przypadku nazwa maszyny wirtualnej to baremetali na hoście mogę uruchomić:

ssh baremetal.local

Nie musisz znać adresu IP maszyny wirtualnej. :)


1
Fajny pomysł, ale co z maszynami wirtualnymi, które działają w systemach operacyjnych, w których avahi-daemonsą niedostępne? Na przykład przychodzi na myśl system Windows ... :-)
Laryx Decidua

4

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 listpowinno wypisywać te informacje. To nie jest wada ...

Ale tak czy inaczej, oto jak można się tego dowiedzieć. Najpierw uruchom ifconfigna komputerze Mac (być może ipconfigzrobił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 500opcja mówi pingowi, aby poczekał tylko pół sekundy na odpowiedź (prawdopodobnie prawdopodobnie użyłby jeszcze mniej), i -c 1nakazuje 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).


1
Dzięki nmap szybciej odnajdujesz adresy IP ;-)nmap -sP 192.168.123.*
Robert Reiz

4

Jak powiedział Mikhail T., „Ponieważ VMWare zapewnia NAT, powinien być w stanie powiedzieć nam, dla jakich adresów jest obecnie NAT”. Rzeczywiście:

W mojej instalacji VMware Fusion 6 vmnet-dhcpddemon zapisuje dzierżawę do plików /var/db/vmware/vmnet-dhcpd-vmnetX.leases, w których „X” to 1 i 8. Empirycznie :-) Ustaliłem, że powinienem szukać vmnet8. Oto fragment pliku dzierżawy /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";
}

Jest client-hostnameto nazwa maszyny wirtualnej, a liczba po słowie leaseto jej adres IP. Możesz przeanalizować te wpisy lub po prostu spojrzeć na najnowsze. Upewnij się, że umowa, na którą patrzysz, jest nadal ważna.


2

Moim rozwiązaniem tego było:

Po zainstalowaniu narzędzi VMware skonfiguruj udostępnianie, aby uzyskać dostęp do folderu (dowolnego folderu) z CentOS. Następnie zmodyfikuj / etc / sysconfig / network-scripts / ifup-post, aby dołączyć bieżącą datę i adres IP do pliku w tym folderze współdzielonym.

Jak to zrobić:

Zmodyfikuj: / etc / sysconfig / network-scripts / ifup-post

dodaj to przed ostatnim wierszem ifup-post („exit 0”):

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

Spowoduje to dołączenie twojego guest_ip.log do daty i wartości zwracanej przez ifconfig przy każdym uruchomieniu sieci.

W moim przypadku zdecydowałem się na grep dla prefiksu 192 na moim adresie IP, ponieważ wiem, że między moim domem a pracą zawsze jest to 192. Można to zrobić, dostosowując powyższe w następujący sposób:

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

„abyś mógł uzyskać dostęp do folderu (dowolnego folderu) z CentOS.”. Co z osobami, które 1) używają innych dystrybucji Linuksa, 2) używają systemów operacyjnych UNIX innych niż Linux, 3) używają systemów operacyjnych innych niż Unix, takich jak Windows, ... na swoich maszynach wirtualnych? :-)
Laryx Decidua

1

Uruchom w konsoli VM ipconfig(jeśli VM to Windows) lub ifconfig(jeśli VM to Linux).

IP eth0to adres IP, którego szukasz.


Pierwotne pytanie brzmiało „bez wchodzenia w system operacyjny działający na maszynie wirtualnej?” To mogło umknąć twojej uwadze.
Laryx Decidua,

To może nie odpowiedzieć na pytanie, ale skończyłem tutaj z nieco innym pytaniem i było pomocne.
jamie-wilson

1

Miałem ten sam problem podczas uruchamiania VMPlayer na Ubuntu 15.04. Moja maszyna wirtualna została ustawiona na NAT i chociaż mogłem określić jej adres IP, logując się do GUI i uruchamiając ifconfig na maszynie wirtualnej, nie mogłem pingować ani ssh.

Okazuje się, gdy VMPlayer został zainstalowany, nie włączył dhcp na adapterach vmnet1 i vmnet8. Rozwiązaniem było użycie interfejsu Ubuntu GUI do edycji połączeń sieciowych za pomocą „Edytuj połączenia”. Znajdź vmnet1 w ethernet i naciśnij przycisk edycji. W ustawieniach IPv4 włącz DHCP, zapisz i uruchom ponownie.

Teraz, jeśli uruchomisz ifconfig w linii poleceń, zauważysz, że vmnet1 ma adres IP. Teraz działa również SSHing do nat-ed VM z hosta.


0

Ze stron vmrun (wersja 1.14.4 build-3204469):

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

Należy jednak pamiętać, że aby to zadziałało, pakiet VMware Tools powinien być zainstalowany w systemie-gościu i tego kroku nie można wykonać bez zalogowania się w systemie-gościu. Możesz zainstalować narzędzia w „obrazie podstawowym” i tworzyć z niego nowe obrazy poprzez klonowanie. Następnie możesz użyć powyższego polecenia, aby uzyskać adres IP nowo utworzonych maszyn wirtualnych.


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.