• C# 几种读取MAC地址的方法


    以下是收集的几种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_MACHINESoftwareMicrosoftWindows Genuine Advantage
  • 相关阅读:
    url处理函数
    各种排序方法(冒泡,快速,插入,选择),二分查找
    js二叉树,前序/中序/后序(最大最小值,排序)
    vs中nuget命令的用法
    父子页面间调用
    Ubuntu16.04.2 LTS下使用编译安装程序(使用configure、make、 make install)
    windows与虚拟机的linux共享一个文件夹
    Linux下安装nginx
    Linux下安装VSCode
    Ubuntu下安装jdk
  • 原文地址:https://www.cnblogs.com/MuNet/p/6638830.html
Copyright © 2020-2023  润新知