在当前子网中查找免费IP地址的最简单方法?

时间:2010-02-16 13:52:32

标签: c# .net networking ip-address

在本地适配器子网上查找下一个未使用的IP地址的最简单方法是什么?

IPAddress GetNextFreeIP(NetworkInterface intface)
{
    ...?
}

更新
我编写了一个可以在许多不同场景中使用的BOOTP / TFTP服务器(交叉电缆,小型专用网络,大型企业网络)。我必须给小型嵌入式系统我正在更新一个IP地址,并希望找到一个备用系统供它使用......

5 个答案:

答案 0 :(得分:1)

如果你有DHCP管理的IP范围,你有一个可以与之交谈的实例 - DHCP服务器(就像大卫推荐的那样)

如果您没有托管IP范围而没有其他可以与之通信的实例,则没有可靠的方法来判断是否使用了IP。 IP本身不提供此类服务。

答案 1 :(得分:1)

除了询问DHCP服务器之外,我猜你可以在子网上进行广播ping并从所有计算机收集响应,只需对IP地址进行排序即可找到下一个。当然,这假设所有设备都在线并响应广播。因此,在一个非常受控的环境中,这可能会起作用。

答案 2 :(得分:0)

简短的回答是你不能,正如Thorsten79所说的那样。

答案略长:

这取决于您的网络配置:管理员如何决定分配IP地址。通常会为服务器,路由器等手动分配ip地址,为工作站等提供一组dhcp分配的ip地址。

如果您可以与dhcp服务器通信,您可能会发现保留范围内的哪些地址是免费的,但对于其他地址您无法找到。

更有趣的问题是你想要完成什么?也许它可以以不同的方式实现?

答案 3 :(得分:0)

从我所看到的带有TFTP服务器的嵌入式设备,他们使用记录的硬编码IP地址启动。经过一段时间(~3-10秒)后,引导加载程序将控制转移到读取其配置并设置IP地址的应用程序。

如果有人想使用引导加载程序加载新固件,那么他们需要阅读文档,确保可以访问IP地址(在同一子网上),重启设备,并将应用程序TFTP到设备。

答案 4 :(得分:0)

当你说没有办法确保没有使用IP时,你在技术上是正确的。但我现在决定依靠这个......

    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;
            }
        }
    }