c# 获得本地ip地址的三种方法

网上有很多种方法可以获取到本地的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的方法进行更精确的选择,和第一种方法是类似的。操作方法非常简洁,但是和获得网卡信息一样,不能区分虚拟网卡。

总结

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

以上就是c# 获得本地ip地址的三种方法的详细内容,更多关于c# 获得本地ip地址的资料请关注我们其它相关文章!

(0)

相关推荐

  • C#监测IPv4v6网速及流量的实例代码

    1.前言   最近做项目需要用到监测网速及流量,我经过百度和墙内谷歌都没能快速发现监测IPV6流量和网速的用例:也经过自己的一番查询和调试,浪费了不少时间,现在作为经验分享出来希望大家指正. 2.C#代码 using System.Net.NetworkInformation; using System.Timers; namespace Monitor { public class MonitorNetwork { public string UpSpeed { get; set; } pub

  • C#自定义IP输入框控件

    场景: 做一些网络设备应用时,需要有ip地址的输入,这就需要ip地址输入框控件 思路: 1 重写TextBox 为IpInputBox. 2 重写TextBox为SubIpInputBox 3 一个IpInputBox 添加4个SubIpInputBox 和3个Label 控件图: 具体代码: 主窗口文件   Dialog.cs using System; using System.Collections.Generic; using System.ComponentModel; using S

  • C#使用GZipStream实现文件的压缩与解压

    本文实例为大家分享了C#实现文件的压缩与解压的具体代码,供大家参考,具体内容如下 需引入 System.IO.Compression; 1.C#代码(入门案例) Console.WriteLine("压缩文件..............."); using (FileStream fr = File.OpenRead("d:\\test.txt")) { using (FileStream fw = File.OpenWrite("d:\\test.zip

  • C#应用ToolStrip控件使用方法

    在应用C#进行Winform窗体程序编写的时候,经常需要编写工具栏.下面小编给大家分享一下C#如何应用ToolSctrip控件编写工具栏. 1.首先打开visual  studio  2017 ,新建一个winform的程序,如下图所示 2.然后在左边的工具箱中找到菜单和工具栏下的ToolStrip控件,如下图所示 3.将ToolStrip控件拖到窗体上,默认显示如下图所示,点击下拉框可以添加菜单栏内容 4.我们添加了一个Button类型的菜单,默认是只显示一个图片的样式,如下图所示 5.当然可

  • C# 使用SharpZipLib生成压缩包的实例代码

    本文通过一个简单的小例子简述SharpZipLib压缩文件的常规用法,仅供学习分享使用,如有不足之处,还请指正. 什么是SharpZipLib ? SharpZipLib是一个C#的类库,主要用来解压缩Zip,GZip,BZip2,Tar等格式,是以托管程序集的方式实现,可以方便的应用于其他的项目之中. 在工程中引用SharpZipLib 在项目中,点击项目名称右键-->管理NuGet程序包,打开NuGet包管理器窗口,进行搜索下载即可,如下图所示: SharpZipLib的关键类结构图 如下所

  • c# 文件压缩zip或将zip文件解压的方法

    1.必须Dll: ICSharpCode.SharpZipLib.dll.可从Nutget程序包中获取. 2.压缩文件 /// <summary> /// 压缩文件成zip /// </summary> /// <param name="fileZip">压缩成zip文件的绝对路径</param> /// <param name="fileName">被压缩指定文件的名字</param> ///

  • C#多线程爬虫抓取免费代理IP的示例代码

    这里用到一个HTML解析辅助类:HtmlAgilityPack,如果没有网上找一个增加到库里,这个插件有很多版本,如果你开发环境是使用VS2005就2.0的类库,VS2010就使用4.0,以此类推..........然后直接创建一个控制台应用,将我下面的代码COPY替换就可以运行,下面就来讲讲我两年前做爬虫经历,当时是给一家公司做,也是用的C#,不过当时遇到一个头痛的问题就是抓的图片有病毒,然后系统挂了几次.所以抓网站图片要注意安全,虽然我这里没涉及到图片,但是还是提醒下看文章的朋友. clas

  • C#获取本地IP的四种方式示例详解

    1.第一种方式 采用System.Net.Dns的GetHostAddress的方式,具体请看代码: /// <summary> /// 网络不通畅可以获取 /// 不过能获取到具体的IP /// </summary> /// <returns></returns> public static List<IPAddress> GetByGetHostAddresses() { try { IPAddress[] adds = Dns.GetHos

  • c#获取客户端IP地址(考虑代理)

    说明:本文中的内容是我综合博客园上的博文和MSDN讨论区的资料,再通过自己的实际测试而得来,属于自己原创的内容说实话很少,写这一篇是为了记录自己在项目中做过的事情,同时也想抛砖引玉.参考的博文及其作者在下文均有提及.待到自己以后对HTTP.TCP/IP等知识学深入了,一定再来这里深入讨论这个内容. 一.名词 首先说一下接下来要讲到的一些名词. 在Web开发中,我们大多都习惯使用HTTP请求头中的某些属性来获取客户端的IP地址,常见的属性是REMOTE_ADDR.HTTP_VIA和HTTP_X_F

  • C# 使用multipart form-data方式post数据到服务器

    使用multipart/form-data方式提交数据与普通的post方式有一定区别.multipart/form-data的请求头必须包含一个特殊的头信息:Content-Type,其值必须为multipart/form-data.另外还需要规定一个内容分割符用于分割请求体中的多个post的内容,如文件内容和文本内容,只有这样服务端才能正常解析数据.但是,multipart/form-data的基础还是post,它是由post方法来实现的.下面分别给出两种方法提交multipart/form-

随机推荐