是否有可能从虚拟机内部find有关主机的信息?

是否有可能从虚拟机内部find有关主机的信息?

例如它的IP。

编辑:到目前为止,我发现的一件事是:

HKLM \ SOFTWARE \ Microsoft \ Virtual Machine \ Guest \ Parameters包含

  • 主机名
  • PhysicalHostName
  • PhysicalHostNameFullyQualified

等等

从虚拟机pipe理的angular度来看,理想的答案是,除非明确提供给您的信息,否则您应该无法告知物理主机。 在实践中,VM安装倾向于泄漏有关主机的一些信息,主要是因为安装了定制的(通常是半虚拟化的)驱动程序,可以提供更好的VM性能。 虚拟机环境的默认设置通常会在不同的地方提供一些基本信息(例如您列出的Hyper-V数据)。

虽然在某些情况下我可以看到希望这样做的正当理由(例如,群集中的VM检查运行的主机是否实际上正在交付虚拟机相信在启动高负载之前已经拥有的所有物理资源但低优先级的任务)几乎所有虚拟机“想要”了解更多关于它的主机的情况都是恶意的。 如果有一个在虚拟机中运行的进程的正当理由知道这种types的信息,那么它是一个微不足道的任务,build立一个合法的机制,提供该信息 – 大多数作为虚拟机pipe理员我不想虚拟机将能够告诉任何这一点。

这篇来自Sourcefire VRT的文章概述了恶意软件使用的一些机制来检测他们是否在虚拟机中运行,以及可以采取哪些缓解措施来对付他们 – 大多数情况下,虚拟机几乎可以告诉它在虚拟机中运行,通常可以告诉pipe理程序供应商,可能会识别pipe理程序types,并可能对特定版本进行猜测。 通常可以从networking收集一些额外的信息,但这几乎肯定是应被归类为恶意的那种活动。 如果你阅读了这篇文章,你会发现可以configuration一个虚拟机,这样在虚拟机中运行的任何东西都很难找出除了它是虚拟机的基本事实之外的任何东西,所以依靠这些机制是一个糟糕的理念。

关于pipe理程序的“ip-address”的具体问题,一般的答案是pipe理程序可以有许多IP地址 – pipe理控制台,iSCSI端口,Live Motion \ Fault Tolerance端口和许多没有明确的端口IP地址(VM端口)和其他变化。 findpipe理控制台的IP地址可能是微不足道的 – 按照你的Hyper-V的例子 – 但是任何事情都应该很难,在devise良好的虚拟机基础架构中,虚拟机不应该能够路由到pipe理控制台地址。

虚拟机的registry中的HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Virtual Machine \ Guest \ Parameters键列出hyper-v主机的信息。 我有一个在Hyper-V主机2008 R2服务器上运行的Windows 2003虚拟机。 我可以在2003 vm的registry中看到主机名。

我想,你已经确定了你正在寻找的东西。 该registry键是Hyper-V为您提供主机信息的方式。

当你编写使用它的代码时,你需要记住的唯一一件事情是,当你使用它时,它可能是错误的,因为你的虚拟机可能被保存然后被恢复,或者它可能在你编写的任何代码或脚本执行。

几乎没有。 来宾操作系统无法访问主机。 为什么要让你的客人和主人交谈?

出于安全原因,我相信答案是否定的。 除非您创build一个仅主机的networking连接,您可以通过该networking访问主机。 这个想法是,主机必须先授予您访问其信息的权限。

检查libvirt。 它似乎主要是面向服务器端的,但是确实有一些客户端function(或者至less计划包含它们),例如从客户端查找在服务器上使用的PCI插槽,以便假设控制,一个声卡。

如果你只是想找出一些简单的东西,比如你是在虚拟机上运行还是在哪种虚拟机上运行,​​那么通过查看虚拟机的BIOS ID或者其他设备标识符string可能是最简单的。

虽然虚拟机客户理论上不会“知道”主机的任何东西(通常甚至不知道它甚至是虚拟机),但通过简单地将主机视为networking上的另一台主机,您可以获得关于主机的信息,从客人的angular度来看。 这假定访客可以看到networking上的主机。

一旦你有了networking访问(和适当的凭据)的主机,你有很多select来收集信息:

psexec \\ host_computer_name ipconfig