以下是收集的几种C#程序读取MAC地址的方法,示例中是读取所有网卡的MAC地址,如果仅需要读取其中一个,稍作修改即可。

1 通过IPConfig命令读取MAC地址

///<summary> /// 根据截取ipconfig /all命令的输出流获取网卡Mac ///</summary> ///<returns></returns> publicstatic List<string> GetMacByIPConfig() {   List<string> macs =new List<string>();
  ProcessStartInfo startInfo = new ProcessStartInfo("ipconfig", "/all");   startInfo.UseShellExecute = false;   startInfo.RedirectStandardInput = true;   startInfo.RedirectStandardOutput = true;   startInfo.RedirectStandardError = true;   startInfo.CreateNoWindow = true;   Process p = Process.Start(startInfo);   //截取输出流   StreamReader reader = p.StandardOutput;   string line = reader.ReadLine();   while (!reader.EndOfStream)   {     if (!string.IsNullOrEmpty(line))     {       line = line.Trim();
      if (line.StartsWith("Physical Address"))       {         macs.Add(line);       }     }
    line = reader.ReadLine();   }
  //等待程序执行完退出进程   p.WaitForExit();   p.Close();   reader.Close();     return macs; }

2 通过WMI读取MAC地址

    1)该方法依赖WMI的系统服务,该服务一般不会被关闭;但如果系统服务缺失或者出现问题,该方法无法取得MAC地址。
 
///<summary> /// 通过WMI读取系统信息里的网卡MAC ///</summary> ///<returns></returns> publicstatic List<string> GetMacByWMI() {   List<string> macs =new List<string>();   try   {     string mac ="";     ManagementClass mc =new ManagementClass("Win32_NetworkAdapterConfiguration");     ManagementObjectCollection moc = mc.GetInstances();     foreach (ManagementObject mo in moc)     {       if ((bool)mo["IPEnabled"])       {         mac = mo["MacAddress"].ToString();         macs.Add(mac);       }     }     moc =null;     mc =null;   }   catch   {   }
  return macs; }

3 通过NetworkInterface读取MAC地址

    1)如果当前的网卡是禁用状态(硬件处于硬关闭状态),取不到该网卡的MAC地址,(您可以通过禁用网卡进行试验)。
    2)如果当前启用了多个网卡,最先返回的地址是最近启用的网络连接的信息
 
//返回描述本地计算机上的网络接口的对象(网络接口也称为网络适配器)。 publicstatic NetworkInterface[] NetCardInfo() {   return NetworkInterface.GetAllNetworkInterfaces(); }
///<summary> /// 通过NetworkInterface读取网卡Mac ///</summary> ///<returns></returns> publicstatic List<string> GetMacByNetworkInterface() {   List<string> macs =new List<string>();   NetworkInterface[] interfaces = NetworkInterface.GetAllNetworkInterfaces();   foreach (NetworkInterface ni in interfaces)   {     macs.Add(ni.GetPhysicalAddress().ToString());   }   return macs; }

4 通过SendARP读取MAC地址

///<summary> /// 通过SendARP获取网卡Mac /// 网络被禁用或未接入网络(如没插网线)时此方法失灵 ///</summary> ///<param name="remoteIP"></param> ///<returns></returns> publicstaticstring GetMacBySendARP(string remoteIP) {   StringBuilder macAddress =new StringBuilder();
  try   {     Int32 remote = inet_addr(remoteIP);
    Int64 macInfo =new Int64();     Int32 length =6;     SendARP(remote, 0, ref macInfo, ref length);
    string temp = Convert.ToString(macInfo, 16).PadLeft(12, '0').ToUpper();
    int x =12;     for (int i =0; i <6; i++)     {       if (i ==5)       {         macAddress.Append(temp.Substring(x -2, 2));       }       else       {         macAddress.Append(temp.Substring(x -2, 2) +"-");       }       x -=2;     }
    return macAddress.ToString();   }   catch   {     return macAddress.ToString();   } }
[DllImport("Iphlpapi.dll")] privatestaticexternint SendARP(Int32 dest, Int32 host, ref Int64 mac, ref Int32 length); [DllImport("Ws2_32.dll")] privatestaticextern Int32 inet_addr(string ip);

5 从注册表读取MAC地址

