Cómo determinar si Linux se está ejecutando en una máquina virtual

  
 

Simplemente determine OpenVZ /Xen PV /UML

Es más fácil juzgar OpenVZ /Xen PV /UML. Puede consultar directamente los directorios y archivos relacionados en /proc. Por ejemplo, habrá /proc en OpenVZ VPS. /vz Este archivo; hay /proc /xen /en la máquina virtual PV de Xen, y hay algo en el directorio; /proc /cpuinfo en el UML encontrará el indicador UML. Escribí un script Python simple para detectar: ​​#! /Usr /bin /python # verifique si un sistema Linux se ejecuta en una máquina virtual (openvz /xen pv /uml)

import sys, os

def main (): si os.getuid ()! = 0: print " debe ejecutarse como root " sys.exit (0)

# check OpenVZ /Virtuozzoif os.path.exists ( " /proc /vz "): si no es os.path.exists (" /proc /bc "): imprimir " openvz container " else: print " openvz node "

# check Xenif os .path.exists (" /proc /xen /capacity "): if (os.path.getsize (" /proc /xen /capacity ") > 0): print " xen dom0 " else: print " Xen domU "

# check Modo de usuario Linux (UML) f = abierto (" /proc /cpuinfo ", " r "); t = f.read (); f.close () if ( T.find (" UML ") > 0): print " uml "

if __name __ == " __ main __ ": main ()

Judging VMware /Xen HVM /KVM

Si está utilizando un virtual virtual como VMware /Xen HVM /KVM, es más difícil de juzgar. La forma más precisa es leer el CPUID para juzgar. El código fuente de Xen tiene una sección a continuación para verificar si el código C de Xen es tools /misc /xen-detect.c. Este código es un buen ejemplo. VPSee reescribe el código, reemplaza la función con una macro y agrega un par. La identificación de VMware y KVM, compilada con gcc, se puede ejecutar: /** verifique si un sistema Linux se ejecuta en una máquina virtual (vmware /xen hvm /kvm) * /# include stdio.h # include string.h

#define HYPERVISOR_INFO 0x40000000

#define CPUID (idx, eax, ebx, ecx, edx) \\ asm volatile (\\ " prueba% 1,% 1; jz 1f; ud2a; .ascii \\ " xen \\ "; 1: cpuid " \\: " = b " (* ebx), " = a " (* eax), " = c " (* ecx), " = d " ) \\: " 0 " (idx));

int main (void) {unsigned int eax, ebx, ecx, edx; char string [13];

CPUID (HYPERVISOR_INFO, &eax, &ebx, &ecx, &edx); * (int sin signo) (string + 0) = ebx; * (int sin signo) (string + 4) = ecx; * (int sin signo) ) (cadena + 8) = edx;

cadena [12] = 0; if (strncmp (cadena, " XenVMMXenVMM ", 12) == 0) {printf (" xen hvm \\ n ");} else if (strncmp (cadena, " VMwareVMware ", 12) == 0) {printf (" vmware \\ n ");} else if (strncmp (cadena, " KVMKVMKVM ", 12) == 0) {printf (" kvm \\ n ");} elseprintf (" hardware desnudo \\ n ");

return 0;}

Judging VirtualBox /Virtual PC

¿Qué? ¿Este tipo de máquina virtual de escritorio para el hogar no sabrá qué instalar? ! Si no lo sabe, hay una manera de ejecutar la herramienta dmidecode en Linux y buscar las palabras clave Fabricante: innotek GmbH, Fabricante: Microsoft Corporation para que se correspondan con VirtualBox y Virtual PC.

Copyright © Conocimiento de Windows All Rights Reserved