网上有很多种方法可以获取到本地的IP地址。一线常用的有这么些:

枚举本地网卡

using System.Net.NetworkInformation;
using System.Net.Sockets;foreach (NetworkInterface netif in NetworkInterface.GetAllNetworkInterfaces().Where(a => a.SupportsMulticast).Where(a => a.OperationalStatus == OperationalStatus.Up).Where(a => a.NetworkInterfaceType != NetworkInterfaceType.Loopback).Where(a => a.GetIPProperties().GetIPv4Properties() != null).Where(a => a.GetIPProperties().UnicastAddresses.Any(ua => ua.Address.AddressFamily == AddressFamily.InterNetwork)).Where(a => a.GetIPProperties().UnicastAddresses.Any(ua => ua.IsDnsEligible))
)
{Console.WriteLine("Network Interface: {0}", netif.Name);IPInterfaceProperties properties = netif.GetIPProperties();foreach (IPAddressInformation unicast in properties.UnicastAddresses)Console.WriteLine("\tUniCast: {0}", unicast.Address);
}

获得的信息比较全面,相当于网卡的信息都能获取,但是不能区分虚拟网卡(比如docker)。

尝试连接一个IP地址

string localIP;
using (Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, 0))
{socket.Connect("8.8.8.8", 65530);IPEndPoint endPoint = socket.LocalEndPoint as IPEndPoint;localIP = endPoint.Address.ToString();
}
Console.WriteLine(localIP);

可以避免虚拟网卡,但是对于内网地址,不一定适用,同时要求网络必须在线,并且有其他服务器可以进行连接。

借用DNS解析

using System.Net;string sHostName = Dns.GetHostName();
IPHostEntry ipE = Dns.GetHostEntry(sHostName);
IPAddress[] IpA = ipE.AddressList;
for (int i = 0; i < IpA.Length; i++)
{Console.WriteLine("IP Address {0}: {1} ", i, IpA[i].ToString());
}

IPAddress还可以继续通过筛选IPv4的方法进行更精确的选择,和第一种方法是类似的。操作方法非常简洁,但是和获得网卡信息一样,不能区分虚拟网卡。

总结
对于有双网卡的情况,往往两个网卡c#教程都是有效的IPV4地址,这个时候需要使用方法2通过局域网或者广域网内访问进行区分。当然也可以选择更为复杂的方式:在局域网内使用广播服务,然后再抓包确定获取的网络地址。

以上就是c# 获得本地ip地址的三种方法的详细内容

c# 获得本地ip地址的三种方法相关推荐

  1. linux编程获取本机IP地址的三种方法

    这是一项不太清晰而且没有多大意义的工作.一个原因是网络地址的设置非常灵活而且都是允许用户进行个性化设置的,比如一台计算机上可以有多块物理网卡或者虚拟网卡,一个网卡上可以绑定多个IP地址,用户可以为网卡 ...

  2. Python获取IP地址的三种方法

    在python中获取IP地址的方法很简单,我们只和gethostbyname和gethostbyname_ex两个函数可以实现了,当然也可以利用公网api来实现. 使用拨号上网的话,一般都有一个本地i ...

  3. (转载)Linux编程获取本机IP地址的三种方法

    (转载)http://blog.csdn.net/jcwKyl/article/details/6324147 这 是一项不太清晰而且没有多大意义的工作.一个原因是网络地址的设置非常灵活而且都是允许用 ...

  4. win7计算机名和IP地址,查看电脑win7系统IP地址的三种方法

    查询电脑IP地址,IP地址被用来给Internet上的电脑一个编号,就好像是大家的门牌号码一样,是独一无二的.不过有很多人都是不知道该如何进行查询自己电脑的ip地址.下面小编就来给大家讲解一下如何查询 ...

  5. 虚拟机下CentOS 6.5配置IP地址的三种方法

    实验软件环境:虚拟机Vmware Workstation10.0 .CentOS 6.5 32位 1.自动获取IP地址 虚拟机使用桥接模式,相当于连接到物理机的网络里,物理机网络有DHCP服务器自动分 ...

  6. 戴尔服务器虚拟机配置ip地址,虚拟机下CentOS配置IP地址的三种方法

    1.自动获取IP地址 虚拟机使用桥接模式,相当于连接到物理机的网络里,物理机网络有DHCP服务器自动分配IP地址. #dhclient 自动获取ip地址命令 #ifconfig 查询系统里网卡信息,i ...

  7. IP地址的三种表示格式及在Socket编程中的应用

    转自:http://blog.csdn.net/hguisu/article/details/7449955 使用TCP/IP协议进行网络应用开发的朋友首先要面对的就是对IP地址信息的处理.IP地址其 ...

  8. IP地址的三种表示格式 及 在Socket编程中的应用

    关于windows中的INADDR_ANY这个宏 头文件winsock.h中定义#define INADDR_ANY              (u_long)0x00000000 它是用于多IP机器 ...

  9. IP 地址的三种表示形式

    使用TCP/IP协议进行网络应用开发的朋友首先要面对的就是对IP地址信息的处理.IP地址其实有三种不同的表示格式:   1)Ascii(网络点分字符串)-        2) 网络地址(32位无符号整 ...

最新文章

  1. Winform开发的界面处理优化
  2. UART, SPI, IIC的详解及三者的区别和联系
  3. 4.7 参数 vs 超参数-深度学习-Stanford吴恩达教授
  4. Error:Cannot build artifact ‘ssm:war exploded‘ because it is included into a circular dependency
  5. Windows——蓝屏[失败的操作:WdFilter.sys]解决方案
  6. Linux安装PHP MongoDB扩展(亲测)
  7. php traits 使用,php中traits的使用
  8. rete_Rete之外的生活– RIP Rete 2013 :)
  9. ffmpeg-win32-v3.2.4 下载_MVBOX下载|MVBOX 7.1.0.4官方版
  10. 使用鸿蒙系统的家电厂商,除了华为外!谁还会用鸿蒙系统?米OV们不可能:这些巨头才会用...
  11. 初入java编程-面向对象
  12. 【库安装】windows下Python安装protobuf
  13. oracle分析函数-排名函数
  14. excel多列数据生成图分类有间隔
  15. TCP之 select模型
  16. 无服务器搭建Artalk评论系统后端
  17. 字幕助手 FastTitle 0.0.3 版本发布
  18. laravel 使用队列进行微信模板消息的群发
  19. Threejs系列--11游戏开发--沙漠赛车游戏【初步加载地面】
  20. Flutter 打开外部第三方应用

热门文章

  1. Matlab:License Manager Error -9
  2. 电磁场与仿真软件(20)
  3. python语言下划线怎么打_python下划线 | 学步园
  4. python 抓包秒杀_Python 爬虫,推荐一款简单的抓包工具(续)
  5. 华为新旗舰鸿蒙,华为新旗舰6月即将登场!鸿蒙系统+液态镜头,比Mate40更难购买...
  6. 如何优雅地处理过期订单
  7. Android手机一直连接USB进行自动化,一直充电,可能导致电池鼓包,如何定时禁止充电和开启充电?
  8. 忍者X3插件App计划,缔造属于自己的Web营销App
  9. HP小型机系统管理员必读
  10. 判赔腾讯108万,科技公司为公众号“刷量”构成不正当竞争