迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 >

在 C# 中获取本地 IP 地址

作者:迹忆客 最近更新:2024/02/01 浏览次数:

在本教程中,我们将讨论在 C# 中获取机器本地 IP 地址的方法。


使用 C# 中的 Dns.GetHostEntry() 函数获取本地 IP 地址

Dns 类获取与 Internet 上的主机有关的信息。在 C# 中,Dns 类中有很多方法可以实现 DNS 相关功能。其中 Dns.GetHostEntry() 函数用于获取主机的 IP 地址。

以下代码示例向我们展示了如何使用 C# 中的 Dns.GetHostEntry() 函数获取计算机的本地 IP 地址。

using System;
using System.Net;

namespace get_local_ip_address {
  class Program {
    static void Main(string[] args) {
      String strHostName = string.Empty;
      IPHostEntry ipEntry = Dns.GetHostEntry(Dns.GetHostName());
      IPAddress[] addr = ipEntry.AddressList;

      for (int i = 0; i < addr.Length; i++) {
        Console.WriteLine("IP Address {0}: {1} ", i, addr[i].ToString());
      }
    }
  }
}

输出:

IP Address 0: fe80::1db8:23a7:6483:8976%20
IP Address 1: 192.168.43.239

在上面的代码中,我们将 Dns.GetHostName() 函数作为 Dns.GetHostEntry() 函数的参数传递,以获取 C# 中本地计算机的 IP 地址。这种方法的唯一问题是,它为我们提供了机器的所有 IP 地址。要获取特定的 IP 地址,我们必须使用 C# 编写以下代码。

using System;
using System.Net;

namespace get_local_ip_address {
  class Program {
    static void Main(string[] args) {
      var host = Dns.GetHostEntry(Dns.GetHostName());
      foreach (var ip in host.AddressList) {
        if (ip.AddressFamily == AddressFamily.InterNetwork) {
          Console.WriteLine("IP Address = " + ip.ToString());
        }
      }
    }
  }
}

输出:

IP Address = 192.168.43.239

在上面的代码中,我们检查了 ip.AddressFamily 是否等于 AddressFamily.InterNetwork。此条件检查 ip 变量中的 IP 地址是否为 IPv4 地址。上面的代码仅返回我们计算机的 IPv4 地址。如果要获取本机的 IPv6 地址,可以使用 AddressFamily.InterNetworkV6 属性,而不是 AddressFamily.InterNetwork 属性。


使用 C# 中的 Socket.LocalEndPoint 属性获取本地 IP 地址

当有多个 IP 地址时,获取我们机器的本地 IP 地址的一种更准确的方法是连接 UDP 套接字,然后读取其本地端点。C# 中的 Socket 类实现了 Berkeley 套接字接口,该接口提供了网络通信的功能。以下代码示例向我们展示了如何使用 Socket.LocalEndPoint 属性来确定我们的计算机在 C# 中的本地 IP 地址。

using System;
using System.Net;
using System.Net.Sockets;

namespace get_local_ip_address {
  class Program {
    static void Main(string[] args) {
      string localIP = string.Empty;
      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("IP Address = " + localIP);
    }
  }
}

输出:

IP Address = 192.168.43.239

在上面的代码中,我们将 socket 套接字连接到我们的本地计算机,并使用 socket.LocalEndPoint 属性提取了 socket 的本地端点。我们使用 endPoint.Address 属性来获取 endPoint 的 IP 地址。


在 C# 中使用 Linq 获取本地 IP 地址

Linq 或语言集成查询提供了 C# 中的 SQL 功能。我们还可以使用 Linq 和 Dns.GetHostEntry() 函数在 C# 中获取我们计算机的本地 IP 地址。

以下代码示例向我们展示了如何使用 Linq 在 C# 中获取计算机的本地 IP 地址。

using System;
using System.Linq;
using System.Net;

