zoukankan      html  css  js  c++  java
  • C#程序读取MAC地址的五种方法(转)

       public class GetMac
        {
            ///<summary>
            /// 根据截取ipconfig /all命令的输出流获取网卡Mac
            ///</summary>
            ///<returns></returns>
            public static 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("物理地址"))
                        {
                            macs.Add(line.Substring(32));
                        }
                    }
                    line = reader.ReadLine();
                }
                //等待程序执行完退出进程
                p.WaitForExit();
                p.Close();
                reader.Close();
                return macs;
            }
    
            ///<summary>
            /// 通过WMI读取系统信息里的网卡MAC
            ///</summary>
            ///<returns></returns>
            public static List<string> GetMacByWmi()
            {
                List<string> macs =new List<string>();
                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);
                    }
                }
                return macs;
            }
    
            ///<summary>
            /// 通过NetworkInterface读取网卡Mac
            ///</summary>
            ///<returns></returns>
            public static 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;
            }
    
            ///<summary>
            /// 通过SendARP获取网卡Mac
            /// 网络被禁用或未接入网络(如没插网线)时此方法失灵
            ///</summary>
            ///<param name="remoteIP"></param>
            ///<returns></returns>
            public static string 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")]
            private static extern int SendARP(Int32 dest, Int32 host, ref Int64 mac, ref Int32 length);
            [DllImport("Ws2_32.dll")]
            private static extern Int32 inet_addr(string ip);
        }

    本文来自博客http://www.cnblogs.com/diulela/archive/2012/04/07/2436111.html

  • 相关阅读:
    HDUOJ----3342Legal or Not
    HDUOJ----2647Reward
    hduoj------确定比赛名次
    HDUOJ----1165Eddy's research II
    HDUOJ-----1556Color the ball
    HDUOJ-----2175取(m堆)石子游戏
    HDUOJ---------2255奔小康赚大钱
    HDUOJ------1711Number Sequence
    HDUOJ---1712 ACboy needs your help
    HDUOJ---1867 A + B for you again
  • 原文地址:https://www.cnblogs.com/xuhang/p/4272924.html
Copyright © 2011-2022 走看看