import os
import platform
import subprocess

def is_vm():
    # Check system manufacturer and product name
    try:
        if platform.system() == "Windows":
            output = subprocess.check_output(["wmic", "computersystem", "get", "manufacturer,model"], stderr=subprocess.DEVNULL)
            output = output.decode(errors='ignore').lower()
            vm_keywords = ["vmware", "virtualbox", "qemu", "kvm", "xen", "hyper-v"]
            if any(word in output for word in vm_keywords):
                return True

        elif platform.system() == "Linux":
            with open("/sys/class/dmi/id/product_name", "r") as f:
                name = f.read().lower()
                if any(x in name for x in ["vmware", "virtualbox", "qemu", "kvm", "xen", "hyper-v"]):
                    return True
            with open("/sys/class/dmi/id/sys_vendor", "r") as f:
                vendor = f.read().lower()
                if any(x in vendor for x in ["vmware", "virtualbox", "qemu", "kvm", "xen", "microsoft"]):
                    return True
    except Exception:
        pass

    # Check for virtual MAC address prefixes
    try:
        import uuid
        mac = uuid.getnode()
        mac_prefix = (mac >> 32) & 0xFFFFFF
        vm_macs = [
            0x0003FF,  # Microsoft Hyper-V
            0x000C29,  # VMware
            0x001C14,  # VMware
            0x080027,  # VirtualBox
            0x525400,  # QEMU/KVM
        ]
        if mac_prefix in vm_macs:
            return True
    except Exception:
        pass

    return False


if __name__ == "__main__":
    if is_vm():
        print("This system appears to be running in a virtual machine.")
    else:
        print("This system appears to be running on physical hardware.")
