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

免责声明:本文来自互联网,本站所有信息(包括但不限于文字、视频、音频、数据及图表),不保证该信息的准确性、真实性、完整性、有效性、及时性、原创性等,版权归属于原作者,如无意侵犯媒体或个人知识产权,请来电或致函告之,本站将在第一时间处理。猿码集站发布此文目的在于促进信息交流,此文观点与本站立场无关,不承担任何责任。

后端开发标签