如何使用VMware Fusion查找虚拟机的IP地址?


19

是否可以在不实际进入虚拟机上运行的操作系统的情况下使用VMware Fusion确定虚拟机的IP?我正在寻找菜单选项,命令行,否则,我可以使用VMware Fusion软件本身针对虚拟映像进行发布。

谢谢-阿德伦


如果您知道虚拟机NIC的MAC地址,则可以始终尝试利用主机的ARP缓存或反向ARP。
ta.speot.is 2011年

令人惊奇的是,vmware并未像其他vms那样使这种死角变得显而易见和容易!为avahi的答案而欢呼,如果您绝望了,请nmap,但仍然如此-VMware失败了!
nealmcb 2015年

Answers:


1

简短答案:否

长答案:不,但也许

IP地址纯粹是操作系统的责任。因此,拥有OS的虚拟框架对其中的TCP / IP堆栈一无所知,除非对该框架进行了共生的添加,例如Hyper-V和VMware的其他来宾工具(感谢todda.speot.is在下面的评论中) 。与不先启动虚拟机就浏览浏览文件没有太大不同。

从技术上讲,如果VM依赖DHCP,则可以在DHCP服务器(可能是LAN的路由器)中搜索最后一次租借,该租借已交付给虚拟NIC的MAC地址,以很好地了解IP 可能是下次启动时。假设您在查看租约历史记录和启动VM之间没有将相同的IP分配给另一台设备。


1
啊 我希望VMware在可以提供此功能的操作系统方面有所作为。:(我无法访问公司的DHCP,因此也不知道,因为我也无法访问实际的操作系统
。– Adron

系统管理程序可以挂接并获取IP地址,Hyper V通过其来宾添加来实现。看来kb.vmware.com/Platform/Publishing/images/1006098.JPG似乎也可以告诉您一些VMware 风格 -但是正如WesleyDavid所说,担心此事并不是管理程序的责任。
ta.speot.is 2011年

46

毫不奇怪,VMWare为此提供了一个内置工具vmrun/Applications/VMware Fusion.app/Contents/Library/vmrun尽管它在其他Fusion版本中有所改进,但仍处于劣势。

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

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

7
这应该是公认的答案。工作完美。
Michael Potter

2
真好!vmrun默认是在我的Mac的PATH中,因此vmrun getGuestIPAddress "$(vmrun list | grep vmx)",加引号!
大富翁

显然,VMWare Tools需要在VM中运行。(融合V8.5)
Laryx Decidua

10

如果有帮助,这里有个提示。avahi-daemon在虚拟机上安装。这使您可以通过hostname进行连接vmname.local,其中hostname vmname是虚拟机的名称。在我的情况下,VM的名称为,baremetal并且可以在主机上运行:

ssh baremetal.local

无需知道虚拟机的IP。:)


1
好主意,但是运行avahi-daemon不可用操作系统的VM 呢?比如说Windows……:-)
Laryx Decidua 2014年

4

可能-至少在通常情况下,为访客配置了NAT样式的网络。因为VMWare提供了NAT-ing,所以它应该能够告诉我们当前NAT-ing的地址。vmrun list应该会输出一些类似信息。那不是缺陷...

但是,无论如何,这是无论如何都可以找到的。首先,ifconfig在Mac上运行(也许ipconfig在Windows上也可以,但我尚未对其进行测试)。这将列出计算机上的所有网络接口-物理和虚拟。查找vmnet-ones。在我的Mac上,这产生了:

% 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

因此,我的客人的IP位于以下两个VM专用网络之一:192.168.82.0/24或192.168.123.0/24。在您的主机上,可能只有一个,幸运的您或两个以上-我们需要全部检查。这是一个非常简单的tcsh脚本,直接在命令行上输入了,为我做了。它会尝试ping通vmnet管理的所有C类专用网络中的每个地址,并在ping成功后结束。该-W 500选项告诉ping仅等待半秒以响应(可能使用更少的时间),并-c 1告诉它发送一个数据包:

