开发者社区> 杰克.陈> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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

简介: 原文:几种C#程序读取MAC地址的方法  以下是收集的几种C#程序读取MAC地址的方法,示例中是读取所有网卡的MAC地址,如果仅需要读取其中一个,稍作修改即可。 1 通过IPConfig命令读取MAC地址 ////// 根据截取ipconfig /all命令的输出流获取网卡Mac/////...
+关注继续查看
原文:几种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_MACHINE\Software\Microsoft\Windows Genuine Advantage

 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
《圣殿祭司的ASP.NET4.0专家技术手册》----1-8 .NET 4.0内建的图表控件
以往ASP.NET 3.5要使用图表控件,必须再另外下载安装,但到了.NET 4.0,图表控件已变成内建,在ASP.NET 4.0项目中就可以直接使用,如图1-17所示,省去了很多麻烦。
1189 0
BLE获取iphone mac地址的方法--【原创】
本人用的BLE是TIcc2541,1.3.2协议栈 1、首先要说明的是,iphone手机将信息保护了,BLE设备读到的iphone地址是随机的,每次连接都会不同 2、下面我就具体说明如何查看手机的mac地址 首先我的程序是作为从机的,从机配好开始广播,事件SBP_START_DEVICE_EV...
913 0
ASP.NET MVC4应用程序无法建立控制器的解决方案/获取自己需要的EF版本
具体错误是我建立控制器的时候出现如下图那样的错误: Unable to cast object of type 'System.Data.Entity.Core.Objects.ObjectContext' to type'System.Data.ObjectContext' 出现该错误的原因是MVC支架不支持entity framework6. 当然这原因是我今天刚升级完VS2012到update 4RC才知道的。
731 0
ASP.NET MVC 4应用程序文件夹
App_Start It has configuration classes to reduce clutter code in the Global.asax 它包含了配置类来减少在Global.asax中的杂乱代码 Application_Start 方法 App_Start 文件夹里有如下文件:AuthConfig.cs: Related to security settings, including sites for OAuth login. 关于安全设置,包含网站的授权登录。
978 0
c++读写文件和测试程序运行时间的例子
例子完整代码:http://zhmster.googlepages.com/ReadFile.rar 例子功能简介:程序中google.dic是我的google输入法的词库。 本段代码功能:就是把这个文件重新按照词频排序。
844 0
+关注
杰克.陈
一个安静的程序猿~
10424
文章
2
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载