2012-10-13 178 views
7

我不認爲這個問題需要任何解釋。 我正在編寫一個可以啓動虛擬機來模擬網絡的軟件。如果軟件已經在虛擬機上運行,​​我想禁用此功能。如何檢測腳本是否在虛擬機上運行?

我已閱讀此帖子:How to detect if my application is running in a virtual machine? 但我需要在Linux上完成,該文章僅涵蓋Windows。

我將其標記爲Perl問題,因爲我必須在Perl中執行此操作,但可能在proc或其他地方有一些文件需要檢查,而且對於所有語言都是如此。我其實不知道。

我對檢測主要是VirtualBox和KVM感興趣,因爲那些是我正在使用的VM。

那麼,有什麼建議嗎?

+0

*您正在使用哪種虛擬機軟件?對於不同的虛擬機,說明可能有所不同。 – nneonneo

+0

@nneonneo,已添加到問題中。 – Zagorax

+0

你爲什麼問?理想的虛擬機不應該是可檢測的,因爲根據定義它應該像真機一樣運行。 –

回答

11

我將特別針對VMware和運行Linux的虛擬Box虛擬機作爲來賓操作系統進行討論。 如果你運行下面的命令,你會知道底層硬件是VMware/VirtualBox,它證明它是一臺虛擬機。

對於VMware客戶:

# dmidecode | grep -i product 
     Product Name: VMware Virtual Platform 

對於虛擬框來賓:

# dmidecode | grep -i product 
    Product Name: VirtualBox 

dmidecode」 是Linux系統命令。您可以在腳本的開頭運行dmidecode並提取該值。如果它是一個虛擬機,那麼腳本應該退出而不需要進一步執行。

我沒有任何其他虛擬機管理程序可以讓我知道上面的命令返回對象。

希望這會有所幫助。

相關問題