Wie finde ich die IP-Adresse einer virtuellen Maschine mit VMware Fusion?

19

Kann ich mithilfe von VMware Fusion die IP einer virtuellen Maschine ermitteln, ohne das Betriebssystem aufzurufen, das auf der virtuellen Maschine ausgeführt wird? Ich suche nach einer Menüoption, einer Befehlszeile oder einer anderen Option, die ich mit der VMware Fusion-Software selbst für das virtuelle Image ausgeben kann.

Vielen Dank - Adron

Adron
quelle
Wenn Sie die MAC-Adresse der Netzwerkkarte der virtuellen Maschine kennen, können Sie jederzeit versuchen, den ARP-Cache Ihrer Host-Maschine zu nutzen oder ARP umzukehren.
ta.speot.is
Es ist erstaunlich, dass VMware diesen Umfall nicht so offensichtlich und einfach macht wie andere VMs! Ein Hoch auf die Avahi-Antwort und ein kurzer Blick, wenn Sie verzweifelt sind, aber dennoch - Großer Fehler, VMware!
Nealmcb

Antworten:

1

Kurze Antwort: Nein

Lange Antwort: Nein, aber vielleicht

Eine IP-Adresse liegt ausschließlich in der Verantwortung eines Betriebssystems. Daher hat das virtuelle Framework, in dem sich das Betriebssystem befindet, keine Vorstellung vom TCP / IP-Stack, es sei denn, es gibt symbiotische Ergänzungen zum Framework, z. B. Hyper-V und die zusätzlichen Gast-Tools von VMware (dank todda.speot.is in den Kommentaren unten). . Es ist nicht viel anders als die Dateien auf einer VM durchsuchen zu wollen, ohne sie zuerst zu starten.

Technisch gesehen , wenn die VM auf DHCP angewiesen ist , Sie könnten Ihren DHCP - Server suchen (wahrscheinlich Router Ihrer LANs) für den letzten Mietvertrag , die an der MAC - Adresse des virtuellen NIC ausgehändigt wurden eine gute Vorstellung davon zu bekommen , was die IP würde wahrscheinlich die seine Das nächste Mal wird es gestartet. Dies setzt voraus, dass dieselbe IP-Adresse nicht zwischenzeitlich an ein anderes Gerät weitergegeben wurde, als Sie den Lease-Verlauf und den Zeitpunkt des Starts der VM betrachteten.

Wesley
quelle
1
Argh. Ich hatte gehofft, dass VMware einige Hooks in das Betriebssystem hat, die dies ermöglichen würden. :( Ich habe keinen Zugriff auf das DHCP des Unternehmens, daher habe ich keine Ahnung, da ich auch keinen Zugriff auf das aktuelle Betriebssystem habe.
Adron,
Ein Hypervisor kann sich einhängen und die IP-Adresse abrufen, Hyper V erledigt dies mit seinen Guest Additions. Und es sieht so aus, als würden Ihnen einige Varianten von VMware auch sagen, dass es nicht die Verantwortung des Hypervisors ist, sich darüber Gedanken zu machen.
ta.speot.is
46

Es überrascht nicht, dass VMWare ein eingebautes Tool dafür bereitstellt vmrun. Es ist unter, /Applications/VMware Fusion.app/Contents/Library/vmrunobwohl es sich in anderen Fusion-Releases ein wenig bewegt hat.

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

🍺  vmrun getGuestIPAddress ~/.docker/machine/machines/myvm.vmx
    172.16.213.128
dch
quelle
7
Dies sollte die akzeptierte Antwort sein. Hat perfekt funktioniert.
Michael Potter
2
Nett! vmrunBefindet sich standardmäßig im PATH meines Mac vmrun getGuestIPAddress "$(vmrun list | grep vmx)", schließen Sie also die Anführungszeichen ein!
Big Rich
Anscheinend müssen VMWare-Tools in der VM ausgeführt werden. (Fusion V8.5)
Laryx Decidua
10

Hier ist ein Tipp für den Fall, dass es jemandem hilft. Installieren Sie avahi-daemonauf der VM. Auf diese Weise können Sie eine Verbindung über den Hostnamen herstellen vmname.local. Dabei vmnamehandelt es sich um den Namen Ihrer virtuellen Maschine. In meinem Fall lautet der Name der VM baremetalund auf dem Host kann ich Folgendes ausführen:

ssh baremetal.local

Keine Notwendigkeit, die IP der VM zu kennen. :)