namespace get_local_ip_address {
  class Program {
    static void Main(string[] args) {
      if (!System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable()) {
        Console.WriteLine("No Network Available");
      }

      IPHostEntry host = Dns.GetHostEntry(Dns.GetHostName());

      var ippaddress =
          host.AddressList.FirstOrDefault(ip => ip.AddressFamily == AddressFamily.InterNetwork);
      Console.WriteLine(ippaddress);
    }
  }
}

输出:

192.168.43.239

在上面的代码中,我们使用 C# 中的 Linq 的 Dns.GetHostEntry() 函数确定了计算机的本地 IPv4 地址。其余代码类似于我们的第一个示例;唯一的区别是,我们从 Dns.GetHostEntry() 函数返回的地址列表中仅提取了一个 IPv4 地址。


在 C# 中使用 NetworkInterface 类获取本地 IP 地址

NetworkInterface 类包含有关本地计算机上网络接口的数据并提供网络接口的统计信息和配置。NetworkInterface 类中的 GetAllNetworkInterfaces() 函数为我们提供了本地计算机上的所有网络接口。使用了 NetworkInterface 类中的 NetworkInterfaceType 属性获取网络接口的类型。

以下代码示例显示了我们如何使用所有这些功能来获取 C# 中本地计算机的本地 IP 地址。

using System;
using System.Linq;
using System.Net;

namespace get_local_ip_address {
  class Program {
    public static void getLocalIPAddressWithNetworkInterface(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();
            }
          }
        }
      }
      Console.WriteLine("IP Address = " + output);
    }
    static void Main(string[] args) {
      getLocalIPAddressWithNetworkInterface(NetworkInterfaceType.Wireless80211);
    }
  }
}

输出:

IP Address = 192.168.43.239

在上面的代码中,我们使用 C# 中的 NetworkInterface 类检索了本地计算机的 WLAN IPv4 地址。上面的代码可用于获取我们本地计算机上的任何类型的 IP 地址。例如,如果要获取以太网接口的 IP 地址,则必须在函数调用中通过传递 NetworkInterfaceType.Ethernet 来指定它。

上一篇:C# 中的 REST API

下一篇:C# 中的单例类

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

在 C# 中发出 HTTP POST Web 请求

发布时间:2024/02/04 浏览次数:131 分类:编程语言

在 C# 中,可以使用 3 种主要方法来发出 HTTP POST Web 请求:WebClient 类,HttpWebRequest 类和 HttpClient 类。本教程将讨论在 C# 中发出 HTTP POST Web 请求的方法。使用 C# 中的 WebClient 类发出 HTTP POST Web 请求

在 C# 中调整图像大小

发布时间:2024/02/04 浏览次数:203 分类:编程语言

有两种主要方法可用于在 C# 中调整图像的大小,Bitmap 类构造函数和 graphics.DrawImage()函数。在本教程中,我们将讨论在C#中调整图像大小的方法。我们将带您完成整个过程,从加载原始图像到保

在 C# 中下载图片

发布时间:2024/02/04 浏览次数:138 分类:编程语言

有 3 种主要方法可用于下载 C# 中的图片,WebClient.DownloadFile()函数,Bitmap 类和 Image.FromStream()函数。在 C# 中使用 WebClient 类下载图片 WebClient 类提供了用于向 C# 中的 URL 发送数据和从 URL 接收数据

在 C# 中使用秒表

发布时间:2024/02/04 浏览次数:139 分类:编程语言

我们可以使用 Stopwatch 类来计算 C# 中的经过时间。使用 C# 中的秒表类计算经过时间 Stopwatch 类在 C# 中准确测量经过的时间。

在 C# 中获取可执行路径

发布时间:2024/02/04 浏览次数:200 分类:编程语言

有 3 种主要方法可用于获取 C# 中程序的可执行路径,即 Assembly 类,AppDomain 类和 Path 类。本教程将介绍获取 C# 代码的可执行路径的方法。使用 C# 中的 Assembly 类获取可执行路径

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便