如何检测脚本是否在虚拟机上运行?

Zag*_*rax 8 linux virtualization perl detection

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

我已经阅读过这篇文章:如何检测我的应用程序是否在虚拟机中运行? 但是我需要在Linux上做这个,而那篇文章只涉及Windows.

我将它标记为一个Perl问题,因为我要在Perl中执行此操作,但可能有一些文件在proc其他地方或其他地方进行检查,所有语言都是相同的.我其实不知道.

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

那么,有什么建议吗?

sla*_*fer 13

我将特别讨论运行Linux作为客户操作系统的VMware和虚拟Box虚拟机.如果您运行以下命令,您将会发现底层硬件是VMware/VirtualBox,它证明它是虚拟机.

对于VMware客户:

# dmidecode  | grep -i product
        Product Name: VMware Virtual Platform
Run Code Online (Sandbox Code Playgroud)

对于Virtual Box客户:

# dmidecode  | grep -i product
    Product Name: VirtualBox
Run Code Online (Sandbox Code Playgroud)

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

我没有任何其他虚拟机管理程序可以让你获得上面的命令返回它们.

希望这可以帮助.