1. 使用Dns类获取本地IP
1.1 Dns类简介
Dns类是C#中的一个用于域名解析的类,可以通过该类获取本地主机的IP地址信息。
1.2 使用Dns类获取本地IP的代码示例
using System;
using System.Net;
class Program
{
static void Main()
{
string hostName = Dns.GetHostName();
IPHostEntry ipEntry = Dns.GetHostEntry(hostName);
IPAddress[] ipAddresses = ipEntry.AddressList;
foreach (IPAddress ipAddress in ipAddresses)
{
Console.WriteLine(ipAddress.ToString());
}
}
}
上述代码通过调用Dns.GetHostName()方法获取本机的主机名,再通过Dns.GetHostEntry()方法获取主机名对应的IPHostEntry对象,最后通过IPHostEntry.AddressList属性获取IP地址列表,并通过循环遍历输出。
2. 使用NetworkInterface类获取本地IP
2.1 NetworkInterface类简介
NetworkInterface类是C#中用于网络接口管理的类,可以使用该类获取本地网络接口的IP地址信息。
2.2 使用NetworkInterface类获取本地IP的代码示例
using System;
using System.Net.NetworkInformation;
class Program
{
static void Main()
{
NetworkInterface[] networkInterfaces = NetworkInterface.GetAllNetworkInterfaces();
foreach (NetworkInterface networkInterface in networkInterfaces)
{
IPInterfaceProperties ipProperties = networkInterface.GetIPProperties();
UnicastIPAddressInformationCollection ipAddresses = ipProperties.UnicastAddresses;
foreach (UnicastIPAddressInformation ipAddressInfo in ipAddresses)
{
Console.WriteLine(ipAddressInfo.Address.ToString());
}
}
}
}
上述代码通过调用NetworkInterface.GetAllNetworkInterfaces()方法获取本机所有的网络接口,然后遍历每个网络接口,通过NetworkInterface.GetIPProperties()方法获取IP接口属性,再通过IPInterfaceProperties.UnicastAddresses属性获取IP地址列表,并通过循环遍历输出。
3. 使用WMI获取本地IP
3.1 WMI简介
WMI(Windows Management Instrumentation)是Windows操作系统中的一套管理框架,可以通过WMI获取系统信息、执行管理任务等。在C#中,可以使用System.Management命名空间下的类与WMI进行交互。
3.2 使用WMI获取本地IP的代码示例
using System;
using System.Management;
class Program
{
static void Main()
{
ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = 'TRUE'");
ManagementObjectCollection managementObjects = searcher.Get();
foreach (ManagementObject managementObject in managementObjects)
{
string[] ipAddresses = (string[])managementObject.GetPropertyValue("IPAddress");
foreach (string ipAddress in ipAddresses)
{
Console.WriteLine(ipAddress);
}
}
}
}
上述代码使用ManagementObjectSearcher类执行WMI查询,查询条件为“SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = 'TRUE'”,即获取所有IP已启用的网络适配器配置。通过调用ManagementObjectCollection类的Get()方法获取查询结果,遍历每个结果对象,通过GetPropertyValue()方法获取IPAddress属性的值,最后通过循环遍历输出。
4. 使用Socket类获取本地IP
4.1 Socket类简介
Socket类是C#中用于网络通信的类,可以通过该类与网络进行通信。通过创建一个Socket对象,可以获取本地IP地址信息。
4.2 使用Socket类获取本地IP的代码示例
using System;
using System.Net;
using System.Net.Sockets;
class Program
{
static void Main()
{
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.IP);
socket.Connect("8.8.8.8", 65530);
IPEndPoint localEndPoint = socket.LocalEndPoint as IPEndPoint;
string localIpAddress = localEndPoint.Address.ToString();
Console.WriteLine(localIpAddress);
}
}
上述代码通过创建一个Socket对象,指定AddressFamily为InterNetwork,SocketType为Dgram,ProtocolType为IP,然后通过调用Socket.Connect()方法连接到远程IP地址(此处为8.8.8.8,选择一个已知的IP地址),再通过Socket.LocalEndPoint属性获取本地终结点,通过强制转换为IPEndPoint类型后获取IP地址信息。
总结
通过以上四种方式,我们可以获取本地主机的IP地址信息。每种方式都有其适用场景,可以根据具体需求选择合适的方式来获取本地IP地址。