是否可以用脚本检查ip是否空闲
伪代码看起来像这样
if [ip is available]
echo "IP is available"
else
echo "IP is not available"
fi
也许可以使用 ping 来实现此目的吗?
答案1
如果您的请求设备已有 IP 地址,则可以通过以下方式进行公平尝试:ping
if ping -c1 -w3 10.11.12.13 >/dev/null 2>&1
then
echo "Ping responded; IP address allocated" >&2
else
echo "Ping did not respond; IP address either free or firewalled" >&2
fi
请注意,无法使用此技术来区分拒绝应答的主机和不存在的主机。
答案2
从某种意义上说,这是不可能的。
您可以从 DHCP 服务器请求特定的 IP。 IPv6 自动执行重复地址检测。在 IPv4 中,DHCP 客户端应该使用 ARP(或等效方法)检查重复地址。不过,标准工具不会检查静态地址的 IPv4 冲突(与 Windows 不同)。
但如果你检查IP没有尝试分配它时,IP 可能会在您检查后立即变得不可用(“竞争条件”)。
DHCP 地址分配不会受到这种竞争情况的影响,除非涉及多个冲突的 DHCP 服务器的网络配置错误。 IPv6 DAD 也应该阻止它。
IPv4双主检测使用 ARP 探针,但它并没有成为完整的标准。我相信 DHCPv4 没有以任何方式指定探测,因此它的某些实现可能会受到竞争的影响。
正如 John 指出的那样,也有可能有一个静态配置的设备会(盲目地)声明 IP,但它现在恰好已关闭。如果您需要 IPv4 地址,那么使用 DHCP 获取它是一个不错的选择,可以让网络管理员防止此类冲突。