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

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地址。

后端开发标签