【问题标题】:How to detect if the script is running on a virtual machine?如何检测脚本是否在虚拟机上运行?
【发布时间】:2012-10-13 14:59:11
【问题描述】:

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

我已经阅读了这篇文章:How to detect if my application is running in a virtual machine? 但我需要在 Linux 上进行,而那篇文章只涉及 Windows。

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

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

那么,有什么建议吗?

【问题讨论】:

  • 您使用的是哪个虚拟机软件?对于不同的虚拟机,说明可能会有所不同。
  • @nneonneo,已添加到问题中。
  • 你为什么要问?理想的 VM 不应该是可检测的,因为根据定义,它应该表现得像一台真实的机器。

标签: linux perl virtualization detection


【解决方案1】:

我将具体讨论 VMware 和运行 Linux 作为客户操作系统的虚拟 Box 虚拟机。 如果你运行下面的命令,你就会知道底层硬件是 VMware/VirtualBox,它证明它是一个虚拟机。

对于 VMware 来宾:

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

对于虚拟盒子客人:

# dmidecode  | grep -i product
    Product Name: VirtualBox

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

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

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    快速谷歌搜索dmo.ca/ blog/ How to detect virtualization

    Perl 模块和一切。

    【讨论】:

      【解决方案3】:

      您是否尝试过 Sys::Detect::Virtualization,可在 CPAN 上使用?

      【讨论】:

        猜你喜欢
        • 2015-03-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-04
        • 2011-06-02
        • 1970-01-01
        • 2017-11-09
        • 1970-01-01
        相关资源
        最近更新 更多