以下是收集的几种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. 14.2 multiprocessing--多线程

    本模块提供了多进程进行共同协同工作的功能.由于Python存在GIL锁,对于多线程来说,这只是部分代码可以使用多CPU的优势,对于想全部使用多CPU的性能,让每一个任务都充分地使用CPU,那么使用多进 ...

  2. 搭建ssm框架经验

    要想搭建好ssm框架的开发环境.首先我们需要知道ssm是什么?ssm就是spring,springmvc,mybatis. 然后我们要知道,他们分别都是怎样实现的和做什么用的,充当什么角色?这样我们就 ...

  3. 几种常用的git命令

    1.合并代码出现冲突,用git status 查看冲突所在的文件 2. clone 指定分支分支的文件夹 git clone -b **** ***; 3.git merge 和 git rebase ...

  4. js实现监听浏览器窗口大小改变事件

    window.onresize = function(){   }

  5. python 连接MSSQL

    # -*- coding: utf-8 -*- import pymssql conn=pymssql.connect(host=".",user="sa",p ...

  6. hadoop生态搭建(3节点)-05.mysql配置_单节点

    # ==================================================================node1 # ======================== ...

  7. PAT (Basic Level) Practice (中文)1002

    1002 写出这个数 (20 分) 读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字. 输入格式: 每个测试输入包含 1 个测试用例,即给出自然数 n 的值.这里保证 n 小于 1 ...

  8. HyperLedger Fabric 1.4 超级账本起源(5.1)

    至比特币开源以来,无数技术人员对其进行研究,并且对该系统经过了无数次改进,超级账本项目(Hyperledger)最初也是用来改善比特币的底层技术,最终由Linux基金会组织发展起来.       开放 ...

  9. kudu是什么

    Apache Kudu Overview 建议配合[Apache Kudo]审阅本文(http://kudu.apache.org/overview.html) 数据模式 Kudo是一个列式存储的用于 ...

  10. P1103 书本整理

    P1103 书本整理 题目描述 Frank是一个非常喜爱整洁的人.他有一大堆书和一个书架,想要把书放在书架上.书架可以放下所有的书,所以Frank首先将书按高度顺序排列在书架上.但是Frank发现,由 ...