获取未使用的IP地址

时间:2013-10-09 13:40:39

标签: c# networking

我需要从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#中实现它?

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:3)

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

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

  • DHCPDISCOVER
  • DHCPREQUEST
  • DHCPDECLINE
  • DHCPRELEASE
  • DHCPINFORM

有关其他信息,请参阅RFC 2131 - Dynamic Host Configuration Protocol

如果您正在运行Windows DHCP server并且您可以访问该框,则可以使用Windows PowerShell Scripting来查询DHCP数据库。

摘自Weekend Scripter: Parsing the DHCP Database? No Way!

  • 摘要:Microsoft脚本专家Ed Wilson介绍了DHCPServer模块中允许解析DHCP数据库的Windows PowerShell功能。

答案 2 :(得分:1)

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