Bash - 增加 IP 地址但考虑子网掩码?

pro*_*ngs 0 bash

我有一个文件存储了我为 VPN 客户端设置的上次使用的本地 IP 地址。我正在自动执行添加新客户端的过程,因此我想读取用于上一个客户端的 IP,并增加用于下一个客户端的地址。

然而,这对于所使用的子网来说必须是敏感的。我将 /8 子网用于 10.0.0.0 RFC 1918 专用网络。

因此,假设最后一个客户端的 IP 是 10.0.0.5。增加后,我应该得到 10.0.0.6。

当最后一个客户端 IP 达到 10.0.0.254 时,我们不应增加到 10.0.0.255,而是应该获取 10.0.1.1,依此类推。由于子网提供了除前导字节 (10.) 之外的所有八位字节供客户端使用,因此我们应该对整个范围采用这种方式,例如:

10.0.1.254 之后 -> 10.0.2.1

10.0.254.254 之后 -> 10.1.0.1

我正在寻找最简单的方法来做到这一点。这可以用一个衬垫来完成吗?

roa*_*ima 5

如果您允许有效的 IP 地址,例如 ,10.0.1.0/8那么10.0.255.255/8您可以使用单调递增的 32 位整数,如下所示

# Seed with 10.0.0.0 = 167772160
echo $(( (10<<24) + (0<<16) + (0<<8) + 0 )) >counter

# Read the counter, increment, and produce IP address
read ip <counter
echo $((++ip)) >counter

printf "%d.%d.%d.%d\n" $(( (ip>>24)&255 )) $(( (ip>>16)&255 )) $(( (ip>>8)&255 )) $((ip&255))
Run Code Online (Sandbox Code Playgroud)