Bagaimana cara menemukan alamat IP mesin virtual menggunakan VMware Fusion?


19

Bisakah saya menentukan IP mesin virtual menggunakan VMware Fusion tanpa benar-benar memasuki sistem operasi yang berjalan pada mesin virtual? Saya mencari opsi menu, baris perintah, atau yang bisa saya keluarkan terhadap gambar virtual dengan VMware Fusion Software itu sendiri.

Terima kasih - Adron


Jika Anda tahu alamat MAC dari mesin virtual NIC, Anda selalu dapat mencoba memanfaatkan cache ARP mesin host Anda, atau membalikkan ARP.
ta.speot.is

Sungguh menakjubkan bahwa vmware tidak membuat drop-dead ini jelas dan mudah seperti vms lainnya! Bersorak untuk jawaban avahi, dan nmap jika Anda putus asa, tapi tetap saja - Gagal, VMware!
nealmcb

Jawaban:


1

Jawaban Singkat: Tidak

Jawaban Panjang: Tidak, tapi mungkin

Alamat IP adalah murni tanggung jawab OS. Oleh karena itu, kerangka kerja virtual yang memegang OS tidak memiliki gagasan tentang tumpukan TCP / IP di dalam kecuali ada penambahan simbiosis ke kerangka kerja seperti Hyper-V dan alat tamu tambahan VMware (terima kasih kepada todda.speot.is dalam komentar di bawah) . Ini tidak jauh berbeda dari keinginan untuk menelusuri file pada VM tanpa memulai terlebih dahulu.

Secara teknis, jika VM bergantung pada DHCP, Anda bisa mencari server DHCP Anda (kemungkinan router LAN Anda) untuk sewa terakhir yang dibagikan ke alamat MAC dari NIC virtual untuk mendapatkan ide bagus tentang apa IP mungkin akan menjadi lain kali diluncurkan. Itu dengan asumsi bahwa IP yang sama tidak dibagikan ke perangkat lain di antara ketika Anda melihat riwayat sewa dan ketika VM mulai.


1
Argh. Saya berharap bahwa VMware memiliki beberapa kait ke dalam OS yang akan menyediakan itu. :( Saya tidak punya akses ke DHCP perusahaan, jadi tidak tahu karena saya juga tidak punya akses ke OS yang sebenarnya.
Adron

Hypervisor dapat menghubungkan dan mendapatkan alamat IP, Hyper V melakukannya dengan Penambahan Tamu. Dan sepertinya beberapa rasa VMware akan memberi tahu Anda, juga kb.vmware.com/Platform/Publishing/images/1006098.JPG - tetapi seperti yang dikatakan WesleyDavid, bukan tanggung jawab hypervisor untuk khawatir tentang hal ini.
ta.speot.is

46

VMWare menyediakan, tidak mengherankan, alat bawaan untuk ini vmrun,. Itu berada di bawah /Applications/VMware Fusion.app/Contents/Library/vmrunmeskipun telah bergerak sedikit di rilis Fusion lainnya.

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

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

7
Ini harus menjadi jawaban yang diterima. Bekerja dengan sempurna.
Michael Potter

2
Bagus! vmrunada di PATH Mac saya secara default, jadi vmrun getGuestIPAddress "$(vmrun list | grep vmx)", sertakan kutipannya!
Big Rich

Rupanya VMWare Tools perlu dijalankan di VM. (Fusion V8.5)
Laryx Decidua

10

Berikut tip untuk berjaga-jaga. Instal avahi-daemondi VM. Ini memungkinkan Anda untuk terhubung melalui hostname vmname.local, di mana vmnamenama mesin virtual Anda. Dalam kasus saya, nama VM adalah baremetaldan pada host saya dapat menjalankan:

ssh baremetal.local

Tidak perlu tahu IP VM. :)


1
Ide bagus tapi bagaimana dengan VM yang menjalankan sistem operasi di mana avahi-daemontidak tersedia? Windows misalnya terlintas dalam pikiran ... :-)
Laryx Decidua

4

Itu mungkin - setidaknya, dalam kasus umum, di mana jaringan gaya-NAT dikonfigurasikan untuk tamu. Karena VMWare menyediakan NAT-ing, itu harus bisa memberi tahu kami, untuk apa alamat NAT-ing saat ini. Sesuatu seperti vmrun listseharusnya mengeluarkan informasi ini. Itu tidak cacat ...

Tetapi, bagaimanapun juga, ini adalah bagaimana orang dapat mengetahuinya. Pertama, jalankan ifconfigdi Mac Anda (mungkin, ipconfigakan melakukan hal yang sama pada Windows, tapi saya belum mengujinya). Ini akan mencantumkan semua antarmuka jaringan pada mesin - baik fisik maupun virtual. Cari vmnet-yang. Di Mac saya ini menghasilkan:

% 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

Jadi, IP tamu saya ada di salah satu dari dua jaringan pribadi VM ini: 192.168.82.0/24 atau 192.168.123.0/24. Di host Anda mungkin hanya ada satu, beruntung, atau lebih dari dua - kami perlu memeriksa semuanya. Ini adalah skrip tcsh yang sangat sederhana, yang dimasukkan langsung pada command-line, yang melakukannya untuk saya. Ia mencoba untuk melakukan ping setiap alamat di semua jaringan pribadi kelas-C yang dikelola oleh vmnet dan berakhir, ketika ping berhasil. The -W 500pilihan memberitahu ping menunggu hanya setengah detik untuk respon (bisa, mungkin, menggunakan bahkan kurang), dan -c 1mengatakan itu untuk mengirim tepat satu paket:

