Python脚本判断 Linux 是否运行在虚拟机上

1039次阅读  |  发布于5年以前

在 WebHostingTalk 论坛上有些国外奸商会把虚拟机当作独立服务器卖,去年7月份的时候就有一位中国同胞上当受骗,并在 WHT 上发帖声讨,证据确凿,甚至连服务商自己也承认,回帖达355篇。这家独立服务器/VPS 提供商 HostATree.com 居然大胆的把 OpenVZ VPS 这种一看就知道是虚拟机的虚拟机当作独立服务器卖,晕,至少也要弄个 VMWare/KVM/Xen HVM 吧(更难发现是虚拟机),用 OpenVZ 这种容器也太欺负人了:)昨天恰好收到网友一封邮件问到了如何判断自己买的是独立服务器还是虚拟机的问题。这里 VPSee 简单介绍一下市面上常用虚拟技术(包括容器技术)的判别小技巧。

判断 OpenVZ/Xen PV/UML

判断 OpenVZ/Xen PV/UML 是最容易的,直接检查 /proc 下的相关目录和文件就可以知道,比如 OpenVZ VPS 上会有 /proc/vz 这个文件;Xen PV 虚拟机上会有 /proc/xen/ 这个目录,并且目录下有一些东西;UML 上打印 /proc/cpuinfo 会找到 UML 标志。写了一个简单的 Python 脚本来检测:

复制代码 代码如下:

!/usr/bin/python

check if a linux system running on a virtual machine (openvz/xen pv/uml)

import sys, os

def main():
if os.getuid() != 0:
print "must be run as root"
sys.exit(0)

# check OpenVZ/Virtuozzo  
if os.path.exists("/proc/vz"):  
    if not os.path.exists("/proc/bc"):  
        print "openvz container"  
    else:  
        print "openvz node"

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

# check User Mode Linux (UML)  
f = open("/proc/cpuinfo", "r"); t = f.read(); f.close()  
if (t.find("UML") > 0):  
    print "uml"

if name=="main":
main()

Copyright© 2013-2020

All Rights Reserved 京ICP备2023019179号-8