berto
quelle
1
Gute Idee, aber was ist mit VMs, auf denen Betriebssysteme ausgeführt werden, auf denen avahi-daemonkeine verfügbar sind? Windows zum Beispiel kommt in den Sinn ... :-)
Laryx Decidua
4

Dies ist möglich - zumindest in dem üblichen Fall, in dem ein NAT-Netzwerk für den Gast konfiguriert ist. Da VMWare das NAT-ing bereitstellt, sollte es uns mitteilen können, für welche Adressen es derzeit NAT-ing bereitstellt. So etwas vmrun listsollte diese Information ausgeben. Dass es kein Fehler ist ...

Aber hier ist auf jeden Fall, wie man es herausfinden kann. Führen ifconfigSie das Programm zunächst auf Ihrem Mac aus (möglicherweise wird ipconfigdies auch unter Windows ausgeführt, ich habe es jedoch nicht getestet). Dies listet alle Netzwerkschnittstellen auf dem Computer auf - sowohl physische als auch virtuelle. Suche nach den vmnet-ones. Auf meinem Mac erzeugt dies:

% 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

Die IP meines Gastes befindet sich also in einem dieser beiden privaten VM-Netzwerke: entweder 192.168.82.0/24 oder 192.168.123.0/24. Auf Ihrem Host gibt es möglicherweise nur einen, glücklichen Menschen oder mehr als zwei - wir müssen sie alle überprüfen. Hier ist ein sehr einfaches tcsh-Skript, das direkt über die Befehlszeile eingegeben wurde und das für mich funktioniert hat. Es wird versucht, jede Adresse in allen von vmnet verwalteten privaten Klasse-C-Netzwerken per Ping zu erreichen, und wird beendet, wenn ein Ping erfolgreich war. Die -W 500Option weist ping an, nur eine halbe Sekunde auf eine Antwort zu warten (könnte wahrscheinlich noch weniger Zeit in Anspruch nehmen), und -c 1weist es an, genau ein Paket zu senden:

% 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

Das obige kleine Skript lief einige Zeit und listete alle erfolglosen Versuche auf, die nicht existierenden Adressen zu erreichen:

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

Bis es endlich gelang und zu Ende ging:

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à, ich konnte in meinen Gast hineinschauen:

% ssh 192.168.123.130
Password:

Jetzt hatte ich nur einen Gast am Laufen - die erste IP-Adresse, die auf einen Ping antwortete, war also die richtige. Wenn Sie mehrere Gäste gleichzeitig ausführen, müssen Sie möglicherweise denselben oder einen ähnlichen Ping-Befehl verwenden, um eine Liste aller dieser gültigen privaten IP-Adressen zu erstellen, und versuchen Sie es dann mit allen, bis Sie den richtigen Gast gefunden haben ...

(Und vielleicht ist .130 sowieso eine gute Vermutung für NAT-basierte Adressen. Aber ich kann nicht sicher sagen.)

Mikhail T.
quelle
1
Mit nmap findest du die up IPs schneller ;-)nmap -sP 192.168.123.*
Robert Reiz
4

Wie Mikhail T. sagte: "Da VMWare das NAT-ing bereitstellt, sollte es uns mitteilen können, für welche Adressen es derzeit NAT-ing ist." In der Tat tut es:

In meiner VMware Fusion 6-Installation vmnet-dhcpdschreibt der Dämon seine Leases in die Dateien /var/db/vmware/vmnet-dhcpd-vmnetX.leases, wobei "X" 1 und 8 ist. Empirisch :-) Ich habe festgestellt, dass es sich um vmnet8 handelt, nach dem ich suchen sollte. Hier ist ein Auszug aus der Mietvertragsdatei /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";
}

Das client-hostnameist der Name der VM und die Nummer nach dem Wort leaseist ihre IP. Sie können diese Einträge analysieren oder sich einfach die neuesten ansehen. Stellen Sie sicher, dass der von Ihnen angezeigte Mietvertrag noch gültig ist.

