什么叫有效物理网卡_如何区分虚拟网卡和物理网卡?-阿里云开发者社区

一、什么是物理网卡和虚拟网卡?

图示如下:红色部分包含VMWare的为虚拟网卡。

通常,我们部署VMWare虚拟机、VMSphere虚拟集群、XenCenter虚拟集群是都会涉及虚拟网卡。

二、辨别物理网卡和虚拟网卡的应用场景

场景一:一般部署虚拟集群的时候会用到。

场景二:通过抓包分析数据请求来源是物理网卡发出的数据包,还是虚拟网卡地址发出的包时候会用到。辨识都是通过mac地址区分的。

场景三:其他需要区分网卡的场景。

三、 如何区分物理网卡和虚拟网卡呢?

方法一:老套且仅适用于windows操作系统。

原理大致如:

先由 GetAdaptersInfo 获取所有网卡的基本信息。然后利用网卡名去注册表中查找对应的硬件信息。若是物理网卡,其硬件信息中通常会包含 PCI 。

例如,某个网卡的名为 {ACA306D0-1D69-4116-BC2B-919B428AD084}。

他在注册表中的信息所在位置为:

HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Network/{4D36E972-E325-11CE-BFC1-08002BE10318}/{ACA306D0-1D69-4116-BC2B-919B428AD084}/Connection

若PnpInstanceID的值以PCI开头,说明是物理网卡,MediaSubType为01则是常见网卡,02为无线网卡。

常见08年早期博客实现:

该方法仅适用于windows操作系统,不具备普遍通用性。

方法二:综合stackoverflow和github得出(2016年10月8日)。

1、包含以下MAC地址的前8个字节(前3段)是虚拟网卡:

"00:05:69"; //vmware1

"00:0C:29"; //vmware2

"00:50:56"; //vmware3

"00:1c:14"; //vmware4

"00:1C:42"; //parallels1

"00:03:FF"; //microsoft virtual pc

"00:0F:4B"; //virtual iron 4

"00:16:3E"; //red hat xen , oracle vm , xen source, novell xen

"08:00:27"; //virtualbox

举例以下的网卡地址中:

Line 34: PhysicalAddress: 00:FF:C4:73:16:0D

Line 110: PhysicalAddress: 8C:89:A5:BD:1A:6A

Line 215: PhysicalAddress: 00:50:56:C0:00:01

Line 316: PhysicalAddress: 00:50:56:C0:00:08

后两个以00:50:56 开头的都是VMWare虚拟网卡地址。

基于此:实现也就非常简单,思路如下:

获取网卡地址后,判定前8个字节,循环变量上面的列表,如果前8个字节相同,终止程序,即为虚拟网卡地址;否则为物理网卡地址。

2、以下链接进行了虚拟网卡类别区分探讨:

3、以下链接给出了虚拟网卡全分类的接口实现:

4、可能疑问?

1)如果包含的不全是不是会不准确。

是的,需要集思广益,多搜集资料,使得尽量全面。

四:小结

刚入职的时候分析数据包,架构师一眼就能区分出哪些是VMWare机器发送的,现在才知道是基于Mac地址的前几位得出的结论。

而我知道这个原理比架构师足足晚了2年,这,或许就是差距和值得努力的地方!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值