如何區分虛擬網卡和物理網卡?


一、什么是物理網卡和虛擬網卡?

圖示如下:紅色部分包含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 
如果感覺本文對您有幫助,請點擊‘頂’支持一下,您的支持是我堅持寫作最大的動力,謝謝!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM