![我如何通过编程判断运行脚本的主机是否是 VirtualBox VM?](https://linux22.com/image/1234437/%E6%88%91%E5%A6%82%E4%BD%95%E9%80%9A%E8%BF%87%E7%BC%96%E7%A8%8B%E5%88%A4%E6%96%AD%E8%BF%90%E8%A1%8C%E8%84%9A%E6%9C%AC%E7%9A%84%E4%B8%BB%E6%9C%BA%E6%98%AF%E5%90%A6%E6%98%AF%20VirtualBox%20VM%EF%BC%9F.png)
有什么方法可以判断运行脚本的主机是否是 VirtualBox 客户虚拟机?理想情况下,我正在寻找一种跨平台的方法。我认为这几乎是不可能的,除非 Guest Additions 中的某些功能提供了此功能。
答案1
在 Linux 下进行了一些探索,dmidecode | less
结果是:
# dmidecode 2.10
SMBIOS 2.5 present.
5 structures occupying 256 bytes.
Table at 0x000E1000.
Handle 0x0000, DMI type 0, 20 bytes
BIOS Information
Vendor: innotek GmbH
Version: VirtualBox
Windows 版本(感谢 Andrew Koester 的指点)
C:\> wmic bios get smbiosbiosversion
SMBIOSBIOSVersion
VirtualBox
Solaris 有一个等效版本,但我无法测试它,因为我只能访问 Sparc 机器。但为了完整起见,这里是它:/usr/sbin/smbios
答案2
在 Windows 中,您可以使用 WMI 查询 BIOS 信息。http://msdn.microsoft.com/en-us/library/aa394077%28VS.85%29.aspx
我不相信你会找到一个跨平台的解决方案,至少在没有完全深入并直接从低级内存中读取它的情况下。(在这种情况下,你可能会对源代码到 dmidecode)