8

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

我已经阅读了这篇文章:如何检测我的应用程序是否在虚拟机中运行? 但我需要在 Linux 上进行,而那篇文章只涵盖 Windows。

我将它标记为一个Perl问题,因为我必须在 Perl 中这样做,但可能有一些文件在proc或其他地方需要检查,并且对于所有语言都是相同的。我其实不知道。

我主要对检测 VirtualBox 和 KVM 感兴趣,因为这些是我正在使用的虚拟机。

那么,有什么建议吗?

4

3 回答 3

14

我将具体讨论 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在脚本的开头运行 perl 并提取值。如果它是虚拟机,则脚本应退出而不进一步执行。

我没有任何其他虚拟机管理程序可以让您获得上述命令返回的内容。

希望这可以帮助。

于 2012-10-13T18:58:20.697 回答
3

快速谷歌搜索dmo.ca/blog/如何检测虚拟化

Perl 模块和一切。

于 2012-10-13T15:04:09.703 回答
1

您是否尝试过CPAN 上可用的Sys::Detect::Virtualization ?

于 2012-10-13T15:05:39.707 回答