在本地适配器子网上查找下一个未使用的IP地址的最简单方法是什么?
IPAddress GetNextFreeIP(NetworkInterface intface)
{
...?
}
更新
我编写了一个可以在许多不同场景中使用的BOOTP / TFTP服务器(交叉电缆,小型专用网络,大型企业网络)。我必须给小型嵌入式系统我正在更新一个IP地址,并希望找到一个备用系统供它使用......
答案 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;
}
}
}