如何判断当前程序是否运行在虚拟机中?

本文最后更新于2019年6月29日,已超过 1 年没有更新,如果文章内容失效,还请反馈给我,谢谢!

=Start=

缘由:

突然想到的一个点,觉得有必要收集整理一下,方便以后使用。

正文:

参考解答:

这里只简单谈一谈应用层面的判断,太底层的我也不会、也不了解,就不说了,如果有懂的还请多指点一下。

# Windows

systeminfo | findstr /i model
wmic baseboard get manufacturer,product
Win+R => msinfo32 => 'System Manufacturer'

# Mac 

ioreg -l | grep -e 'Manufacturer'

# Linux

核心思路基本上就是通过在 dmesg输出或是/proc/cpuinfo 等文件中查找关键字来进行判断(不同版本可能不一样,所以可以借助一些工具或脚本来加速查找,比如 virt-what)。

dmidecode -t system | egrep -i 'manufacturer|product'
dmidecode -s system-product-name

sudo lshw -class system

dmesg | egrep -i 'hypervisor|vmware'

systemd-detect-virt

grep -q '^flags.*hypervisor' /proc/cpuinfo

大致内容如上,想到了再补充。

参考链接:

=END=

声明: 除非注明,ixyzero.com文章均为原创,转载请以链接形式标明本文地址,谢谢!
https://ixyzero.com/blog/archives/4510.html

《如何判断当前程序是否运行在虚拟机中?》上的3个想法

  1. 如何根据机器的mac地址来判别该机器是否为vmware的虚拟机
    How to recognise a VMware’s virtual machine by its MAC address?
    https://macaddress.io/faq/how-to-recognise-a-vmwares-virtual-machine-by-its-mac-address
    `
    # Range or Prefix Vendor Virtual Machine
    1 00:50:56 VMWare VMware vSphere, VMware Workstation, VMware ESX Server
    2 00:50:56:80:00:00 → 00:50:56:BF:FF:FF VMWare VMware vSphere managed by vCenter Server
    3 00:0C:29 VMWare Standalone VMware vSphere, VMware Workstation, VMware Horizon
    4 00:05:69 VMWare VMware ESX, VMware GSX Server
    5 00:1C:14 VMWare VMWare
    `

  2. How to recognise an Oracle Virtual machine by its MAC address?
    https://macaddress.io/faq/how-to-recognise-an-oracle-virtual-machine-by-its-mac-address
    `
    # Range or Prefix Vendor Virtual Machine
    1 08:00:27 Pcs Systemtechnik GmbH Oracle VirtualBox 5.2
    2 52:54:00 (Exact MAC: 52:54:00:C9:C7:04) N/A Oracle VirtualBox 5.2 + Vagrant
    3 00:21:F6 Oracle Corp Oracle VirtualBox 3.3
    4 00:14:4F Oracle Corp Oracle VM Server for SPARC
    5 00:0F:4B Oracle Corp Oracle Virtual Iron 4
    `

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注