百度搜索的方案

如果你去百度C#如何获取本机IP,那么大概率的你会得到以下的几段代码,第一种就是这样:

string name = Dns.GetHostName();
IPAddress[] ipadrlist = Dns.GetHostAddresses(name);

或者这样:

        public static void GetLoacalIPMaybeVirtualNetwork()
{
var host = Dns.GetHostEntry(Dns.GetHostName());
foreach (var ip in host.AddressList)
{
if (ip.AddressFamily == AddressFamily.InterNetwork)
{
Console.WriteLine(ip.ToString());
}
}
}

这种写法本身没有问题,但是当你的电脑上有多个网卡,比如vmare虚拟的的网卡,那么你会得到一列的IP数据,没有办法得到这些IP那个是你正在使用的IP。

就像这样

这时网上的代码就会给你第二种的参考代码即让你去访问一个网站获取或者使用ipconfig命令来获取IP。

这种方式没有什么问题,但是如果使用访问网站的方式,那么你可能获取到的是运营商分配的IP而不是本机局域网的IP。在一些需要访问本机局域网的的应用下就不太适用。

所以我个人认为这些方案都不是特别好。

我的方案

C#在其System.Net.NetworkInformation包下有一个NetworkInterfaceType的枚举类,在这个枚举类下定义了多种的网络类型。

比如网络接口使用以太网连接。以太网是在IEEE中定义的 802.3类型的Ethernet,再比如网络接口使用无线LAN连接(IEEE 802.11标准)的类型Wireless80211

通过这个枚举类,我们就能判断该网络IP所属的类型。

然后我们就可以通过使用抽象类NetworkInterface提供的GetAllNetworkInterfaces获取所有的网络接口,之后再通过判断NetworkInterfaceType网络接口类型,来获取正在使用真正的局域网IP。

具体代码如下:

        public static string GetLocalIPv4(NetworkInterfaceType _type)
{
string output = "";
foreach (NetworkInterface item in NetworkInterface.GetAllNetworkInterfaces())
{
// 网络类型是所规定的并且网络再运行状态
if (item.NetworkInterfaceType == _type && item.OperationalStatus == OperationalStatus.Up)
{
foreach (UnicastIPAddressInformation ip in item.GetIPProperties().UnicastAddresses)
{
if (ip.Address.AddressFamily == AddressFamily.InterNetwork)
{
output = ip.Address.ToString();
}
}
}
}
return output;
}

这时,我们就可以根据网络类型来获取相应的IP,鉴于当前大多数人使用的都是无线网卡,那么我们就可以先从无线网卡来获取IP地址。

        public static string IPV4()
{
string ipv4 = GetLocalIPv4(NetworkInterfaceType.Wireless80211);
// 如果不是无线网卡,则获取有线网卡的地址
if (ipv4 == "")
{
ipv4 = GetLocalIPv4(NetworkInterfaceType.Ethernet);
// 如果有线网卡也没有获取到数据,则使用最开始可能包含虚拟网卡的方法来获取IP
if (ipv4 == "")
{
ipv4 = GetLoacalIPMaybeVirtualNetwork();
}
}
return ipv4;
}

这样我们就能获取到本机目前使用的局域网IP了。

另外,推荐在使用获取IP的方法之前,先使用NetworkInterface.GetIsNetworkAvailable()方法来判断一下网络是否连接,确保后期获取IP不会出错。

END

版权信息:本文首发于https://www.buguagaoshu.com 转载请注明来源

