C#获取电脑IP、MAC地址示例代码

本文提供了一段C#代码,用于获取电脑的CPU ID、硬盘ID、IPv4地址和MAC地址。代码通过ManagementClass和NetworkInterface等类来实现,包括根据主机名或默认IP获取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

    }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT技术分享社区

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值