Come posso trovare l'indirizzo IP di una macchina virtuale usando VMware Fusion?


19

Posso determinare l'IP di una macchina virtuale utilizzando VMware Fusion senza effettivamente accedere al sistema operativo in esecuzione sulla macchina virtuale? Sto cercando un'opzione di menu, riga di comando o altrimenti che posso emettere sull'immagine virtuale con il software VMware Fusion stesso.

Grazie - Adron


Se si conosce l'indirizzo MAC della scheda NIC della macchina virtuale, è sempre possibile provare a sfruttare la cache ARP della macchina host o invertire ARP.
ta.speot.è il

È sorprendente che vmware non renda questo drop-dead ovvio e facile come altri vms! Saluti per la risposta avahi e nmap se sei disperato, ma comunque - Grande fallimento, VMware!
nealmcb,

Risposte:


1

Risposta breve: No

Risposta lunga: No ma forse

Un indirizzo IP è puramente responsabilità di un sistema operativo. Pertanto, il framework virtuale che contiene il sistema operativo non ha idea dello stack TCP / IP all'interno a meno che non vi siano aggiunte simbiotiche al framework come Hyper-V e gli strumenti guest aggiuntivi di VMware (grazie a todda.speot.is nei commenti seguenti) . Non è molto diverso dal voler sfogliare i file su una VM senza avviarlo prima.

Tecnicamente, se la VM si basa su DHCP, si potrebbe cercare il server DHCP (probabilmente router vostra LAN) per l'ultimo contratto di locazione che è stato consegnato al l'indirizzo MAC della scheda di rete virtuale per ottenere una buona idea di ciò che il PI sarebbe probabilmente essere il la prossima volta che si avvia. Ciò presuppone che lo stesso IP non sia stato distribuito a un altro dispositivo tra quando hai guardato la cronologia del lease e quando la VM è stata avviata.


1
Argh. Speravo che VMware avesse alcuni hook nel sistema operativo che lo avrebbero fornito. :( Non ho accesso al DHCP aziendale, quindi non ne ho idea dal momento che non ho nemmeno accesso al sistema operativo reale.
Adron,

Un hypervisor può collegarsi e ottenere l'indirizzo IP, Hyper V lo fa con le sue Guest Additions. E sembra che anche alcune versioni di VMware ti diranno kb.vmware.com/Platform/Publishing/images/1006098.JPG - ma come ha detto WesleyDavid, non è proprio responsabilità dell'hypervisor preoccuparsi di questo.
ta.speot.is

46

VMWare fornisce, non a caso, uno strumento integrato per questo vmrun,. È sotto /Applications/VMware Fusion.app/Contents/Library/vmrunsebbene si sia spostato un po 'in altre versioni di Fusion.

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

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

7
Questa dovrebbe essere la risposta accettata. Ha funzionato perfettamente.
Michael Potter,

2
Bello! vmrunè nel PERCORSO del mio Mac di default, quindi vmrun getGuestIPAddress "$(vmrun list | grep vmx)"includi le virgolette!
Big Rich,

Apparentemente VMWare Tools deve essere eseguito nella VM. (Fusion V8.5)
Laryx Decidua,

10

Ecco un suggerimento nel caso in cui aiuti chiunque. Installa avahi-daemonsulla VM. Ciò ti consente di connetterti tramite il nome host vmname.local, dove si vmnametrova il nome della tua macchina virtuale. Nel mio caso, il nome della VM è baremetale sull'host posso eseguire:

ssh baremetal.local

Non è necessario conoscere l'IP della VM. :)


1
Bella idea, ma per quanto riguarda le macchine virtuali che eseguono sistemi operativi dove avahi-daemonnon è disponibile? Windows ad esempio mi viene in mente ... :-)
Laryx Decidua,

4

È possibile - almeno, nel caso comune, in cui la rete in stile NAT è configurata per il guest. Poiché VMWare fornisce il NAT-ing, dovrebbe essere in grado di dirci, per quali indirizzi è attualmente NAT-ing. Qualcosa del genere vmrun listdovrebbe fornire queste informazioni. Che non lo sia è un difetto ...

