zoukankan      html  css  js  c++  java
  • C#获取电脑IP、MAC地址示例代码


        

    640?wx_fmt=png

        /// <summary>

        /// 使用 C# 自带的类库实现计算机信息获取

        /// </summary>

        public class DefaultDeviceInfo 

        {

            public virtual string GetCpuId()

            {

                try

                {

                    string cpuInfo = " ";

                    ManagementClass cimobject = new ManagementClass("Win32_Processor");

                    ManagementObjectCollection moc = cimobject.GetInstances();

                    foreach (ManagementObject mo in moc)

                    {

                        cpuInfo = mo.Properties["ProcessorId"].Value.ToString();

                    }

                    return cpuInfo.ToString();

                }

                catch (Exception)

                {


                }


                return string.Empty;

            }


            public virtual string GetHDid()

            {

                try

                {

                    string HDid = " ";

                    ManagementClass cimobject1 = new ManagementClass("Win32_DiskDrive");

                    ManagementObjectCollection moc1 = cimobject1.GetInstances();

                    foreach (ManagementObject mo in moc1)

                    {

                        HDid = (string)mo.Properties["Model"].Value;

                    }

                    return HDid.ToString();

                }

                catch (Exception)

                {

                }

                return string.Empty;

            }


            public virtual string GetIpv4()

            {

                string ip = GetIpv4("127.0.0.1");

                //如果根据127.0.0.1无法获取ip地址,则尝试根据主机名获取

                if (ip == IPAddress.None.ToString())

                {

                    ip = GetIpv4(null);

                }


                return ip;

            }


            public virtual string GetMac()

            {

                try

                {

                    List<string> macs = new List<string>();

                    NetworkInterface[] interfaces = NetworkInterface.GetAllNetworkInterfaces();

                    foreach (NetworkInterface ni in interfaces)

                    {

                        if (ni.NetworkInterfaceType != NetworkInterfaceType.Ethernet)

                        {

                            continue;

                        }


                        if (ni.GetPhysicalAddress().ToString() != "")

                        {

                            macs.Add(ni.GetPhysicalAddress().ToString());

                        }

                    }


                    //替补mac地址,当找不到以太网mac,则使用第一个mac

                    var subs = macs.Count == 0 && interfaces.Length > 0

                        ? interfaces[0].GetPhysicalAddress().ToString()

                        : string.Empty;


                    return macs.Count > 0 ? macs[0] : subs;

                }

                catch (Exception)

                {


                }


                return string.Empty;

            }


            public virtual string GetHostName()

            {

                return Dns.GetHostName();

            }


            #region 内部方法


            /// <summary>

            /// 字符串每隔多少位插入特定字符

            /// </summary>

            /// <param name="value"></param>

            /// <param name="separator"></param>

            /// <param name="separatorLen"></param>

            /// <returns></returns>

            protected static string StringInsertSeparator(string value, string separator, int separatorLen = 1)

            {

                if (string.IsNullOrWhiteSpace(value))

                {

                    return value;

                }


                StringBuilder sbNewValue = new StringBuilder();


                for (int i = 0; i < value.ToArray().Count(); i++)

                {

                    if (i > 0 && i % separatorLen == 0)

                    {

                        sbNewValue.Append(separator);

                    }


                    sbNewValue.Append(value[i]);

                }


                return sbNewValue.ToString();

            }


            /// <summary>

            /// 根据指定的主机名获取ip地址

            /// 如果主机名为空,则获取系统主机名称

            /// </summary>

            /// <param name="defHostName"></param>

            /// <returns></returns>

            protected string GetIpv4(string defHostName)

            {

                try

                {

                    /* NetworkInterface 实现方法

                    // 获得网络接口,网卡,拨号器,适配器都会有一个网络接口 

                    NetworkInterface[] networkInterfaces = NetworkInterface.GetAllNetworkInterfaces();


                    foreach (NetworkInterface network in networkInterfaces)

                    {

                        if (network.NetworkInterfaceType != NetworkInterfaceType.Ethernet)

                        {

                            continue;

                        }


                        // 获得当前网络接口属性

                        IPInterfaceProperties properties = network.GetIPProperties();


                        // 每个网络接口可能会有多个IP地址 

                        foreach (IPAddressInformation address in properties.UnicastAddresses)

                        {

                            // 如果此IP不是ipv4,则进行下一次循环

                            if (address.Address.AddressFamily != AddressFamily.InterNetwork)

                            {

                                continue;

                            }


                            // 忽略127.0.0.1

                            if (IPAddress.IsLoopback(address.Address))

                            {

                                continue;

                            }


                            return address.Address.ToString();

                        }

                    }


                    */


                    string hostName = defHostName;

                    if (string.IsNullOrWhiteSpace(hostName))

                    {

                        hostName = Dns.GetHostName();

                    }


                    var ipList = Dns.GetHostEntry(hostName).AddressList;


                    foreach (var address in ipList)

                    {

                        // 如果此IP不是ipv4,则进行下一次循环

                        if (address.AddressFamily != AddressFamily.InterNetwork)

                        {

                            continue;

                        }


                        // 忽略127.0.0.1

                        if (IPAddress.IsLoopback(address))

                        {

                            continue;

                        }


                        return address.ToString();

                    }


                }

                catch (Exception ex)

                {

                    

                }


                return IPAddress.None.ToString(); //255.255.255.255 

            }


            #endregion


        }


  • 相关阅读:
    多个类定义attr属性重复的问题:Attribute "xxx" has already been defined
    好用的批量改名工具——文件批量改名工具V2.0 绿色版
    得到ImageView中drawable显示的区域的计算方法
    得到view坐标的各种方法
    实现类似于QQ空间相册的点击图片放大,再点后缩小回原来位置
    Material Designer的低版本兼容实现(五)—— ActivityOptionsCompat
    Android 自带图标库 android.R.drawable
    解决 Attempting to destroy the window while drawing!
    解决Using 1.7 requires compiling with Android 4.4 (KitKat); currently using API 4
    Material Designer的低版本兼容实现(四)—— ToolBar
  • 原文地址:https://www.cnblogs.com/hgmyz/p/12351379.html
Copyright © 2011-2022 走看看