博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#获取本机和其它计算机物理网卡地址(MAC)
阅读量:6078 次
发布时间:2019-06-20

本文共 2174 字,大约阅读时间需要 7 分钟。

验证计算机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地址;

 

 

转载于:https://www.cnblogs.com/fanjf/p/getMacAddr.html

你可能感兴趣的文章
代码重构~代码注释
查看>>
C#实现二叉查找树
查看>>
Angular 4 http通讯 解决服务器参数无法接收问题
查看>>
rose分析
查看>>
最长递减子序列(nlogn)(个人模版)
查看>>
springMVC拦截配置
查看>>
将不确定变为确定~LINQ查询包含对不同数据上下文上所定义项的引用
查看>>
Cmockery macro demo hacking
查看>>
Android NIO(Noblocking I/O非阻塞I/O)小结
查看>>
为什么机器学习难于应用
查看>>
算法: skiplist 跳跃表代码实现和原理
查看>>
ELK系列~对fluentd参数的理解
查看>>
WF4.0实战(二):超市收银软件
查看>>
CSS3与页面布局学习总结(七)——前端预处理技术(Less、Sass、CoffeeScript、TypeScript)...
查看>>
思考与总结:扇区和磁盘块的区别是什么
查看>>
C++ 数据结构链表的实现代码
查看>>
OVS local network 连通性分析 - 每天5分钟玩转 OpenStack(132)
查看>>
Django 表单校验 表单字段设置 自定义表单校验规则
查看>>
TeamViewer“试用期已到期”解决方法
查看>>
SQL Server 2014如何提升非在线的在线操作
查看>>