zoukankan      html  css  js  c++  java
  • 如何区分虚拟网卡和物理网卡?

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

    图示如下:红色部分包含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年早期博客实现: 
    http://blog.csdn.net/chief1985/article/details/3311168

    该方法仅适用于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、以下链接进行了虚拟网卡类别区分探讨:

    http://stackoverflow.com/questions/3062594/differentiate-vmware-network-adapter-from-physical-network-adapters-or-detect

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

    https://github.com/LeMaker/android-actions/blob/6960890188f877ee2cd5d6dbf52b7de25be64085/android/external/chromium_org/chrome/browser/prefs/tracked/pref_hash_calculator_helper_win.cc

    4、可能疑问?

    1)如果包含的不全是不是会不准确。 
    是的,需要集思广益,多搜集资料,使得尽量全面。

    四:小结

    刚入职的时候分析数据包,架构师一眼就能区分出哪些是VMWare机器发送的,现在才知道是基于Mac地址的前几位得出的结论。 
    而我知道这个原理比架构师足足晚了2年,这,或许就是差距和值得努力的地方!

    2016年10月8日 23:59 思于家中床前

    作者:铭毅天下 
    转载请标明出处,原文地址: 
    http://blog.csdn.net/laoyang360/article/details/52761892 
    如果感觉本文对您有帮助,请点击‘顶’支持一下,您的支持是我坚持写作最大的动力,谢谢!

  • 相关阅读:
    kafka集群管理
    kafka server管理
    kafka 日志结构
    kafka消费者基本操作
    kafka 生产者基本操作
    kafka主题管理
    kafka基础知识
    centos7.0安装docker-18.06.1-ce不能启动问题
    spec 文件详解
    rpmbuild 源码打包clickhouse,附带打好的rpm包下载地址
  • 原文地址:https://www.cnblogs.com/findumars/p/6417929.html
Copyright © 2011-2022 走看看