我希望能够从Windows和Linux中执行此操作。我知道有一些方法可以获取sysinfo并使用与硬件标识符相关的拇指规则。
我想知道是否有更基本的方法,比如查看内存地址/发出中断等。
BTW我试图在英特尔硬件上执行此操作,我使用的虚拟化软件是Vmware Workstation和Windows HyperV。
答案 0 :(得分:1)
这是一个更有用的命令:
$ lscpu | grep -E 'Hypervisor vendor|Virtualization type'
Hypervisor vendor: KVM
Virtualization type: full
其他命令的输出示例:
$ sudo virt-what
kvm
$ dmesg | grep -i virtual
[ 0.000000] Booting paravirtualized kernel on KVM
[ 0.029160] CPU0: Intel QEMU Virtual CPU version 1.0 stepping 03
$ sudo dmidecode | egrep -i 'manufacturer|product|vendor|domU'
Vendor: Bochs
Manufacturer: Bochs
Product Name: Bochs
Manufacturer: Bochs
Manufacturer: Bochs
Manufacturer: Bochs
Manufacturer: Bochs
Manufacturer: Bochs
Manufacturer: Bochs
Manufacturer: Bochs
Manufacturer: Bochs
Manufacturer: Bochs
答案 1 :(得分:0)
其中至少有一个应该可以检测您是否在Linux下运行VMware(或其他一些常见的虚拟环境):
检查系统启动时内核检测到的虚拟设备。
dmesg | grep -i virtual
检测虚拟化硬件设备的另一种方法,如果dmesg
没有说任何有用的东西。
dmidecode | egrep -i 'manufacturer|product|vendor|domU'
您还可以检查虚拟磁盘:
cat /proc/ide/hd*/model
通常可以通过查找/proc/vz
或/dev/vzfs
来检测Virtuozzo。
答案 2 :(得分:0)
大多数软件检查管理程序CPUID叶子 - Leaf 0x40000000,Hypervisor CPUID信息
EAX:管理程序CPUID信息的最大输入值(0x40000010)。
EBX,ECX,EDX:管理程序供应商ID签名。例如。 “KVMKVMKVM”
Leaf 0x40000010,时间信息。
EAX :(虚拟)TSC频率,单位为kHz。
EBX :(虚拟)总线(本地apic定时器)频率,单位为kHz。
ECX,EDX:已保留
当然,您仍然依靠虚拟机管理程序为您提供此信息。它可能决定不报告0x40000000,反过来导致客户认为它实际上是在真实硬件上运行