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

    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/272255.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

docker运行随机分配端口

docker run -d -it -P tomcat -P这个是大写的P&#xff0c;表示随机分配端口 执行后可以看到32768为随机分配的端口&#xff0c;8080是tomcat端口 测试成功

C# Stream 和 byte[] 之间的转换

/// <summary> /// 将 Stream 转成 byte[] /// </summary> public byte[] StreamToBytes(Stream stream) { byte[] bytes new byte[stream.Length]; stream.Read(bytes, 0, bytes.Length); // 设置当前流的位置为流的开始 stream.Seek(0, SeekOrigin.Begi…

docker下如何进入到容器中

1:查看容器 docker ps -a 2:进入容器 docker exec -it e3cc80415dc7 /bin/bash 退出容器 exit

java方法和 IDEA Debug调试

方法的概述&#xff1a; 方法就是将具有独立功能的代码块&#xff0c;组织成为一个整体&#xff0c;使其具有特殊功能的代码集。我感觉方法就是类里面的函数 注意&#xff1a; 方法必须先创建才可以使用&#xff0c;该过程称为方法的定义。方法创建后并不是直接运行的&#xf…

编译性语言、解释性语言和脚本语言的区别

计算机是不能理解高级语言&#xff0c;当然也就不能直接执行高级语言了。计算机只能直接理解机器语言&#xff0c;所以任何语言&#xff0c;都必须将其翻译成机器语言&#xff0c;计算机才能运行高级语言编写的程序。 一、翻译和解释的不同 翻译的方式有两种&#xff0c;一个是…

为什么JAVA的垃圾回收机制无法避免内存泄漏

一、本文参考&#xff1a;1.《深入理解java虚拟机 JVM高级特性与最佳实践》2.http://coderevisited.com/memory-leaks-in-java/二、对象已死的判定方法要进行JVM中对象回收首先要判断对象是否已经死亡&#xff0c;判断的方法有如下几个&#xff1a;1.引用计数法给对象中添加一个…

【代码笔记】iOS-点击城市中的tableView跳转到旅游景点的tableView,下面会有“显示”更多。...

一&#xff0c;效果图。 二&#xff0c;工程图。 三&#xff0c;代码。 RootViewController.h #import <UIKit/UIKit.h>interface RootViewController : UIViewController <UITableViewDelegate,UITableViewDataSource> {UITableView * _tableView;NSMutableArray …

Android Studio项目结构介绍

新建一个空的工程会出现以下界面&#xff1a; 从上往下依次是&#xff1a;项目名称、包名、项目存储的位置、项目所用的语言、项目所用的Android的系统版本。 进入之后右侧可选择界面的展示结构&#xff1a; 如果选择Android则会出现下面的结构展示&#xff1a;MainActivity是…

对于Ping的过程,你真的了解吗?

作者&#xff1a; 木木匠链接&#xff1a;https://juejin.im/post/5c15ec0f6fb9a049ec6af8b2一、概览对于ping命令&#xff0c;想必只要是程序员都知道吧&#xff1f;当我们检查网络情况的时候&#xff0c;最先使用的命令肯定是ping命令吧&#xff1f;一般我们用ping查看网络情…

Andropid自己定义组件-坐标具体解释

在做一个view背景特效的时候被坐标的各个获取方法搞晕了&#xff0c;几篇抄来抄去的博客也没弄非常清楚。 如今把整个总结一下。 事实上仅仅要把以下这张图看明确就没问题了。 涉及到的方法一共同拥有以下几个&#xff1a; view获取自身坐标&#xff1a;getLeft(),getTop(),get…

RocketMQ带你快速入门

1. MQ介绍 ##1.1 为什么要用MQ 消息队列是一种“先进先出”的数据结构 转存失败重新上传取消 其应用场景主要包含以下3个方面 应用解耦 系统的耦合性越高&#xff0c;容错性就越低。以电商应用为例&#xff0c;用户创建订单后&#xff0c;如果耦合调用库存系统、物流系统、…

年过35岁的程序员都去哪了?一张图道尽老程序员们的花样出路

有人来&#xff0c;有人去。程序员何其多&#xff0c;想知道他们都去哪了吗?对于程序员的工作出路&#xff0c;小编有以下几点建议&#xff1a;20-27岁&#xff1a;技术积累阶段假设本科22岁毕业&#xff0c;那么工作的前5年对你来说是打基础的阶段。在这5年时间里面&#xff…

分布式、高并发、多线程,到底有什么区别?

当提起这三个词的时候&#xff0c;是不是很多人都认为分布式高并发多线程&#xff1f;当面试官问到高并发系统可以采用哪些手段来解决&#xff0c;或者被问到分布式系统如何解决一致性的问题&#xff0c;是不是一脸懵逼&#xff1f;确实&#xff0c;在一开始接触的时候&#xf…

九种跨域方式实现原理(完整版)

前言前后端数据交互经常会碰到请求跨域&#xff0c;什么是跨域&#xff0c;以及有哪几种跨域方式&#xff0c;这是本文要探讨的内容。一、什么是跨域&#xff1f;1.什么是同源策略及其限制内容&#xff1f;同源策略是一种约定&#xff0c;它是浏览器最核心也最基本的安全功能&a…

[翻译] Visual Studio 2019 RC版发布

今天&#xff0c;我们将分享 Visual Studio 2019 的发布候选版(RC 版) - 这是在 4 月 2 日的虚拟发布活动上正式发布之前的最后步骤之一。 您可以在 visualstudio.com/downloads 下载 RC 版。与往常一样&#xff0c;查看RC 版的发行说明以获取更多详细信息。发布候选版的说明在…

docker安装rocketmq你学会了吗

防火墙开通端口 9876 10911 9800 firewall-cmd --zonepublic --add-port9876/tcp --permanent firewall-cmd --zonepublic --add-port10911/tcp --permanent firewall-cmd --zonepublic --add-port9800/tcp --permanent firewall-cmd --reload 创建存储文件夹 mkdir -p /root…

程序员的编程能力与编程年龄

作者丨酷壳/陈皓&#xff0c; http://coolshell.cn/articles/10688.html程序员这个职业究竟可以干多少年&#xff0c;在中国这片神奇的土地上&#xff0c;很多人都说只能干到30岁&#xff0c;然后就需要转型&#xff0c;就像《程序员技术练级攻略》这篇文章很多人回复到这种玩…