如何判断我是否在VMWARE虚拟机(从linux)中运行?

问题描述:

我有一台VMWARE ESX服务器。我在该服务器上运行Redhat虚拟机。我需要一种编程方式来测试我是否在虚拟机中运行。理想情况下,我想知道如何从Perl中做到这一点。如何判断我是否在VMWARE虚拟机(从linux)中运行?

请参阅“Detect virtualized OS from an application?”的答案。

VMWare有几个SDK,包括一个SDK for Perl

我认为(取决于esx的版本),您可以检查NIC的MAC地址。在VMWare NIC中运行的VM将有一个制造商字符串分配给VMWare,没有物理NIC MAC。 (我们试图欺骗MAC到VM许可证服务器,新版本不会让你这样做。)另外,这并不能保证你没有运行在一个伪造NIC的物理盒子上,看起来像VMWare,但无论如何,这在大多数情况下都是很奇怪的事情。

+0

Virtualbox可以让你输入你想要的任何MAC地址 – 2009-02-12 15:45:53

您不应该100%依赖于任何方法,因为它们是未公开的功能/错误 - 它们适用于某些主机操作系统和某些虚拟化解决方案,但不能保证它们将继续工作;事实上,虚拟化的整体观点应尽可能与真实金属无法区分。考虑到这一点,(在this similar question的接受答案中提到)似乎正在工作......暂时。

运行以下命令:

lspci | grep VMware 

它应该显示是这样的:

00:0f.0 VGA兼容控制器:VMware的SVGA II适配器

00:11.0 PCI桥:VMware PCI桥(rev 02)

00:15.0 PCI桥:VMware PCI Express根端口(rev 01)