亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Python腳本判斷 Linux 是否運行在虛擬機上

系統 1958 0

在 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()


判斷 VMware/Xen HVM/KVM

如果使用的是 VMware/Xen HVM/KVM 這樣的全虛擬就更難判斷一些,最準確的辦法是讀取 CPUID 來判斷,Xen 源代碼下面有一段檢測是否是 Xen 的 C 語言代碼 tools/misc/xen-detect.c,這段代碼提供了一個很好的例子,VPSee 重寫了代碼,用宏替代了函數,增加了對 VMware 和 KVM 的識別,用 gcc 編譯后就可以運行:

復制代碼 代碼如下:

/*
?* check if a linux system running on a virtual machine (vmware/xen hvm/kvm)
?*/
#include stdio.h
#include string.h

#define HYPERVISOR_INFO 0x40000000

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

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

??????? CPUID(HYPERVISOR_INFO, &eax, &ebx, &ecx, &edx);
??????? *(unsigned int *)(string+0) = ebx;
??????? *(unsigned int *)(string+4) = ecx;
??????? *(unsigned int *)(string+8) = edx;

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

??????? return 0;
}


判斷 VirtualBox/Virtual PC

什么?這種家用桌面虛擬機自己裝的還會不知道?!如果不知道的話也有辦法,在 Linux 下運行 dmidecode 工具然后查找 Manufacturer: innotek GmbH, Manufacturer: Microsoft Corporation 關鍵字就能對應上 VirtualBox 和 Virtual PC.


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。?!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 久久视频精品36线视频在线观看 | 五月婷婷色综合 | 欧美怡红院免费全部视频 | 亚洲大片免费观看 | 老司机深夜福利网站 | 特级毛片免费视频 | 国产香蕉在线精彩视频 | 亚洲欧美日韩国产精品26u | 日韩国产精品99久久久久久 | 国产精品一区二区四区 | 日韩欧美在线播放视频 | 国产精品第1页在线播放 | 亚洲精品欧美精品国产精品 | 国产人做人爱免费视频 | 色婷婷激婷婷深爱五月小蛇 | 亚洲精品久久久久久中文字幕小说 | 人成午夜欧美大片免费视频 | 黄色毛片免费在线观看 | 久热中文字幕在线精品免费 | 午夜毛片福利 | 国产精品高清一区二区不卡 | 日韩精品一区二区三区中文字幕 | 香蕉观看在线视频成人 | 亚洲 欧美 另类 天天更新影院 | 在线观看视频国产 | 热灸灸这里只有精品 | 在线观看久久 | 亚洲精品香蕉一区二区在线观看 | 九九精品免费 | 欧美色亚洲图 | 日本三级中文 | 欧美一级全部免费视频 | 国产精品久久久久久久久免费 | 中国女人内谢25xxxxx | 国内久久精品视频 | 成年人午夜影院 | 日韩欧美中文 | 亚洲国产精品久久综合 | 国产精品美女久久久久久 | 久久毛片视频 | 天天干天天射综合网 |