检查ip是否可用

检查ip是否可用

是否可以用脚本检查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 获取它是一个不错的选择,可以让网络管理员防止此类冲突。

相关内容