获取我的 dhcp 服务器 ip 地址

get my dhcp server ip address

我的 DHCP 服务器地址是 192.168.0.1

但是,我假设其他网络的 DHCP 服务器可以有不同的 IP 地址。

在 C# 中获取我的网络 DHCP 服务器 IP 地址的好方法是什么

我看过

System.Net.NetworkInformation

但看不到任何我可以要求的东西。

我怀疑这也是一件简单的事情?

谢谢

有关提供 IP 地址的 DHCP 服务器的信息是特定于接口的,因为主机上可以有多个接口,每个接口都连接到具有不同 DHCP 服务器的不同网络。根据 MSDN 文档,此信息应位于 IPInterfaceProperties.DhcpServerAddresses 下。他们文档中的示例代码:

public static void DisplayDhcpServerAddresses()
{
    Console.WriteLine("DHCP Servers");
    NetworkInterface[] adapters  = NetworkInterface.GetAllNetworkInterfaces();
    foreach (NetworkInterface adapter in adapters)
    {

        IPInterfaceProperties adapterProperties = adapter.GetIPProperties();
        IPAddressCollection addresses = adapterProperties.DhcpServerAddresses;
        if (addresses.Count >0)
        {
            Console.WriteLine(adapter.Description);
            foreach (IPAddress address in addresses)
            {
                Console.WriteLine("  Dhcp Address ............................ : {0}", 
                    address.ToString());
            }
            Console.WriteLine();
        }
    }
}

你可以试试这个:

Console.WriteLine("DHCP Servers");
NetworkInterface[] adapters  = NetworkInterface.GetAllNetworkInterfaces();
foreach (NetworkInterface adapter in adapters)
{

    IPInterfaceProperties adapterProperties = adapter.GetIPProperties();
    IPAddressCollection addresses = adapterProperties.DhcpServerAddresses;
    if (addresses.Count >0)
    {
        Console.WriteLine(adapter.Description);
        foreach (IPAddress address in addresses)
        {
            Console.WriteLine("  Dhcp Address ............................ : {0}", 
                address.ToString());
        }
        Console.WriteLine();
    }
}

更多信息:Here

使用 System.Linq,您可以使这更简单:

public static IEnumerable<IPAddress> GetDhcpServers() =>
   NetworkInterface.GetAllNetworkInterfaces().
   SelectMany(i => i.GetIPProperties().DhcpServerAddresses).Distinct();

如果您只想要活动服务器,可以按适配器的 OperationalStatus:

进行过滤
public static IEnumerable<IPAddress> GetActiveDhcpServers() =>
   NetworkInterface.GetAllNetworkInterfaces().
   Where(i => i.OperationalStatus == OperationalStatus.Up).
   SelectMany(i => i.GetIPProperties().DhcpServerAddresses).Distinct();