是否可以在不实际进入虚拟机上运行的操作系统的情况下使用VMware Fusion确定虚拟机的IP?我正在寻找菜单选项,命令行,否则,我可以使用VMware Fusion软件本身针对虚拟映像进行发布。
谢谢-阿德伦
是否可以在不实际进入虚拟机上运行的操作系统的情况下使用VMware Fusion确定虚拟机的IP?我正在寻找菜单选项,命令行,否则,我可以使用VMware Fusion软件本身针对虚拟映像进行发布。
谢谢-阿德伦
Answers:
IP地址纯粹是操作系统的责任。因此,拥有OS的虚拟框架对其中的TCP / IP堆栈一无所知,除非对该框架进行了共生的添加,例如Hyper-V和VMware的其他来宾工具(感谢todda.speot.is在下面的评论中) 。与不先启动虚拟机就浏览浏览文件没有太大不同。
从技术上讲,如果VM依赖DHCP,则可以在DHCP服务器(可能是LAN的路由器)中搜索最后一次租借,该租借已交付给虚拟NIC的MAC地址,以很好地了解IP 可能是下次启动时。假设您在查看租约历史记录和启动VM之间没有将相同的IP分配给另一台设备。
毫不奇怪,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
vmrun
默认是在我的Mac的PATH中,因此vmrun getGuestIPAddress "$(vmrun list | grep vmx)"
,加引号!
如果有帮助,这里有个提示。avahi-daemon
在虚拟机上安装。这使您可以通过hostname进行连接vmname.local
,其中hostname vmname
是虚拟机的名称。在我的情况下,VM的名称为,baremetal
并且可以在主机上运行:
ssh baremetal.local
无需知道虚拟机的IP。:)
avahi-daemon
不可用操作系统的VM 呢?比如说Windows……:-)
可能-至少在通常情况下,为访客配置了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可能是一个很好的猜测。但是我不能肯定地说。)
nmap -sP 192.168.123.*
正如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。您可以解析这些条目,也可以仅查看最新条目。确保您正在查看的租约仍然有效。
我对此的解决方案是:
一旦安装了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
在VM控制台ipconfig
(如果VM是Windows)或ifconfig
(如果VM是Linux)中运行。
IP eth0
是您要查找的IP地址。
在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。
arp -a| grep vmnet
? (172.16.65.132) at 0:c:29:83:1:e0 on vmnet8 ifscope [ethernet]