最近在项目中遇到一个虚拟机检测的问题,需要检测当前程序是否在虚拟机中运行。
刚遇到这个问题时感觉就是一头雾水,一脸懵逼的有没有?咱又不是开发虚拟机的不是,怎么知道要怎么检测是不是虚拟机呢?何况现在主流的虚拟机有好几个,有没有通用的方法呢?相信很多朋友也会有同样的问题。但可以肯定的是,既然是虚拟机,肯定有和物理机不一样的东西,只要找到这些不一样的固有属性,用程序加以判断,肯定有可以检测出来。那么具体有些什么区别?又该如何检测呢?充分利用互联网的优势,先百度谷歌再说。
不查不知道,一查吓一跳,看来遇到这个问题的人还是挺多的。发现比较好的博文都是在CSND上有木有?这里要好好感谢一下优快云,不但有各种高水平技术贴,据说还可以用来做SEO的有木有啊?不过现在优快云可不允许你随便做SEO了,人家要审核你的文章了,这也真是烦人,好不容易晚上有时间来发个文章,写完以后要等到第二天人工审核才能过,你说这心都凉了半截有木有?。
言规正这里经过本人的一一查看和总结,发现比较可行的方法就是某位大牛总结的几种方法。这里就不多解释了,直接上链接,感兴趣的同学可以自己去了解一下:http://blog.youkuaiyun.com/whatday/article/details/10393325,这里介绍了7种方法,都有代码,同时还有反检测。我没有一一测试,需要的同学可在实践测试一下,我直接采用了第一种方法,并且找到了第一种方法的完整原码。只需要调用IsVirtualMachine即可判断是否是虚拟机中,是不是很方便呢有木有? 原码的下载地址:https://www.codeproject.com/Articles/9823/Detect-if-your-program-is-running-inside-a-Virtual
上面的方法可以检测出 Vmware 和 virtualPC,但是没有告诉我们怎么检测XGenServer 虚拟机。如果要检测XGenServer呢要怎么办?
继续百度谷歌,结果关于这个虚拟机检测的方法,反正我是没有在网上找了半天没有发现,心凉了半截有木有?好吧,没有就自己想办法了,这里我想到的办法是获