我有一个文件存储了我为 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
我正在寻找最简单的方法来做到这一点。这可以用一个衬垫来完成吗?
如果您允许有效的 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)