![](/img/trans.png)
[英]How can I debug remotely some code running on a Debian Virtual Machine from Eclipse debugger on host machine?
[英]Looking for a nice way to detect if I am running in a Virtual Machine (Linux)
在VM中,OS提供的实时调度往往不可靠。 对于我的应用程序,我希望能够检测我是否在VM上运行(仅Linux)。
因此,我正在寻找一种检测(在C语言中)是否处于虚拟化环境中的好方法。 根据使用的VM,似乎使用了各种DMI和CPUID字符串。 我主要对通用方法感兴趣。
有人有任何想法吗?
Facter和Imvirt都会检测到一些虚拟化
您似乎想回答的真正问题是“实时调度工作不可靠吗?”。 那么,为什么不写一个测试,检查是否存在 ?
您也可以在scsi设备中寻找VMware:
cat /proc/scsi/scsi | grep VMware
可能只会在虚拟机上成功
VM上的示例输出:
# cat /proc/scsi/scsi
Attached devices:
Host: scsi0 Channel: 00 Id: 00 Lun: 00
Vendor: VMware Model: Virtual disk Rev: 1.0
Type: Direct-Access ANSI SCSI revision: 02
Host: scsi0 Channel: 00 Id: 01 Lun: 00
Vendor: VMware Model: Virtual disk Rev: 1.0
Type: Direct-Access ANSI SCSI revision: 02
实际机器上的示例输出:
# cat /proc/scsi/scsi
Attached devices:
Host: scsi0 Channel: 00 Id: 00 Lun: 00
Vendor: TSSTcorp Model: CDRW/DVD TSL462D Rev: DE01
Type: CD-ROM ANSI SCSI revision: 05
Host: scsi6 Channel: 00 Id: 08 Lun: 00
Vendor: DP Model: BACKPLANE Rev: 1.05
Type: Enclosure ANSI SCSI revision: 05
Host: scsi6 Channel: 02 Id: 00 Lun: 00
Vendor: DELL Model: PERC 5/i Rev: 1.03
Type: Direct-Access ANSI SCSI revision: 05
我认为您将必须试探性地执行此操作。 虚拟化产品的部分目标是使vm实例相信它在真实硬件上运行。 每个虚拟化产品都将模拟特定的硬件,因此我的解决方案是建立一个库,您可以询问“我是不是在虚拟机上”,而只是在引擎盖下维护一些有关虚拟机存在的证据的搜索。 这样,您仍然相对远离检测虚拟机的烦恼。
查找仅在VM中显示的特定设备。 例如,标记为“ Parallels”或“ VMWare”的显示设备可能很好地表明您在VM中。
当然,这仅适用于您了解的VM,因此不是很通用。
这是一个代码示例: http : //www.codeproject.com/KB/system/VmDetect.aspx,http : //mark.michaelis.net/Blog/HowToDetectVirtualMachineExecution.aspx (但这是从2005年开始的)
在某些杂志中,我读到可以用硬件设置检测虚拟机,因为VM使用的仿真硬件数量有限。
ifconfig获取MAC地址,然后查找供应商代码(google:mac地址查找)。 如果您提前知道使用了哪种虚拟化平台,将对您有所帮助。
尽管不是确定的,但是您也可以检查您的接口名称... ifconfig会吐出“ venet0”而不是“ eth0”
同样,“ df”也会泄露一些信息:vmware-/ dev / vzfs citrix / xen-/ dev / xvda1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.