c#如何获得设备mac地址.pdf
文本预览下载声明
C#如何获得设备 Mac 地址
利用 dns 类和 WMI 规范获取 IP 及 MAC 地址
在 C#编程中,要获取主机名和主机 IP 地址,是比较容易的.它提供的 Dns 类,可以轻松的取得主机名和 IP 地
址.
示例:
[c-sharp] view plaincopy
1. string strHostName = Dns.GetHostName(); //得到本机的主机名
2. IPHostEntry ipEntry = Dns.GetHostByName(strHostName); //取得本机 IP
3. string strAddr = ipEntry.AddressList[0].ToString(); //假设本地主机为单网卡
在这段代码中使用了两个类,一个是 Dns 类,另一个为 IPHostEntry 类,二者都存在于命名空间 System.Net
中.
Dns 类主要是从域名系统 (DNS)中检索关于特定主机的信息,上面的代码第一行就从本地的 DNS 中检索出本
地主机名.
IPHostEntry类则将一个域名系统或主机名与一组 IP地址相关联,它与DNS 类一起使用,用于获取主机的 IP
地址组.
要获取远程主机的 IP 地址,其方法也是大同小异.
在获取了 IP 地址后,如果还需要取得网卡的 MAC 地址,就需要进一步探究了.
这里又分两种情况,一是本机 MAC 地址,二是远程主机 MAC 地址.二者的获取是完全不同的.
在获取本机的 MAC 地址时,可以使用 WMI 规范,通过 SELECT 语句提取 MAC 地址.在.NET 框架中,WMI 规范的实
现定义在 System.Management 命名空间中.
ManagementObjectSearcher 类用于根据指定的查询检索管理对象的集合
ManagementObjectCollection 类为管理对象的集合,下例中由检索对象返回管理对象集合赋值给它.
示例:
[c-sharp] view plaincopy
1. ManagementObjectSearcher query =new ManagementObjectSearcher(SELECT * FROM Win32_Ne
tworkAdapterConfiguration) ;
2. ManagementObjectCollection queryCollection = query.Get();
3. foreach( ManagementObject mo in queryCollection )
4. {
5. if(mo[IPEnabled].ToString() == True)
6. mac = mo[MacAddress].ToString();
7. }
获取远程主机的 MAC 地址时,需要借用API 函数 SendARP.该函数使用 ARP 协议,向目的主机发送ARP 包,利
用返回并存储在高速缓存中的 IP 和 MAC 地址对,从而获取远程主机的 MAC 地址.
示例:
[c-sharp] view plaincopy
1. Int32 ldest= inet_addr(remoteIP); //目的ip
2. Int32 lhost= inet_addr(localIP); //本地 ip
3.
4. try
5. {
6. Int64 macinfo = new Int64();
7. Int32 len = 6;
8. int res = SendARP(ldest,0, ref macinfo, ref len); //发送 ARP 包
9. return Convert.ToString(macinfo,16);
10. }
11. catch(Exception err)
12. {
13. Console.WriteLine(Error:{0},err.Message);
14. }
15. return 0.ToString();
但使用该方式获取 MAC 时有一个很大的限制,就是只能获取同网段的远程主机 MAC 地址.因为在标准网络协
议下,ARP 包是不能跨网段传输的,故想通过 ARP 协议是无法查询跨网段设备 MAC 地址的。
示例程序:
[c
显示全部