2012-10-13 11 views
7

Non penso che la domanda abbia bisogno di spiegazioni. Sto scrivendo un software in grado di avviare macchine virtuali per simulare una rete. Vorrei disabilitare questa funzione se il software è già in esecuzione su una macchina virtuale.Come rilevare se lo script è in esecuzione su una macchina virtuale?

Ho già letto questo post: How to detect if my application is running in a virtual machine? Ma ho bisogno di farlo su Linux e quel post copre solo Windows.

Sto taggandolo come una domanda Perl come devo farlo in Perl, ma probabilmente ci sono alcuni file in proc o altrove per controllare ed è lo stesso per tutte le lingue. Non lo so davvero.

Sono interessato a rilevare principalmente VirtualBox e KVM, in quanto sono le macchine virtuali che sto utilizzando.

Quindi, qualche suggerimento?

+0

* quale * software di macchina virtuale stai usando? Le istruzioni probabilmente differiscono per le diverse VM. – nneonneo

+0

@nneonneo, aggiunto alla domanda. – Zagorax

+0

Perché me lo chiedi? Una VM ideale non dovrebbe essere rilevabile, poiché per definizione dovrebbe comportarsi come una macchina reale. –

risposta

11

Parlerò specifico di VMware e Virtual Box Virtual Machines che eseguono Linux come sistema operativo guest. Se si esegue sotto il comando, si verrà a sapere che l'hardware sottostante è VMware/VirtualBox che certifica che si tratta di una macchina virtuale.

Per guest VMware:

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

Per guest Virtual Box:

# dmidecode | grep -i product 
    Product Name: VirtualBox 

"dmidecode" è un comando di sistema linux. Puoi avere perl eseguire dmidecode all'inizio del tuo script ed estrarre il valore. Se si tratta di una macchina virtuale, lo script dovrebbe uscire senza ulteriori esecuzioni.

Non ho nessun altro hypervisor a mia disposizione per ottenere ciò che sopra comando restituisce su di loro.

Spero che questo aiuti.

Problemi correlati