Ma, in ogni caso, ecco come si può scoprire comunque. Innanzitutto, esegui ifconfigsul tuo Mac (forse, ipconfigfarebbe lo stesso su Windows, ma non l'ho provato). Questo elencherà tutte le interfacce di rete sulla macchina, sia fisiche che virtuali. Cerca quelli vmnet. Sul mio Mac questo produce:

% 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

Quindi, l'IP del mio ospite è su una di queste due reti private VM: 192.168.82.0/24 o 192.168.123.0/24. Sul tuo host potrebbe essercene solo uno, per fortuna, o più di due: dobbiamo controllarli tutti. Ecco uno script tcsh molto semplice, inserito direttamente dalla riga di comando, che l'ha fatto per me. Tenta di eseguire il ping di ciascun indirizzo in tutte le reti private di classe C gestite da vmnet e termina quando un ping ha esito positivo. L' -W 500opzione dice a ping di attendere solo mezzo secondo per una risposta (potrebbe, probabilmente, usare anche meno) e gli -c 1dice di inviare esattamente un pacchetto:

% 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

Il piccolo script sopra è stato eseguito per qualche tempo elencando tutti i tentativi falliti di raggiungere gli indirizzi inesistenti:

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
...

Fino a quando finalmente è riuscito e finito:

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à, sono stato in grado di entrare nel mio ospite:

% ssh 192.168.123.130
Password:

Ora avevo un solo guest in esecuzione, quindi il primo indirizzo IP per rispondere a un ping era quello giusto. Se si eseguono più guest contemporaneamente, potrebbe essere necessario utilizzare lo stesso comando ping o simile per creare un elenco di tutti questi indirizzi IP privati ​​validi e quindi provarli tutti fino a quando non si arriva al guest corretto ...

(E, forse, .130 è comunque una buona ipotesi per gli indirizzi basati su NAT. Ma non posso dirlo con certezza.)


1
Con nmap trovi gli IP più veloci ;-)nmap -sP 192.168.123.*
Robert Reiz,

4

Come ha detto Mikhail T., "Poiché VMWare fornisce il NAT-ing, dovrebbe essere in grado di dirci, a cosa si rivolge attualmente il NAT-ing". Infatti fa:

Nella mia installazione di VMware Fusion 6, il vmnet-dhcpddemone scrive i suoi contratti di locazione nei file /var/db/vmware/vmnet-dhcpd-vmnetX.leases, dove "X" è 1 e 8. Empiricamente :-) Ho stabilito che è vmnet8 che dovrei cercare. Ecco un estratto dal file di leasing /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";
}

Il client-hostnameè il nome della macchina virtuale e il numero dopo la parola leaseè il suo IP. Puoi analizzare queste voci o semplicemente guardare quelle più recenti. Assicurati che il contratto di locazione che stai guardando sia ancora valido.


2

La mia soluzione a questo era:

Dopo aver installato gli strumenti VMware, configura la condivisione, in modo da poter accedere a una cartella (qualsiasi cartella) da CentOS. Quindi, modifica / etc / sysconfig / network-scripts / ifup-post per aggiungere la data e l'indirizzo IP correnti a un file in questa cartella condivisa.

Come fare questo:

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

aggiungilo prima dell'ultima riga di ifup-post ("exit 0"):

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

Questo aggiungerà il tuo guest_ip.log con la data e il valore di ritorno di ifconfig ogni volta che la rete si presenta.

Nel mio caso, ho deciso di richiedere un prefisso 192 sul mio indirizzo IP, poiché so che tra casa e lavoro, è sempre 192. Questo può essere fatto regolando quanto sopra come segue:

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

"in modo da poter accedere a una cartella (qualsiasi cartella) da CentOS.". Che dire di quelle persone che 1) usano altre distribuzioni Linux, 2) usano sistemi operativi UNIX diversi da Linux, 3) usano sistemi operativi non Unix come Windows, ... nelle loro VM? :-)
Laryx Decidua,

1

Esegui nella console VM ipconfig(se VM è Windows) o ifconfig(se VM è Linux).

IP di eth0è l'indirizzo IP che stai cercando.


La domanda originale era "senza entrare effettivamente nel sistema operativo in esecuzione sulla macchina virtuale?" Questo potrebbe essere sfuggito alla tua attenzione.
Laryx Decidua,

Potrebbe non rispondere alla domanda, ma sono finito qui con una domanda leggermente diversa ed è stato utile.
Jamie-Wilson,

1

Ho avuto lo stesso problema durante l'esecuzione di VMPlayer su Ubuntu 15.04. La mia macchina virtuale era impostata su NAT e, sebbene potessi determinare il suo indirizzo IP accedendo alla GUI ed eseguendo ifconfig nella VM, non potevo eseguire il ping o ssh.

Viene visualizzato quando è installato VMPlayer, non ha abilitato dhcp sull'adattatore vmnet1 e vmnet8. La soluzione era usare la gui ubuntu per modificare le connessioni di rete con "Modifica connessioni". Trova vmnet1 in Ethernet e premi il pulsante Modifica. In Impostazioni IPv4, abilita DHCP, salva e riavvia.

Ora se esegui ifconfig dalla riga di comando, noterai che vmnet1 ha un indirizzo IP. Ora funziona anche SSHing nella VM natata dall'host.


0

Dalle manpage di vmrun (versione 1.14.4 build-3204469):

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

Tuttavia, tenere presente che affinché ciò funzioni, è necessario installare la suite VMware Tools nel sistema operativo guest e questo passaggio non può essere eseguito senza accedere al sistema operativo guest. È possibile installare gli strumenti in una "immagine di base" e creare nuove immagini da essa tramite la clonazione. Quindi è possibile utilizzare il comando sopra per ottenere l'indirizzo IP delle VM appena create.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.