Laryx Decidua
quelle
2

Meine Lösung dafür war:

Konfigurieren Sie nach der Installation der VMware-Tools die Freigabe, damit Sie von CentOS aus auf einen Ordner (einen beliebigen Ordner) zugreifen können. Ändern Sie anschließend / etc / sysconfig / network-scripts / ifup-post, um das aktuelle Datum und die aktuelle IP-Adresse an eine Datei in diesem freigegebenen Ordner anzuhängen.

Wie macht man das:

Ändern Sie Folgendes: / etc / sysconfig / network-scripts / ifup-post

füge dies vor der letzten Zeile von ifup-post ein ("exit 0"):

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

Damit wird Ihrem guest_ip.log bei jedem Start des Netzwerks das Datum und der Rückgabewert von ifconfig angehängt.

In meinem Fall habe ich mich entschieden, ein Präfix von 192 für meine IP-Adresse einzugeben, da ich weiß, dass es zwischen meinem Zuhause und meiner Arbeit immer 192 ist.

date >> /path/to/shared/folder/guest_ip.log
ifconfig | grep 192 >> /path/to/shared/folder/guest_ip.log
Mr.BassHatt
quelle
msgstr "damit Sie von CentOS aus auf einen Ordner (einen beliebigen Ordner) zugreifen können." Was ist mit den Leuten, die 1) andere Linux-Distributionen verwenden, 2) andere UNIX-Betriebssysteme als Linux verwenden, 3) Nicht-Unix-Betriebssysteme wie Windows in ihren VMs verwenden? :-)
Laryx Decidua
1

In der VM-Konsole ausführen ipconfig(wenn VM Windows ist) oder ifconfig(wenn VM Linux ist).

IP von eth0ist die IP-Adresse, nach der Sie suchen.

VM-Benutzer
quelle
Die ursprüngliche Frage lautete "ohne tatsächlich das auf der virtuellen Maschine ausgeführte Betriebssystem zu betreten?". Dies könnte Ihrer Aufmerksamkeit entgangen sein.
Laryx Decidua
Es könnte sein, dass die Frage nicht beantwortet wurde, aber ich kam zu einer etwas anderen Frage und sie war hilfreich.
Jamie-Wilson
1

Ich hatte das gleiche Problem beim Ausführen von VMPlayer unter Ubuntu 15.04. Meine virtuelle Maschine war auf NAT eingestellt, und obwohl ich ihre IP-Adresse ermitteln konnte, indem ich mich bei der GUI anmeldete und ifconfig auf der VM ausführte, konnte ich weder Ping noch SSH ausführen.

Bei der Installation von VMPlayer wurde DHCP auf den Adaptern vmnet1 und vmnet8 nicht aktiviert. Lösung war, die Ubuntu-GUI zu verwenden, um die Netzwerkverbindungen mit "Edit Connections" zu bearbeiten. Suchen Sie unter Ethernet nach vmnet1 und klicken Sie auf die Schaltfläche Bearbeiten. Aktivieren Sie unter IPv4-Einstellungen DHCP, speichern Sie und starten Sie neu.

Wenn Sie nun ifconfig in der Befehlszeile ausführen, werden Sie feststellen, dass vmnet1 eine IP-Adresse hat. Das SSHing in die nat-ed VM vom Host aus funktioniert nun ebenfalls.

Atifm
quelle
0

Aus den Hilfeseiten von vmrun (Version 1.14.4 build-3204469):

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

Beachten Sie jedoch, dass die VMware Tools-Suite auf dem Gastbetriebssystem installiert sein muss und dieser Schritt nicht ohne Protokollierung auf dem Gastbetriebssystem ausgeführt werden kann. Sie können die Tools in einem "Basis-Image" installieren und durch Klonen neue Images daraus erstellen. Anschließend können Sie den obigen Befehl verwenden, um die IP-Adresse der neu erstellten VMs abzurufen.

pldimitrov
quelle
0
arp -a| grep vmnet 
? (172.16.65.132) at 0:c:29:83:1:e0 on vmnet8 ifscope [ethernet]
Mohammad Shahid Siddiqui
quelle