常规用户可通过读取注册表项Windows Genuine Advantage获取到物理网卡地址。

1)如果注册表项被修改,则无法取得该MAC地址

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows Genuine Advantage

C# 几种读取MAC地址的方法的更多相关文章

  1. 几种C#程序读取MAC地址的方法

    原文:几种C#程序读取MAC地址的方法 以下是收集的几种C#程序读取MAC地址的方法,示例中是读取所有网卡的MAC地址,如果仅需要读取其中一个,稍作修改即可. 1 通过IPConfig命令读取MAC地 ...

  2. cubie两种固定MAC地址的方法

    1.修改 /etc/init.d/networking 配置文件 在(a)代码的后面添加上(b)这段代码 (a)case "$1" in start) :5e #MAC地址可改 2 ...

  3. 修改MAC地址的方法 破解MAC地址绑定(抄)

    修改MAC地址的方法 破解MAC地址绑定   网卡的MAC地址是固化在网上EPROM中的物理地址,是一块网卡的“身份证”,通常为48位.在平常的应用中,有很多方面与MAC地址相关,如有些软件是和MAC ...

  4. Android 获取WIFI MAC地址的方法

    1. 经常用法,调用Android的API:WifiManager <uses-permission android:name="android.permission.ACCESS_W ...

  5. java获取服务器IP地址及MAC地址的方法

    这篇文章主要介绍了java编程实现获取机器IP地址及MAC地址的方法,实例分析了Java分别针对单网卡及多网卡的情况下获取服务器IP地址与MAC地址的相关技巧,需要的朋友可以参考下   本文实例讲述了 ...

  6. C#中常用的几种读取XML文件的方法

    1.C#中常用的几种读取XML文件的方法:http://blog.csdn.net/tiemufeng1122/article/details/6723764/

  7. 两种读取.xml文件的方法

    这里介绍两种读取配置文件(.xml)的方法:XmlDocument及Linq to xml 首先简单创建一个配置文件: <?xml version="1.0" encodin ...

  8. C#中通过SendARP读取MAC地址

    C#中通过SendARP读取MAC地址: using System.Runtime.InteropServices; publicstaticstring GetMacBySendARP(string ...

  9. 手机电脑Mac地址修改方法

    1.什么是Mac地址? MAC(Media Access Control或者Medium Access Control)地址,意译为媒体访问控制,或称为物理地址.硬件地址,用来定义网络设备的位置.在O ...

随机推荐

  1. Ajax 跨域的几种解决方案

    作者:黄轩链接:http://www.zhihu.com/question/19618769/answer/38934786来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处 ...

  2. 理解 ES6 Generator-next()方法

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. #leetcode刷题之路6- Z 字形变换

    将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列.比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下:L     C     I ...

  4. 【解决】docker 容器中 consul集群问题处理

    现象描述:   node1 和node2 日志反复出现 add remove node3节点. node3 节点 一直 驳回 node1 和node2 认为node3已经dead的消息  不断重启se ...

  5. CentOS7下PHP7.2安装redis扩展

    1.安装phpize(存在忽略) yum install php-devel 2.下载扩展源码包,直接用wget,一般放在 /usr/local/src wget https://github.com ...

  6. 让UltraEdit-32成为Delphi 7编译器的工具设置

    UltraEdit-32编译Delphi的工具设置 {================================================}Dcc32 命令行(&C):C:\Pro ...

  7. backtrace函数

    1.函数原型 #include <execinfo.h> int backtrace(void **buffer, int size); 该函数获取当前线程的调用堆栈,获取的信息将会被存放 ...

  8. java简单界面实现

    import javax.swing.JFrame; import javax.swing.JPanel; public class DemoFrame extends JFrame{ public ...

  9. stm32+lwip(二):UDP测试

    我是卓波,很高兴你来看我的博客. 系列文章: stm32+lwip(一):使用STM32CubeMX生成项目 stm32+lwip(二):UDP测试 stm32+lwip(三):TCP测试 stm32 ...

  10. Tensorflow之MNIST的最佳实践思路总结

    Tensorflow之MNIST的最佳实践思路总结   在上两篇文章中已经总结出了深层神经网络常用方法和Tensorflow的最佳实践所需要的知识点,如果对这些基础不熟悉,可以返回去看一下.在< ...