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

问题描述 投票:0回答:4

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

我已经读过这篇文章:如何检测我的应用程序是否在虚拟机中运行? 但我需要在 Linux 上执行此操作,而该帖子仅涵盖 Windows。

我将其标记为

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

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

那么,有什么建议吗?

linux perl virtualization detection
4个回答
15
投票

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

对于 VMware 来宾:

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

对于 Virtual Box 访客:

# dmidecode  | grep -i product
    Product Name: VirtualBox

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

我没有任何其他虚拟机管理程序可供使用,无法让您返回上述命令。

希望这有帮助。


3
投票

快速谷歌一下就可以找到dmo.ca/blog/如何检测虚拟化

Perl 模块和一切。


1
投票

您尝试过 CPAN 上提供的 Sys::Detect::Virtualization 吗?


0
投票

在安装了 systemd 的现代 Linux 系统上,您只需运行 systemd-detect-virt 即可。如果它检测到它正在虚拟环境中运行(VM 容器),它将打印一个字符串指示检测到的环境并以 0 退出,否则,它将打印“none”并以非零值退出。 在 PERL 中你可以做这样的事情:

#! /usr/bin/perl -w
if ( system("systemd-detect-virt >& /dev/null") == 0){
    print "Running in a virtual machine\n";
}
else {
    print "No virtualization technologies detected\n";
}
© www.soinside.com 2019 - 2024. All rights reserved.