% 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

上面的小脚本运行了一段时间,列出了所有无法到达不存在地址的尝试:

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

直到最终成功完成:

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à,我可以和我的客人一起聊天:

% ssh 192.168.123.130
Password:

现在,我只有一个来宾运行,因此第一个响应ping的IP地址是正确的。如果您一次运行多个guest虚拟机,则可能需要使用相同或相似的ping命令来构建所有此类有效专用IP地址的列表,然后尝试全部使用,直到您进入正确的guest虚拟机为止。

(而且,无论如何,对于基于NAT的地址,.130可能是一个很好的猜测。但是我不能肯定地说。)


1
使用nmap,您可以更快找到上行IP ;-)nmap -sP 192.168.123.*
Robert Reiz

4

正如Mikhail T.所说:“因为VMWare提供了NAT-ing,所以它应该能够告诉我们目前NAT-ing的地址是什么。” 确实可以:

在我的VMware Fusion 6安装中,vmnet-dhcpd守护程序将其租约写入文件/var/db/vmware/vmnet-dhcpd-vmnetX.leases,其中“ X”为1和8。凭经验:-)我确定应该寻找的是vmnet8。这是租赁文件的摘录/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";
}

client-hostname是虚拟机的名称,字后的数字lease是它的IP。您可以解析这些条目,也可以仅查看最新条目。确保您正在查看的租约仍然有效。


2

我对此的解决方案是:

一旦安装了VMware工具,请配置共享,以便您可以从CentOS访问一个文件夹(任何文件夹)。然后,修改/ etc / sysconfig / network-scripts / ifup-post以将您当前的日期和IP地址附加到此共享文件夹中的文件中。

这该怎么做:

修改:/ etc / sysconfig / network-scripts / ifup-post

在ifup-post(“ exit 0”)的最后一行之前添加:

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

每次网络启动时,这都会在guest_ip.log后面附加ifconfig的日期和返回值。

就我而言,我决定在我的IP地址上使用grep前缀192,因为我知道在我的住所和工作之间始终为192。这可以通过以下方法进行调整:

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

“以便您可以从CentOS访问一个文件夹(任何文件夹)。”。那些1)使用其他Linux发行版,2)使用Linux以外的UNIX操作系统,3)在其VM中使用非Unix操作系统(例如Windows)的人呢?:-)
Laryx Decidua 2014年

1

在VM控制台ipconfig(如果VM是Windows)或ifconfig(如果VM是Linux)中运行。

IP eth0是您要查找的IP地址。


最初的问题是“实际上没有进入虚拟机上运行的操作系统吗?” 这可能会引起您的注意。
Laryx Decidua 2014年

它可能无法回答问题,但是我在这里最后提出了一个稍有不同的问题,这很有帮助。
jamie-wilson

1

在Ubuntu 15.04上运行VMPlayer时遇到相同的问题。我的虚拟机设置为NAT,尽管我可以通过登录gui并在VM中运行ifconfig来确定其IP地址,但无法对其进行ping或ssh操作。

原来,安装VMPlayer时,它没有在vmnet1和vmnet8适配器上启用dhcp。解决方案是使用ubuntu gui通过“编辑连接”来编辑网络连接。在以太网下找到vmnet1,然后单击“编辑”按钮。在IPv4设置下,启用DHCP,保存并重新启动。

现在,如果您在命令行上运行ifconfig,您会注意到vmnet1有一个IP地址。现在也可以从主机通过SSH连接到nat-ed VM。


0

从vmrun(版本1.14.4 build-3204469)的手册页中:

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

但是,请记住,要使此功能正常运行,应在来宾操作系统中安装VMware Tools套件,并且必须登录到来宾OS才能完成此步骤。您可以将工具安装在“基础映像”中,并通过克隆从中创建新映像。然后,您可以使用上述命令获取新创建的VM的IP地址。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.