% 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

Skrip kecil di atas berjalan untuk beberapa waktu yang mencantumkan semua upaya gagal untuk mencapai alamat yang tidak ada:

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

Sampai akhirnya berhasil dan selesai:

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

Voa, saya bisa ssh ke tamu saya:

% ssh 192.168.123.130
Password:

Sekarang, saya hanya punya satu tamu berjalan - jadi alamat IP pertama untuk menanggapi ping adalah yang benar. Jika Anda menjalankan beberapa tamu sekaligus, Anda mungkin perlu menggunakan perintah ping yang sama atau serupa untuk membuat daftar semua alamat IP pribadi yang valid dan kemudian mencoba semuanya sampai Anda masuk ke tamu yang benar ...

(Dan, mungkin, .130 adalah tebakan yang bagus untuk alamat berbasis NAT. Tapi saya tidak bisa mengatakan dengan pasti.)


1
Dengan nmap Anda menemukan IP lebih cepat ;-)nmap -sP 192.168.123.*
Robert Reiz

4

Seperti yang dikatakan Mikhail T., "Karena VMWare menyediakan NAT-ing, itu harus bisa memberi tahu kami, alamat apa itu saat ini NAT-ing untuk." Memang benar:

Dalam instalasi VMware Fusion 6 saya, vmnet-dhcpddaemon menulis leasing ke file /var/db/vmware/vmnet-dhcpd-vmnetX.leases, di mana "X" adalah 1 dan 8. Secara empiris :-) Saya menetapkan bahwa itu adalah vmnet8 yang harus saya cari. Berikut ini kutipan dari file sewa /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";
}

Ini client-hostnameadalah nama VM dan nomor setelah kata leaseadalah IP-nya. Anda dapat menguraikan entri ini atau cukup melihat yang terbaru. Pastikan sewa yang Anda lihat masih berlaku.


2

Solusi saya untuk ini adalah:

Setelah Anda menginstal alat VMware, konfigurasikan berbagi, sehingga Anda dapat mengakses folder (folder apa saja) dari CentOS. Kemudian, modifikasi / etc / sysconfig / network-scripts / ifup-post untuk menambahkan tanggal Anda saat ini & alamat ip ke file di folder bersama ini.

Bagaimana cara melakukannya:

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

tambahkan ini sebelum baris terakhir ifup-post ("exit 0"):

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

Ini akan menambahkan guest_ip.log Anda dengan tanggal dan mengembalikan nilai ifconfig setiap kali jaringan muncul.

Dalam kasus saya, saya memutuskan untuk mencari awalan 192 pada alamat ip saya, karena saya tahu bahwa antara rumah dan kantor saya, selalu tahun 192. Ini dapat dilakukan dengan menyesuaikan di atas sebagai berikut:

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

"sehingga Anda dapat mengakses folder (folder apa saja) dari CentOS." Bagaimana dengan orang-orang yang 1) menggunakan distribusi Linux lain, 2) menggunakan sistem operasi UNIX selain Linux, 3) menggunakan sistem operasi non-Unix seperti Windows, ... di VM mereka? :-)
Laryx Decidua

1

Jalankan di konsol VM ipconfig(jika VM adalah Windows) atau ifconfig(jika VM adalah Linux).

IP dari eth0adalah alamat IP yang Anda cari.


Pertanyaan aslinya adalah "tanpa benar-benar memasuki sistem operasi yang berjalan pada mesin virtual?" Ini mungkin luput dari perhatian Anda.
Laryx Decidua

Mungkin tidak menjawab pertanyaan, tetapi saya berakhir di sini dengan pertanyaan yang sedikit berbeda dan itu sangat membantu.
jamie-wilson

1

Saya memiliki masalah yang sama saat menjalankan VMPlayer di Ubuntu 15.04. Mesin virtual saya disetel ke NAT, dan meskipun saya bisa menentukan alamat ip-nya dengan masuk ke gui dan menjalankan ifconfig di VM, saya tidak bisa melakukan ping atau ssh ke dalamnya.

Ternyata ketika VMPlayer diinstal, itu tidak mengaktifkan dhcp pada adaptor vmnet1 dan vmnet8. Solusinya adalah menggunakan ubuntu gui untuk mengedit koneksi jaringan dengan "Edit Koneksi". Temukan vmnet1 di bawah ethernet, dan tekan tombol edit. Di bawah pengaturan IPv4, aktifkan DHCP, simpan dan reboot.

Sekarang jika Anda menjalankan ifconfig pada baris perintah, Anda akan melihat bahwa vmnet1 memiliki alamat ip. SSHing ke nat-ed VM dari host sekarang juga berfungsi.


0

Dari halaman manual vmrun (versi 1.14.4 build-3204469):

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

Namun, perlu diingat bahwa agar ini berfungsi, suite VMware Tools harus diinstal di OS tamu dan langkah ini tidak dapat dilakukan tanpa masuk ke OS tamu. Anda dapat menginstal alat dalam "gambar dasar" dan membuat gambar baru darinya melalui kloning. Kemudian Anda dapat menggunakan perintah di atas untuk mendapatkan alamat IP dari VM yang baru dibuat.


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.