4

我需要从 DHCP 获取可用的 IP。我试图获取任何 IP 地址并开始 ping 下一个地址,直到我到达一个没有响应的地址。

public static IPAddress FindNextFree(this IPAddress address)
{
    IPAddress workingAddress = address;
    Ping pingSender = new Ping();

    while (true)
    {
        byte[] localBytes = workingAddress.GetAddressBytes();

        localBytes[3]++;
        if (localBytes[3] > 254)
            localBytes[3] = 1;

        workingAddress = new IPAddress(localBytes);

        if (workingAddress.Equals(address))
            throw new TimeoutException("Could not find free IP address");

        PingReply reply = pingSender.Send(workingAddress, 1000);
        if (reply.Status != IPStatus.Success)
        {
            return workingAddress;
        }
    }
}

但是,有时 DHCP 会为某些计算机保留特殊地址,因此我需要从 dhcp 获取可用的 IP 地址。如何在 C# 中实现它?

4

3 回答 3

3

这不是你使用它的正确方式,你应该向 DHCP 服务器请求一个新的 ip 然后接受它,在这里阅读关于与 DHCP 服务器通信的信息

http://en.wikipedia.org/wiki/Dynamic_Host_Configuration_Protocol

于 2013-10-09T13:48:15.433 回答
3

客户端应用程序无法向 DHCP 服务器请求所有可用地址。

DHCP 服务器只能处理来自客户端的以下消息:

  • DHCP发现
  • DHCP请求
  • DHCPDECLINE
  • DHCP释放
  • DHCPINFORM

请参阅RFC 2131 - 动态主机配置协议了解更多信息。

如果您正在运行Windows DHCP 服务器并且您有权访问该框,则可以使用Windows PowerShell 脚本查询 DHCP 数据库。

摘自Weekend Scripter:解析 DHCP 数据库?没门!

  • 简介: Microsoft 脚本专家 Ed Wilson 谈到了 DHCPServer 模块中允许解析 DHCP 数据库的 Windows PowerShell 函数。
于 2013-10-09T13:52:52.943 回答
1

我发现这个应用程序可以解决问题 http://www.centrel-solutions.com/support/tools.aspx?feature=dhcpapi

于 2013-10-11T15:02:17.197 回答