2012-10-13 295 views
7

我不认为这个问题需要任何解释。 我正在编写一个可以启动虚拟机来模拟网络的软件。如果软件已经在虚拟机上运行,​​我想禁用此功能。如何检测脚本是否在虚拟机上运行?

我已阅读此帖子:How to detect if my application is running in a virtual machine? 但我需要在Linux上完成,该文章仅涵盖Windows。

我将其标记为Perl问题,因为我必须在Perl中执行此操作,但可能在proc或其他地方有一些文件需要检查,而且对于所有语言都是如此。我其实不知道。

我对检测主要是VirtualBox和KVM感兴趣,因为那些是我正在使用的VM。

那么,有什么建议吗?

+0

*您正在使用哪种虚拟机软件?对于不同的虚拟机,说明可能有所不同。 – nneonneo

+0

@nneonneo,已添加到问题中。 – Zagorax

+0

你为什么问?理想的虚拟机不应该是可检测的,因为根据定义它应该像真机一样运行。 –

回答

11

我将特别针对VMware和运行Linux的虚拟Box虚拟机作为来宾操作系统进行讨论。 如果你运行下面的命令,你会知道底层硬件是VMware/VirtualBox,它证明它是一台虚拟机。

对于VMware客户:

# dmidecode | grep -i product 
     Product Name: VMware Virtual Platform 

对于虚拟框来宾:

# dmidecode | grep -i product 
    Product Name: VirtualBox 

dmidecode” 是Linux系统命令。您可以在脚本的开头运行dmidecode并提取该值。如果它是一个虚拟机,那么脚本应该退出而不需要进一步执行。

我没有任何其他虚拟机管理程序可以让我知道上面的命令返回对象。

希望这会有所帮助。

相关问题