1. 程式人生 > >C# 區分無線網絡卡和有線網絡卡的MAC

C# 區分無線網絡卡和有線網絡卡的MAC

C# 獲取MAC地址

方法一: 使用 ManagementClass

string strMAC = "";
ManagementClass MC = new ManagementClass("Win32_NetworkAdapterConfiguration");
ManagementObjectCollection MOC = MC.GetInstances();
foreach (ManagementObject moc in MOC)
{

  if (moc["IPEnabled"].ToString() == "True")
        {
               strMAC = moc["MacAddress"].ToString();
        }
}

方法二:使用NetworkInterface

string strMAC="";
NetworkInterface[] fNetworkInterfaces = NetworkInterface.GetAllNetworkInterfaces();
foreach (NetworkInterface adapter in fNetworkInterfaces)
{
    strMAC = adapter.GetPhysicalAddress().ToString();

}

如果你的電腦中既有無線網絡卡,也有有線網絡卡,而且在你使用寬頻的時候還會有一個虛擬MAC地址,這時要想獲取本地的有線網絡卡地址,就要實現MAC地址的區分,結合CMD下ipconfig /all

命令的內容

Ethernet adapter 本地連線:

        Connection-specific DNS Suffix  . :

        Description . . . . . . . . . . . : Realtek PCIe GBE Family Controller

        Physical Address. . . . . . . . . : 00-26-9E-8B-A9-F2

        Dhcp Enabled. . . . . . . . . . . : No

        IP Address. . . . . . . . . . . . : 192.168.9.123

        Subnet Mask . . . . . . . . . . . : 255.255.255.0

        Default Gateway . . . . . . . . . : 192.168.9.1

Ethernet adapter 無線網路連線:

Media State . . . . . . . . . . . : Media disconnected

Description . . . . . . . . . . . : 11b/g/n  Wireless LAN Mini-PCI Express Adapter II

Physical Address. . . . . . . . . : 70-1A-04-51-4D-5E

PPP adapter 寬頻連線:

        Connection-specific DNS Suffix  . :

        Description . . . . . . . . . . . : WAN (PPP/SLIP) Interface

        Physical Address. . . . . . . . . : 00-53-45-00-00-00

        Dhcp Enabled. . . . . . . . . . . : No

        IP Address. . . . . . . . . . . . : 117.93.142.100

        Subnet Mask . . . . . . . . . . . : 255.255.255.255

        Default Gateway . . . . . . . . . : 117.93.142.100

        DNS Servers . . . . . . . . . . . : 61.177.7.1

                                            221.228.255.1

        NetBIOS over Tcpip. . . . . . . . : Disabled

發現可以在連線的Description中區分MAC

區分條件

if(adapter.Description.Contains("PCI") && !adapter.Description.Contains("Wireless"))

// NetworkInterface

// 這個條件可以判斷出有線網絡卡的MAC

if (strDescription.Contains("PCI")&&!strDescription.Contains("Wireless"))

// ManagementClass

// 這個條件可以判斷出有線網絡卡的MAC

也可以比較3個連線名稱(本地連線,無線網路連線,寬頻連線),但是並不是每臺機上的連線名稱都是這個,所以用這個作為條件不可靠!

我看網上有人讀登錄檔來區分,他們是通過讀取登錄檔網絡卡資訊中的某個鍵值是否含有"PCI"來區分無線網絡卡和有線網絡卡,這裡我想說的是,無線網絡卡也有PCI的。

Ethernet adapter 無線網路連線:

Media State . . . . . . . . . . . : Media disconnected

Description . . . . . . . . . . . : 11b/g/n  Wireless LAN Mini-PCI Express Adapter II

Physical Address. . . . . . . . . : 70-1A-04-51-4D-5E