验证计算机MAC地址进行软件授权是一种通用的方法,C#可以轻松获取计算机的MAC地址,本文采用实际的源代码讲述了两种获取网卡的方式,
第一种方法使用ManagementClass类,只能获取本机的计算机网卡物理地址,
第二种方法使用Iphlpapi.dll的SendARP方法,可以获取 本机和其它计算机的MAC地址。
方法1:使用ManagementClass类
示例:
1 ///2 /// 获取网卡物理地址 3 /// 4 ///5 public static string getMacAddr_Local() 6 { 7 string madAddr = null; 8 ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration"); 9 ManagementObjectCollection moc2 = mc.GetInstances();10 foreach (ManagementObject mo in moc2)11 {12 if (Convert.ToBoolean(mo["IPEnabled"]) == true)13 {14 madAddr = mo["MacAddress"].ToString();15 madAddr = madAddr.Replace(':', '-');16 }17 mo.Dispose();18 }19 return madAddr;20 }
说明:
1.需要给项目增加引用:System.Management,如图:
2.在程序开始添加包引入语句:using System.Management;
3.本方案只能获取本机的MAC地址;
方法2:使用SendARP类
示例:
1 //下面一种方法可以获取远程的MAC地址 2 [DllImport("Iphlpapi.dll")] 3 static extern int SendARP(Int32 DestIP, Int32 SrcIP, ref Int64 MacAddr, ref Int32 PhyAddrLen); 4 [DllImport("Ws2_32.dll")] 5 static extern Int32 inet_addr(string ipaddr); 6 ///7 /// SendArp获取MAC地址 8 /// 9 /// 目标机器的IP地址如(192.168.1.1)10 ///目标机器的mac 地址 11 public static string getMacAddr_Remote(string RemoteIP)12 {13 StringBuilder macAddress = new StringBuilder();14 try15 {16 Int32 remote = inet_addr(RemoteIP);17 Int64 macInfo = new Int64();18 Int32 length = 6;19 SendARP(remote, 0, ref macInfo, ref length);20 string temp = Convert.ToString(macInfo, 16).PadLeft(12, '0').ToUpper();21 int x = 12;22 for (int i = 0; i < 6; i++)23 {24 if (i == 5)25 {26 macAddress.Append(temp.Substring(x - 2, 2));27 }28 else29 {30 macAddress.Append(temp.Substring(x - 2, 2) + "-");31 }32 x -= 2;33 }34 return macAddress.ToString();35 }36 catch37 {38 return macAddress.ToString();39 }40 }
说明:
1.在程序开始添加包引入语句:using System.Runtime.InteropServices;
2.该方法可以获取远程计算机的MAC地址;