一、初识获取本机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地址相关的问题。