C#获取本机IP搜集整理7种方法的示例代码分享

1. 使用C#自带的Dns类获取本机IP地址

在使用C#获取本机IP地址时,可以使用C#自带的Dns类来获取。它提供了一个GetHostEntry()方法,该方法将本地主机的名称解析为IPHostEntry实例,并返回与主机名关联的IP地址列表。下面是使用Dns类来获取本机IP地址的示例代码:

using System.Net;

IPHostEntry host = Dns.GetHostEntry(Dns.GetHostName());

foreach (IPAddress ip in host.AddressList)

{

if (ip.AddressFamily == AddressFamily.InterNetwork)

{

Console.WriteLine(ip.ToString());

}

}

值得注意的是,上述代码可能会返回多个IP地址,但通常只需要第一个地址。

2. 使用WMI获取本机IP地址

除了使用C#自带的Dns类之外,我们还可以使用WMI(Windows Management Instrumentation)来获取本机IP地址。WMI是一个用于管理Windows系统的工具,可以使用它来获取本机的各种信息,包括IP地址。下面是使用WMI来获取本机IP地址的示例代码:

using System.Management;

ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = 'TRUE'");

foreach (ManagementObject obj in searcher.Get())

{

string[] addresses = (string[])obj["IPAddress"];

foreach (string address in addresses)

{

Console.WriteLine(address);

}

}

上述代码使用了Win32_NetworkAdapterConfiguration WMI类,它包含了有关Windows操作系统上可用的网络适配器的信息。该类中包含了本地IP地址的属性。值得注意的是,有多个网络适配器的计算机可能会返回多个IP地址。

3. 使用UDP套接字获取本机IP地址

另一种使用C#获取本机IP地址的方法是使用UDP(用户数据报协议)套接字。UDP套接字是一种网络编程协议,它可以轻松地获得计算机的IP地址。下面是使用UDP套接字获取本机IP地址的示例代码:

using System.Net;

using System.Net.Sockets;

UdpClient udpClient = new UdpClient("8.8.8.8", 1);

IPAddress localAddress = ((IPEndPoint)udpClient.Client.LocalEndPoint).Address;

上述代码通过向Google DNS服务器发送一个UDP数据包,并从本地套接字获取IP地址,从而获得了本机的IP地址。但是,该方法只适用于已连接到互联网的计算机。

4. 使用Socket类获取本机IP地址

类似于UDP套接字,我们还可以使用Socket类来获取本机的IP地址。Socket类是一个基于网络的编程类库,可以轻松地获取网络相关的信息。下面是使用Socket类获取本机IP地址的示例代码:

using System.Net;

using System.Net.Sockets;

Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.IP);

socket.Connect("8.8.8.8", 65530);

IPEndPoint endPoint = socket.LocalEndPoint as IPEndPoint;

IPAddress localAddress = endPoint.Address;

上述代码使用了Socket类,并从本地套接字获取IP地址。类似于UDP套接字,该方法只适用于已连接到互联网的计算机。

5. 使用NetworkInterface类获取本机IP地址

除了使用网络套接字之外,我们还可以使用NetworkInterface类来获取本机IP地址。它是一个.NET的基类,可以读取和设置计算机中的网络适配器配置。下面是使用NetworkInterface类获取本机IP地址的示例代码:

using System.Net.NetworkInformation;

foreach (NetworkInterface networkInterface in NetworkInterface.GetAllNetworkInterfaces())

{

if (networkInterface.OperationalStatus == OperationalStatus.Up)

{

IPInterfaceProperties properties = networkInterface.GetIPProperties();

foreach (IPAddressInformation address in properties.UnicastAddresses)

{

Console.WriteLine(address.Address);

}

}

}

上述代码使用NetworkInterface类遍历所有网络接口,并获取每个接口的IP地址。同样需要注意,有多个网络适配器的计算机可能会返回多个IP地址。

6. 使用System.Net.NetworkInformation命名空间获取本机IP地址

除了使用NetworkInterface类之外,我们还可以使用System.Net.NetworkInformation命名空间中的其他类和方法来获取计算机的IP地址。下面是使用该命名空间获取本机IP地址的示例代码:

using System.Net;

using System.Net.NetworkInformation;

IPGlobalProperties ipProperties = IPGlobalProperties.GetIPGlobalProperties();

foreach (IPAddressInformation address in ipProperties.GetUnicastAddresses())

{

Console.WriteLine(address.Address);

}

上述代码使用了System.Net.NetworkInformation命名空间中的IPGlobalProperties和IPAddressInformation类,可以轻松地获取计算机的IP地址列表。

7. 使用ARP协议获取本机IP地址

最后一种使用C#获取本机IP地址的方法是使用ARP(地址解析协议)协议。这种方法要求您的本地网络管理员提供一个ARP表,其中包含全部可用IP地址的列表。下面是使用ARP协议获取本机IP地址的示例代码:

using System.Net.NetworkInformation;

foreach (IPAddress address in IPGlobalProperties.GetIPGlobalProperties().GetUnicastAddresses())

{

PhysicalAddress physicalAddress = null;

foreach (NetworkInterface nic in NetworkInterface.GetAllNetworkInterfaces())

{

IPInterfaceProperties properties = nic.GetIPProperties();

foreach (UnicastIPAddressInformation ip in properties.UnicastAddresses)

{

if (ip.Address.Equals(address))

{

physicalAddress = nic.GetPhysicalAddress();

break;

}

}

}

Console.WriteLine(address.ToString());

}

上述代码使用了IPGlobalProperties和NetworkInterface类,并通过ARP协议获取计算机的IP地址列表。

总结

C#提供了多种方式来获取本机IP地址,每种方式都有自己的优缺点。通过使用Dns类、WMI、UDP、Socket、NetworkInterface类、System.Net.NetworkInformation命名空间或ARP协议,我们可以轻松地获取计算机的IP地址列表。但是,如果有多个网络适配器的计算机可能会返回多个IP地址,因此需要谨慎处理。此外,如果您的计算机未连接到互联网,则无法使用UDP和Socket套接字来获取IP地址。

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

后端开发标签