一种确定虚拟机唯一标识的方法、系统、设备以及介质[发明专利]
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(19)中华人民共和国国家知识产权局
(12)发明专利申请
(10)申请公布号 (43)申请公布日 (21)申请号 202010109610.0
(22)申请日 2020.02.22
(71)申请人 苏州浪潮智能科技有限公司
地址 215100 江苏省苏州市吴中区吴中经
济开发区郭巷街道官浦路1号9幢
(72)发明人 甄鹏 唐超
(74)专利代理机构 北京连和连知识产权代理有
限公司 11278
代理人 刘小峰
(51)Int.Cl.
H04L 29/06(2006.01)
H04L 29/12(2006.01)
G06F 9/455(2006.01)
(54)发明名称
一种确定虚拟机唯一标识的方法、系统、设
备以及介质
(57)摘要
本发明公开了一种确定虚拟机唯一标识的
方法,包括以下步骤:获取所述虚拟机的操作系
统类型;响应于所述操作系统类型为Windows操
作系统,根据注册表获取所有网卡的GUID和相对
应的网卡类型对应的数值,并根据WMI获取与所
述所有网卡的GUID相对应的MAC地址;对所述网
卡类型对应的数值进行位与运算确定所有网卡
的GUID中物理网卡对应的GUID;根据所述物理网
卡的GUID确定所述物理网卡对应的MAC地址;将
确定的若干个所述MAC地址进行拼接后计算哈希
值以得到所述唯一标识。
本发明还公开了一种系
统、计算机设备以及可读存储介质。
本发明提出
的方案能够快速识别云环境中虚拟主机,确定其
唯一性,解决了云环境中因虚拟硬件经常发生变
化导致的无法识别虚拟主机的问题。
权利要求书2页 说明书8页 附图3页CN 111355716 A 2020.06.30
C N 111355716
A
1.一种确定虚拟机唯一标识的方法,其特征在于,包括以下步骤:
获取所述虚拟机的操作系统类型;
响应于所述操作系统类型为Windows操作系统,根据注册表获取所有网卡的GUID和相对应的网卡类型对应的数值,并根据WMI获取与所述所有网卡的GUID相对应的MAC地址;
对所述网卡类型对应的数值进行位与运算确定所有网卡的GUID中物理网卡对应的GUID;
根据所述物理网卡的GUID确定所述物理网卡对应的MAC地址;
将确定的若干个所述MAC地址进行拼接后计算哈希值以得到所述唯一标识。
2.如权利要求1所述的方法,其特征在于,对所述网卡类型对应的数值进行位与运算确定所有网卡的GUID中物理网卡对应的GUID,进一步包括:
将所述网卡类型对应的数值分别与第一预设数值和第二预设数值进行位与运算;
利用位与运算结果均为true的所述网卡类型对应的数值确定物理网卡对应的GUID。
3.如权利要求1所述的方法,其特征在于,还包括:
响应于所述操作类型为Linux操作系统,获取非物理网卡列表以及所有网卡的网络信息;
根据所述非物理网卡列表中的每一个网卡的名称排除所述所有网卡的网络信息中的非物理网卡信息以得到物理网卡的信息;
对若干个所述物理网卡的信息中的MAC地址拼接后计算哈希值以得到所述唯一标识。
4.如权利要求3所述的方法,其特征在于,获取非物理网卡列表以及所有网卡的网络信息,进一步包括:
在所述Linux操作系统下的预设位置获取所述非物理网卡列表,并通过执行预设命令获取所述所有网卡的网络信息。
5.一种确定虚拟机唯一标识的系统,其特征在于,包括:
获取模块,所述获取模块配置为获取所述虚拟机的操作系统类型;
第一响应模块,所述第一响应模块配置为响应于所述操作系统类型为Windows操作系统,根据注册表获取所有网卡的GUID和相对应的网卡类型对应的数值,并根据WMI获取与所述所有网卡的GUID相对应的MAC地址;
第一确定模块,所述第一确定模块配置为对所述网卡类型对应的数值进行位与运算确定所有网卡的GUID中物理网卡对应的GUID;
第二确定模块,所述第二确定模块配置为根据所述物理网卡的GUID确定所述物理网卡对应的MAC地址;
计算模块,所述计算模块配置为将确定的若干个所述MAC地址进行拼接后计算哈希值以得到所述唯一标识。
6.如权利要求5所述的系统,其特征在于,第一确定模块还配置为:
将所述网卡类型对应的数值分别与第一预设数值和第二预设数值进行位与运算;
利用位与运算结果均为true的所述网卡类型对应的数值确定物理网卡对应的GUID。
7.如权利要求5所述的系统,其特征在于,所述系统还包括第二响应模块,所述第二响应模块配置为:
响应于所述操作类型为Linux操作系统,获取非物理网卡列表以及所有网卡的网络信
息;
根据所述非物理网卡列表中的每一个网卡的名称排除所述所有网卡的网络信息中的非物理网卡信息以得到物理网卡的信息;
对若干个所述物理网卡的信息中的MAC地址拼接后计算哈希值以得到所述唯一标识。
8.如权利要求7所述的系统,其特征在于,所述第二响应模块还配置为:
在所述Linux操作系统下的预设位置获取所述非物理网卡列表,并通过执行预设命令获取所述所有网卡的网络信息。
9.一种计算机设备,包括:
至少一个处理器;以及
存储器,所述存储器存储有可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时执行如权利要求1-4任意一项所述的方法的步骤。
10.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时执行如权利要求1-4任意一项所述的方法的步骤。
一种确定虚拟机唯一标识的方法、系统、设备以及介质
技术领域
[0001]本发明涉及虚拟机领域,具体涉及一种确定虚拟机唯一标识的方法、系统、设备以及存储介质。
背景技术
[0002]随着计算机技术的飞速发展,越来越多的企业将业务环境从物理计算环境迁移至云环境中。
一套物理服务器中,通常存在上百台异构的虚拟主机。
某些业务逻辑中需要确定主机的唯一性。
但是虚拟主机在每次重启时CPU、内存、硬盘等硬件信息都会发生变化,主机的唯一性不好确定。
[0003]虽然现有技术中可以通过MAC地址确定唯一性,例如利用UUID+MAC地址来确定唯一性,或者利用证书+硬件信息来确定唯一性,或者利用MAC地址与管理平台ID匹配来确定唯一性,但是当虚拟主机重启后CPU、内存、硬盘等硬件信息都会发生变化,同时虚拟网卡、网桥、容器等都会带来网络环境的变化。
虚拟主机中这些存在经常变化的虚拟网卡、网桥这些都会影响MAC地址的获取,同时云环境中的虚拟主机中经常会存在各种容器,容器的添加删除均会影响MAC地址的计算。
发明内容
[0004]有鉴于此,为了克服上述问题的至少一个方面,本发明实施例提出一种确定虚拟机唯一标识的方法,包括以下步骤:
[0005]获取所述虚拟机的操作系统类型;
[0006]响应于所述操作系统类型为Windows操作系统,根据注册表获取所有网卡的GUID 和相对应的网卡类型对应的数值,并根据WMI获取与所述所有网卡的GUID相对应的MAC地址;
[0007]对所述网卡类型对应的数值进行位与运算确定所有网卡的GUID中物理网卡对应的GUID;
[0008]根据所述物理网卡的GUID确定所述物理网卡对应的MAC地址;
[0009]将确定的若干个所述MAC地址进行拼接后计算哈希值以得到所述唯一标识。
[0010]在一些实施例中,对所述网卡类型对应的数值进行位与运算确定所有网卡的GUID 中物理网卡对应的GUID,进一步包括:
[0011]将所述网卡类型对应的数值分别与第一预设数值和第二预设数值进行位与运算;[0012]利用位与运算结果均为true的所述网卡类型对应的数值确定物理网卡对应的GUID。
[0013]在一些实施例中,还包括:
[0014]响应于所述操作类型为Linux操作系统,获取非物理网卡列表以及所有网卡的网络信息;
[0015]根据所述非物理网卡列表中的每一个网卡的名称排除所述所有网卡的网络信息
中的非物理网卡信息以得到物理网卡的信息;
[0016]对若干个所述物理网卡的信息中的MAC地址拼接后计算哈希值以得到所述唯一标识。
[0017]在一些实施例中,获取非物理网卡列表以及所有网卡的网络信息,进一步包括:[0018]在所述Linux操作系统下的预设位置获取所述非物理网卡列表,并通过执行预设命令获取所述所有网卡的网络信息。
[0019]基于同一发明构思,根据本发明的另一个方面,本发明的实施例还提供了一种确定虚拟机唯一标识的系统,包括:
[0020]获取模块,所述获取模块配置为获取所述虚拟机的操作系统类型;
[0021]第一响应模块,所述第一响应模块配置为响应于所述操作系统类型为Windows操作系统,根据注册表获取所有网卡的GUID和相对应的网卡类型对应的数值,并根据WMI获取与所述所有网卡的GUID相对应的MAC地址;
[0022]第一确定模块,所述第一确定模块配置为对所述网卡类型对应的数值进行位与运算确定所有网卡的GUID中物理网卡对应的GUID;
[0023]第二确定模块,所述第二确定模块配置为根据所述物理网卡的GUID确定所述物理网卡对应的MAC地址;
[0024]计算模块,所述计算模块配置为将确定的若干个所述MAC地址进行拼接后计算哈希值以得到所述唯一标识。
[0025]在一些实施例中,第一确定模块还配置为:
[0026]将所述网卡类型对应的数值分别与第一预设数值和第二预设数值进行位与运算;[0027]利用位与运算结果均为true的所述网卡类型对应的数值确定物理网卡对应的GUID。
[0028]在一些实施例中,所述系统还包括第二响应模块,所述第二响应模块配置为:[0029]响应于所述操作类型为Linux操作系统,获取非物理网卡列表以及所有网卡的网络信息;
[0030]根据所述非物理网卡列表中的每一个网卡的名称排除所述所有网卡的网络信息中的非物理网卡信息以得到物理网卡的信息;
[0031]对若干个所述物理网卡的信息中的MAC地址拼接后计算哈希值以得到所述唯一标识。
[0032]在一些实施例中,所述第二响应模块还配置为:
[0033]在所述Linux操作系统下的预设位置获取所述非物理网卡列表,并通过执行预设命令获取所述所有网卡的网络信息。
[0034]基于同一发明构思,根据本发明的另一个方面,本发明的实施例还提供了一种计算机设备,包括:
[0035]至少一个处理器;以及
[0036]存储器,所述存储器存储有可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时执行如上所述的任一种确定虚拟机唯一标识的方法的步骤。
[0037]基于同一发明构思,根据本发明的另一个方面,本发明的实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理
器执行时执行如上所述的任一种确定虚拟机唯一标识的方法的步骤。
[0038]本发明具有以下有益技术效果之一:本发明提出的方案能够快速识别云环境中虚拟主机,确定其唯一性,解决了云环境中因虚拟硬件经常发生变化导致的无法识别虚拟主机的问题。
附图说明
[0039]为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的实施例。
[0040]图1为本发明的实施例提供的确定虚拟机唯一标识的方法的流程示意图;[0041]图2为本发明的实施例提供的注册表的示意图;
[0042]图3为本发明的实施例提供的非物理网卡列表的示意图;
[0043]图4为本发明的实施例提供的所有网卡信息的示意图
[0044]图5为本发明的实施例提供的确定虚拟机唯一标识的系统的结构示意图;[0045]图6为本发明的实施例提供的计算机设备的结构示意图;
[0046]图7为本发明的实施例提供的计算机可读存储介质的结构示意图。
具体实施方式
[0047]为使本发明的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本发明实施例进一步详细说明。
[0048]需要说明的是,本发明实施例中所有使用“第一”和“第二”的表述均是为了区分两个相同名称非相同的实体或者非相同的参量,可见“第一”“第二”仅为了表述的方便,不应理解为对本发明实施例的限定,后续实施例对此不再一一说明。
[0049]根据本发明的一个方面,本发明的实施例提出一种确定虚拟机唯一标识的方法,如图1所示,其可以包括步骤:S1,获取所述虚拟机的操作系统类型;S2,响应于所述操作系统类型为Windows操作系统,根据注册表获取所有网卡的GUID和相对应的网卡类型对应的数值,并根据WMI获取与所述所有网卡的GUID相对应的MAC地址;S3,对所述网卡类型对应的数值进行位与运算确定所有网卡的GUID中物理网卡对应的GUID;S4,根据所述物理网卡的GUID确定所述物理网卡对应的MAC地址;S5,将确定的若干个所述MAC地址进行拼接后计算哈希值以得到所述唯一标识。
[0050]本发明提出的方案能够快速识别云环境中虚拟主机,确定其唯一性,解决了云环境中因虚拟硬件经常发生变化导致的无法识别虚拟主机的问题。
[0051]在一些实施例中,在步骤S1获取所述虚拟机的操作系统类型中,具体的,不同的操作系统对应的获取MAC地址的方法不同,因此需要首先判断该虚拟机的操作系统的类型。
[0052]在一些实施例中,在步骤S2响应于所述操作系统类型为Windows操作系统,根据注册表获取所有网卡的GUID和相对应的网卡类型对应的数值,并根据WMI获取所述所有网卡的GUID和相对应的MAC地址中,具体的,可以通过导出注册表,获取所有的网卡信息,需要说明的是,通过注册表只能获取到的所有的网卡对应的网卡类型和GUID。
然后通过利用WMI获
取网卡补充信息,也即通过WMI获取网卡的GUID和MAC地址。
[0053]例如,在一些实施例中,图2示出了导出的注册表的示意图,该注册表可以执行指令reg query,然后通过"HKLM\\SYSTEM\\CurrentControlSet\\Control\\Class\\ {4d36e972-e325-11ce-bfc1-08002be 10318}"获取Characteristics(网卡类型)、NetCfgInstanceId(网卡GUID)。
在一些实施例中,在利用WMI获取网卡补充信息时,可以利用J a v a第三方包o s h i.u t i l.p l a t f o r m.w i n d o w s提供的W M I获取工具类WmiUtil.selectObjectsFrom获取网卡补充信息,其中主要参数可以是wmiClass:Win32_ NetworkAdapter properties:GUID,MACAddress。
[0054]在一些实施例中,在步骤S3中,对所述网卡类型对应的数值进行位与运算确定所有网卡的GUID中物理网卡对应的GUID,进一步包括:
[0055]将所述网卡类型对应的数值分别与第一预设数值和第二预设数值进行位与运算;[0056]利用位与运算结果均为true的所述网卡类型对应的数值确定物理网卡对应的GUID。
[0057]具体的,如图2所示,通过注册表获取到的所有网卡的网卡类型对应的16进制的数值,然后利用该16进制的数值分别与0x4(第一预设数值)、0x80(第二预设数值)做位与运算,只有当运算结果均为True(也即1)时,该网卡才为物理网卡。
[0058]需要说明的是,无论是通过注册表还是WMI获取到的网卡的信息均是所有的网卡的信息,因此需要先通过网卡类型确定物理网卡,然后根据注册表中网卡类型为物理网卡对应的GUID,最后在WMI获取到的网卡补充信息中通过GUID确定对应的MAC地址。
[0059]在一些实施例中,在步骤S5将确定的若干个所述MAC地址进行拼接后计算哈希值以得到所述唯一标识中,具体的由于通过上述步骤得到的虚拟机的物理网卡可能不止一个,因此可以将若干个物理网卡的MAC地址进行拼接后,计算哈希值,从而得到唯一标识,确定该虚拟机的唯一性。
[0060]在一些实施例中,方法还可以包括:
[0061]响应于所述操作类型为Linux操作系统,获取非物理网卡列表以及所有网卡的网络信息;
[0062]根据所述非物理网卡列表中的每一个网卡的名称排除所述所有网卡的网络信息中的非物理网卡信息以得到物理网卡的信息;
[0063]对若干个所述物理网卡的信息中的MAC地址拼接后计算哈希值以得到所述唯一标识。
[0064]在一些实施例中,获取非物理网卡列表以及所有网卡的网络信息,进一步包括:[0065]在所述Linux操作系统下的预设位置获取所述非物理网卡列表,并通过执行预设命令获取所述所有网卡的网络信息。
[0066]具体的,可以通过在Linux系统下/sys/devices/virtual/net文件夹下获取到非物理网卡列表,例如如图3所示,通过该非物理网卡列表可以确定3个非物理网卡的名称lo、virbr0、virbr0-nic。
接着通过执行命令ip link获取到网络环境信息,也即所有的网卡的信息,例如如图4所示,通过获取到的所有网卡的信息可以得到所有的网卡的名称lo、ens32、virbr0、virbr0-nic。
最后通过非物理网卡列表中的非物理网卡的名称过滤出物理网卡的名称,也即通过图3所示的非物理网卡列表和图4所示的所有的网卡信息确定网卡名
称为ens32的为物理网卡,最后通过物理网卡的名称在获取到的所有的网卡的信息中找到对应的MAC地址。
[0067]需要说明的是,由于通过上述步骤得到的虚拟机的物理网卡可能不止一个,因此可以将若干个物理网卡的MAC地址进行拼接后,计算哈希值,从而得到唯一标识,确定该虚拟机的唯一性。
[0068]本案提出的方案可以通过利用Java提供的WMI接口,结合系统数据,筛去虚拟网卡、网桥等干扰信息,获得物理网卡信息。
同时针对云环境中异构场景较多的虚拟主机,提出了Windows系和Linux系两种环境下获取物理网卡的方法。
而且本发明提出的方案能够快速识别云环境中虚拟主机,确定其唯一性,解决了云环境中因虚拟硬件经常发生变化导致的无法识别虚拟主机的问题。
[0069]基于同一发明构思,根据本发明的另一个方面,本发明的实施例还提供了一种确定虚拟机唯一标识的系统400,如图5所示,包括:
[0070]获取模块401,所述获取模块401配置为获取所述虚拟机的操作系统类型;[0071]第一响应模块402,所述第一响应模块402配置为响应于所述操作系统类型为Windows操作系统,根据注册表获取所有网卡的GUID和相对应的网卡类型对应的数值,并根据WMI获取与所述所有网卡的GUID相对应的MAC地址;
[0072]第一确定模块403,所述第一确定模块403配置为对所述网卡类型对应的数值进行位与运算确定所有网卡的GUID中物理网卡对应的GUID;
[0073]第二确定模块404,所述第二确定模块404配置为根据所述物理网卡的GUID确定所述物理网卡对应的MAC地址;
[0074]计算模块405,所述计算模块405配置为将确定的若干个所述MAC地址进行拼接后计算哈希值以得到所述唯一标识。
[0075]在一些实施例中,第一确定模块403还配置为:
[0076]将所述网卡类型对应的数值分别与第一预设数值和第二预设数值进行位与运算;[0077]利用位与运算结果均为true的所述网卡类型对应的数值确定物理网卡对应的GUID。
[0078]在一些实施例中,所述系统400还包括第二响应模块,所述第二响应模块配置为:[0079]响应于所述操作类型为Linux操作系统,获取非物理网卡列表以及所有网卡的网络信息;
[0080]根据所述非物理网卡列表中的每一个网卡的名称排除所述所有网卡的网络信息中的非物理网卡信息以得到物理网卡的信息;
[0081]对若干个所述物理网卡的信息中的MAC地址拼接后计算哈希值以得到所述唯一标识。
[0082]在一些实施例中,所述第二响应模块还配置为:
[0083]在所述Linux操作系统下的预设位置获取所述非物理网卡列表,并通过执行预设命令获取所述所有网卡的网络信息。
[0084]基于同一发明构思,根据本发明的另一个方面,如图6所示,本发明的实施例还提供了一种计算机设备501,包括:
[0085]至少一个处理器520;以及
[0086]存储器510,存储器510存储有可在处理器上运行的计算机程序511,处理器520执行程序时执行如上的任一种确定虚拟机唯一标识的方法的步骤。
[0087]基于同一发明构思,根据本发明的另一个方面,如图7所示,本发明的实施例还提供了一种计算机可读存储介质601,计算机可读存储介质601存储有计算机程序指令610,计算机程序指令610被处理器执行时执行如上的任一种确定虚拟机唯一标识的方法的步骤。
[0088]最后需要说明的是,本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,可以通过计算机程序来指令相关硬件来完成,的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。
其中,的存储介质可为磁碟、光盘、只读存储记忆体(ROM)或随机存储记忆体(RAM)等。
上述计算机程序的实施例,可以达到与之对应的前述任意方法实施例相同或者相类似的效果。
[0089]此外,典型地,本发明实施例公开的装置、设备等可为各种电子终端设备,例如手机、个人数字助理(PDA)、平板电脑(PAD)、智能电视等,也可以是大型终端设备,如服务器等,因此本发明实施例公开的保护范围不应限定为某种特定类型的装置、设备。
本发明实施例公开的客户端可以是以电子硬件、计算机软件或两者的组合形式应用于上述任意一种电子终端设备中。
[0090]此外,根据本发明实施例公开的方法还可以被实现为由CPU执行的计算机程序,该计算机程序可以存储在计算机可读存储介质中。
在该计算机程序被CPU执行时,执行本发明实施例公开的方法中限定的上述功能。
[0091]此外,上述方法步骤以及系统单元也可以利用控制器以及用于存储使得控制器实现上述步骤或单元功能的计算机程序的计算机可读存储介质实现。
[0092]此外,应该明白的是,本文的计算机可读存储介质(例如,存储器)可以是易失性存储器或非易失性存储器,或者可以包括易失性存储器和非易失性存储器两者。
作为例子而非限制性的,非易失性存储器可以包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM (EPROM)、电可擦写可编程ROM(EEPROM)或快闪存储器。
易失性存储器可以包括随机存取存储器(RAM),该RAM可以充当外部高速缓存存储器。
作为例子而非限制性的,RAM可以以多种形式获得,比如同步RAM(DRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据速率SDRAM(DDR SDRAM)、增强SDRAM(ESDRAM)、同步链路DRAM(SLDRAM)、以及直接Rambus RAM(DRRAM)。
所公开的方面的存储设备意在包括但不限于这些和其它合适类型的存储器。
[0093]本领域技术人员还将明白的是,结合这里的公开所描述的各种示例性逻辑块、模块、电路和算法步骤可以被实现为电子硬件、计算机软件或两者的组合。
为了清楚地说明硬件和软件的这种可互换性,已经就各种示意性组件、方块、模块、电路和步骤的功能对其进行了一般性的描述。
这种功能是被实现为软件还是被实现为硬件取决于具体应用以及施加给整个系统的设计约束。
本领域技术人员可以针对每种具体应用以各种方式来实现的功能,但是这种实现决定不应被解释为导致脱离本发明实施例公开的范围。
[0094]结合这里的公开所描述的各种示例性逻辑块、模块和电路可以利用被设计成用于执行这里功能的下列部件来实现或执行:通用处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)或其它可编程逻辑器件、分立门或晶体管逻辑、分立的硬件组件或者这些部件的任何组合。
通用处理器可以是微处理器,但是可替换地,处理器可以是任何传统处理器、控制器、微控制器或状态机。
处理器也可以被实现为计算设备的组。