![](/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.