C#获取电脑的网卡地址
使用C#开发Windows应用,需要进行特定网卡绑定的时候我们需要获取电脑本机的网卡地址,本文会介绍几种获取电脑网卡地址的方法。
使用 NetworkInterface
在公共类库中已经有了专门的网卡接口类:NetworkInterface
,该类存在于 System.Net.NetworkInformation
命名空间下,可以获取电脑上的所有网络接口。
using System;
using System.Net.NetworkInformation;
class Program
{
static void Main()
{
foreach (NetworkInterface nic in NetworkInterface.GetAllNetworkInterfaces())
{
Console.WriteLine($"MAC地址: {nic.GetPhysicalAddress()}");
}
}
}
使用 WMI
WMI,全称为:Windows Management Instrumentation,专门用来查询Windows系统信息,我们需要用到 Win32_NetworkAdapterConfiguration 来查询网卡信息。
using System;
using System.Management;
class Program
{
static void Main()
{
ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
ManagementObjectCollection moc = mc.GetInstances();
foreach (ManagementObject mo in moc)
{
if ((bool)mo["IPEnabled"])
{
Console.WriteLine($"MAC地址: {mo["MacAddress"]}");
}
}
}
}
使用 ipconfig 命令
除了上述两种方法外,还可以直接调用命令 ipconfig /all
,在输出的字符串中匹配并提取MAC地址。
using System;
using System.Diagnostics;
class Program
{
static void Main()
{
Process process = new Process();
process.StartInfo.FileName = "cmd.exe";
process.StartInfo.Arguments = "/c ipconfig /all";
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.UseShellExecute = false;
process.StartInfo.CreateNoWindow = true;
process.Start();
string output = process.StandardOutput.ReadToEnd();
process.WaitForExit();
var infoAllLine = output.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);
var physicalLine = infoAllLine.Where(x => x.Contains("物理地址") || x.Contains("Physical Address")).ToList();
foreach (var line in physicalLine)
{
Console.WriteLine($"MAC地址: {line.Split(':').Last()}");
}
}
}