我可以使用 VMware Fusion 确定虚拟机的 IP,而无需实际进入虚拟机上运行的操作系统吗?我正在寻找菜单选项、命令行或其他可以使用 VMware Fusion 软件本身针对虚拟映像发出的内容。
谢谢-Adron
答案1
简短回答:否
详细回答:不,但也许吧
IP 地址完全由操作系统负责。因此,承载操作系统的虚拟框架对 TCP/IP 堆栈一无所知除非框架中有共生附加功能,例如 Hyper-V 和 VMware 的附加客户机工具(感谢下面评论中的 todda.speot.is。)这与想要在不先启动虚拟机的情况下浏览虚拟机上的文件没有太大区别。
从技术上讲,如果虚拟机依赖于 DHCP,则可以搜索你的 DHCP 服务器(可能是你的 LAN 路由器),查找分配给虚拟网卡 MAC 地址的最后一个租约,以便更好地了解 IP 地址大概是下次启动时。这是假设在您查看租约历史记录和 VM 启动期间,同一 IP 没有被分配给另一台设备。
答案2
毫不奇怪,VMWare 为此提供了一个内置工具。vmrun
它位于下方,/Applications/VMware Fusion.app/Contents/Library/vmrun
尽管在其他 Fusion 版本中有所变动。
答案3
以下是一个提示,希望对大家有所帮助。avahi-daemon
在虚拟机上安装。这允许您通过 hostname 进行连接vmname.local
,其中vmname
是虚拟机的名称。在我的例子中,虚拟机的名称是baremetal
,在主机上我可以运行:
ssh baremetal.local
不需要知道虚拟机的 IP。:)
答案4
这是可能的——至少在为客户机配置 NAT 样式网络的常见情况下。由于 VMWare 提供 NAT,它应该能够告诉我们它当前正在为哪些地址进行 NAT。类似的东西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
瞧,我可以通过 ssh 进入我的客户端了:
% ssh 192.168.123.130
Password:
现在,我只运行了一个客户机——因此第一个响应 ping 的 IP 地址是正确的。如果您同时运行多个客户机,您可能需要使用相同或类似的 ping 命令来构建所有此类有效私有 IP 地址的列表,然后尝试所有 IP 地址,直到进入正确的客户机...
(而且,无论如何,.130 对于基于 NAT 的地址来说可能是一个不错的猜测。但我不能肯定地说。)