C# 如何获取本机IP的更多相关文章

  1. 获取本机IP地址

    这里有两种方法: //获取本机IP - (NSString *)localIPAddress { NSString *localIP = nil; struct ifaddrs *addrs; ) { ...

  2. python未知网卡名情况下获取本机IP

    import socket def get_ip(): s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) try: # doesn't even ...

  3. 关于是用dotnet获取本机IP地址+计算机名的方法

    印象中在maxscript帮助文档里找到过方法,但是当时没记下来.只能通过dotnet实现了. 如果电脑有无线网卡和本地连接,可能会出现乱码,也问了写dotnet的朋友,提供了一些思路,不过最终还是使 ...

  4. Windows下获取本机IP地址方法介绍

    Windows下获取本机IP地址方法介绍 if((hostinfo = gethostbyname(name)) != NULL) { #if 1 ; printf("IP COUNT: % ...

  5. python学习之最简单的获取本机ip信息的小程序

    文章是从我的个人博客粘贴过来的,大家可以直接访问我的个人博客哦 http://www.iwangzheng.com 获取本机ip信息的命令ifconfig总是在用,这次拿到pyhton代码里,感觉py ...

  6. java获取本机IP地址

    转载自:http://blog.csdn.net/thunder09/article/details/5360251 在网上找了几个用java获取本机IP地址的代码,发现都少都有些不完美,自己整理了一 ...

  7. #获取本机IP地址时排除IPv6类型,只返回IPv4地址的方法

    public static string GetLocalIP(){try{string HostName = Dns.GetHostName(); //得到主机名IPHostEntry IpEntr ...

  8. 获取本机IP、mac地址、计算机名

    python获取本机IP.mac地址.计算机名 在python中获取ip地址和在php中有很大不同,我们先来看一下python 获得本机MAC地址: >>> import uuid ...

  9. C# 获取网页数据、获取本机IP 分类: C# 2014-12-16 14:59 308人阅读 评论(0) 收藏

    说明: (1) http://www.3322.org/dyndns/getip 这个网址可以获取本机IP,读取的内容就是本机IP (2)方法经测试,可以实现. (3)参考:http://www.cn ...

  10. C#获取本机IP搜集整理7种方法

    今天打算试着写个小聊天程序,但是要用到获取本机IP,以前从没用过.摆渡百度了一会儿,出于贪心,想把各种获取本机IP的方法给找出来.摆渡+测试了几个小时,于是有了下面的成果,有点小累,但看到这些成果,也 ...

随机推荐

  1. 使用OHOS SDK构建zziplib

    参照OHOS IDE和SDK的安装方法配置好开发环境. 从gitee下载源码,当前最新的提交记录ID为6699e0fe8a0307b16dcc055eda04452e13abe63a. 执行如下命令: ...

  2. Seaborn分布数据可视化---直方图/密度图

    直方图\密度图 直方图和密度图一般用于分布数据的可视化. distplot 用于绘制单变量的分布图,包括直方图和密度图. sns.distplot( a, bins=None, hist=True, ...

  3. Linux 使用 crontab 定时拆分日志、清理过期文件

    @ 目录 前言 简介 一.准备工作 1.1 创建写入脚本 1.2 设置执行权限 1.3 添加定时任务 1.4 配置生效 二.Tomcat日志 按每天分割 2.1 创建一个 sh文件 2.2 设置执行权 ...

  4. C# 属性概述

    属性概述 属性允许类公开获取和设置值的公共方法,而隐藏实现或验证代码. get 属性访问器用于返回属性值,而 set 属性访问器用于分配新值. 这些访问器可以具有不同的访问级别. 有关详细信息,请参阅 ...

  5. 【FAQ】接入HMS Core广告服务中的常见问题总结和解决方法

    HMS Core广告服务(Ads Kit)为开发者提供流量变现服务和广告标识服务,依托华为终端能力,整合资源,帮助开发者获取高质量的广告内容.同时提供转化跟踪参数服务,支持三方监测平台.广告主进行转化 ...

  6. HarmonyOS—UI 开发性能提升的推荐方法

    注:本文转载自 HarmonyOS 官网文档 开发者若使用低性能的代码实现功能场景可能不会影响应用的正常运行,但却会对应用的性能造成负面影响.本章节列举出了一些可提升性能的场景供开发者参考,以避免应用 ...

  7. Windows Server之KMS

    KMS是什么? KMS全称是Key Management Service,本身就是微软官方提供的一种激活方式,通常用于大型组织客需要激活的客户端数量不固定的情况. 正常情况下,激活Windows系统需 ...

  8. 深入理解DES算法:原理、实现与应用

    title: 深入理解DES算法:原理.实现与应用 date: 2024/4/14 21:30:21 updated: 2024/4/14 21:30:21 tags: DES加密 对称加密 分组密码 ...

  9. CentOS8 / CentOS7 yum源最新修改搭建 2022.3.1

    Part I CentOS 8 源更新 ========================================== 2022年过完后,发现公司里面的所有服务器yum都不能用了,一直报错 按照 ...

  10. Oracle 一些触发器自治事务相关错误

    Oracle 一些触发器自治事务相关错误 table XXX is mutating,trigger/function may not see it 在触发器中调用的函数或者语句有查询当前表的操作,比 ...