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

简介: 有两种区分虚拟网卡和物理网卡方式,请到文中寻找吧!

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

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

image.png

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

image.png

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

场景一:一般部署虚拟集群的时候会用到。
场景二:通过抓包分析数据请求来源是物理网卡发出的数据包,还是虚拟网卡地址发出的包时候会用到。辨识都是通过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为无线网卡。

image.png

常见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年,这,或许就是差距和值得努力的地方!


作者:铭毅天下
转载请标明出处,原文地址:
http://blog.csdn.net/laoyang360/article/details/52761892

相关文章
|
关系型数据库 数据库连接 Windows
windows 常用的dos命令
windows 常用的dos命令
718 0
|
10月前
|
数据采集 存储 人工智能
中企出海,全球性数字运营体系是关键
在全球经济低增长背景下,中国企业出海面临数据合规、跨区域运营等挑战。瓴羊副总裁甄日新在2025阿里云中企出海大会上指出,全球化数字运营体系是关键。瓴羊提供从数据采集到应用的全生命周期解决方案,助力企业应对合规、AI适配及系统碎片化问题,构建全球统一的数据治理与客户服务体系,推动数字化转型与全球竞争力提升。
391 0
|
测试技术 C# 开发工具
Visual Studio Code 使用技巧:C# 开发者的一分钟浅谈
【10月更文挑战第23天】本文介绍了如何在 Visual Studio Code (VS Code) 中高效进行 C# 开发。从环境搭建、基础设置到常见问题解决,再到进阶技巧,涵盖创建项目、运行和调试、代码导航、重构及版本控制等内容,帮助开发者提升开发效率。
1377 4
|
算法 Linux
Linux copy时排除某文件/目录
Linux copy时排除某文件/目录
978 0
|
NoSQL Java Redis
京东双十一高并发场景下的分布式锁性能优化
【10月更文挑战第20天】在电商领域,尤其是像京东双十一这样的大促活动,系统需要处理极高的并发请求。这些请求往往涉及库存的查询和更新,如果处理不当,很容易出现库存超卖、数据不一致等问题。
514 1
|
Java 测试技术 数据库
springboot接入influxdb
springboot接入influxdb
447 1
|
机器学习/深度学习 人工智能 算法
机器学习:K-means算法基本原理及其变种
机器学习:K-means算法基本原理及其变种
2144 0
机器学习:K-means算法基本原理及其变种
|
传感器 监控 5G
|
网络协议 数据安全/隐私保护 网络架构
标准ACL,扩展ACL,基本ACL,高级ACL
标准ACL,扩展ACL,基本ACL,高级ACL
1267 0
|
缓存 安全 JavaScript
技术分享:探索POST请求为何会发送两次的奥秘
【8月更文挑战第20天】在Web开发过程中,遇到POST请求被意外发送两次的情况并不罕见。这一现象不仅影响用户体验,还可能对服务器造成不必要的负担。本文将从多个维度深入剖析POST请求为何会发送两次,并分享相应的解决方案,助力开发者在日常工作中有效应对此类问题。
853 0

热门文章

最新文章

下一篇
开通oss服务