【问题标题】:get my dhcp server ip address获取我的 dhcp 服务器 IP 地址
【发布时间】:2015-02-13 18:49:56
【问题描述】:

我的 DHCP 服务器地址是 192.168.0.1

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

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

我看了下

System.Net.NetworkInformation

但看不到任何我可以为此调用的内容。

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

谢谢

【问题讨论】:

标签: c# network-programming


【解决方案1】:

有关提供 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();
        }
    }
}

【讨论】:

  • 嗨,谢谢。确实有效,但上面的答案是第一个。谢谢你:)
【解决方案2】:

你可以试试这个:

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

【讨论】:

  • 感谢它为我工作。我确实在 DOS Ipconfig /all 上做了一个进程,这也给了我 DHCP,但我必须解析输出。这种方式更干净:)
【解决方案3】:

使用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();

【讨论】:

    猜你喜欢
    • 2014-07-03
    • 2015-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-01
    • 1970-01-01
    • 2018-08-03
    • 2013-05-18
    相关资源
    最近更新 更多