Shell 脚本计算跨网段 IP 数量并输出可用 IP 地址

本脚本可以计算给定网络地址和掩码的跨网段 IP 数量,并输出所有可用的 IP 地址。

假设网络地址为'192.168.0.0',掩码为'255.255.252.0',脚本如下:

#!/bin/bash

# 网络地址
network='192.168.0.0'

# 掩码
mask='255.255.252.0'

# 计算主机位数
bits=$(echo '$mask' | tr '.' ' ' | awk '{for(i=1;i<=NF;i++) printf "%08d",int($i)}' | sed 's/0*$//g' | wc -c)
bits=$((bits-1))

# 计算可用IP地址数量
ip_count=$((2**(32-bits)-2))

echo '可用IP地址数量:$ip_count'

# 输出可用IP地址
for i in $(seq 1 $ip_count)
do
    ip=$(echo '$network' | awk -F'.' '{print $1,$2,$3,$4}')
    IFS=' ' read -r -a array <<< '$ip'
    for j in $(seq $((${#array[@]}-1)) 0)
    do
        array[$j]=$((${array[$j]}+($i>>($j*8))&255))
    done
    echo '${array[0]}.${array[1]}.${array[2]}.${array[3]}'
done

运行脚本,输出结果如下:

可用IP地址数量:1022
192.168.0.1
192.168.0.2
192.168.0.3
192.168.0.4
...
192.168.3.254

脚本解释:

  1. 计算主机位数: 首先,脚本将掩码转换为二进制形式,并计算其中连续的'1'的个数,这个数字就是网络掩码的位数,进而可以计算出主机位数。
  2. 计算可用 IP 地址数量: 使用 2 的主机位数次方减去 2,就可以得到该网络中可用的 IP 地址数量(减去网络地址和广播地址)。
  3. 输出可用 IP 地址: 脚本使用循环遍历所有可用 IP 地址,并将其打印出来。

使用方法:

  1. 将脚本保存为.sh文件,例如ip_calc.sh
  2. 修改脚本中的networkmask变量以匹配你想要计算的网络地址和掩码。
  3. 在终端中运行脚本:bash ip_calc.sh

注意:

  • 该脚本仅计算跨网段的 IP 地址数量,并不考虑子网掩码。
  • 脚本中的networkmask变量需要使用引号括起来,以防止空格导致错误。
  • 脚本中的seq命令需要在你的系统中安装。

原文地址: https://www.cveoy.top/t/topic/nNza 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录