您的位置:

详解c#获取本机ip

一、初识获取本机ip

在许多网络应用程序中,获取本机的IP地址是一个关键任务。通过C#,我们可以方便地获取本地系统IP地址。

首先我们需要在C#中引入System.Net命名空间。然后,使用Dns类的GetHostName方法获取主机名,最后使用GetHostEntry方法返回相应IP地址。

using System.Net;

IPHostEntry hostname = Dns.GetHostEntry(Dns.GetHostName());
foreach (IPAddress ip in hostname.AddressList)
{
    Console.WriteLine(ip);
}

二、获取多个本机ip地址

如果本机有多个网卡或子网,我们需要获取所有的IP地址以便做出决策。可以通过枚举网络接口来完成。

首先,引入System.Net.NetworkInformation命名空间。然后,通过NetworkInterface类的GetIPProperties方法获取IP地址和网关信息。最后,获取IPv4地址列表。

using System.Net.NetworkInformation;

IPGlobalProperties properties = IPGlobalProperties.GetIPGlobalProperties(); 
NetworkInterface[] interfaces = NetworkInterface.GetAllNetworkInterfaces();
foreach (NetworkInterface adapter in interfaces)
{
    IPInterfaceProperties adapterProperties = adapter.GetIPProperties();       
    foreach (UnicastIPAddressInformation address in adapterProperties.UnicastAddresses)
    {
        if (address.Address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
        {
            Console.WriteLine(address.Address);
        }
    }
}

三、获取特定类型的本机ip地址

有时候我们只需要特定类型的IP地址,例如私有IP地址、公共IP地址、IPv4地址等。

要获取私有IP地址(如192.168.x.x或10.x.x.x),我们可以使用以下代码:

using System.Net;
using System.Net.NetworkInformation;

foreach (NetworkInterface ni in NetworkInterface.GetAllNetworkInterfaces())
{
    IPInterfaceProperties properties = ni.GetIPProperties();
    foreach (IPAddressInformation unicast in properties.UnicastAddresses)
    {
        if (unicast.Address.AddressFamily == AddressFamily.InterNetwork && IPAddress.IsPrivate(unicast.Address))
        {
            Console.WriteLine(unicast.Address);
        }
    }
}

要获取公共IP地址,我们可以使用以下代码:

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

IPHostEntry host = Dns.GetHostEntry(Dns.GetHostName());
foreach (IPAddress ip in host.AddressList)
{
    if (ip.AddressFamily == AddressFamily.InterNetwork)
    {
        if (!IPAddress.IsPrivate(ip))
        {
            Console.WriteLine(ip);
        }
    }
}

要获取IPv4地址,我们可以使用以下代码:

using System.Net;
using System.Net.NetworkInformation;

foreach (NetworkInterface ni in NetworkInterface.GetAllNetworkInterfaces())
{
    IPInterfaceProperties properties = ni.GetIPProperties();
    foreach (IPAddressInformation unicast in properties.UnicastAddresses)
    {
        if (unicast.Address.AddressFamily == AddressFamily.InterNetwork)
        {
            Console.WriteLine(unicast.Address);
        }
    }
}

四、总结

在本文中,我们学习了在C#中获取本机IP地址的多种方法,包括获取主机名、获取多个IP地址、获取特定类型的IP地址。希望这些示例代码能够帮助您解决与本地IP地址相关的问题。