Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
查找网络IP范围的Shell脚本(Bash)_Bash_Shell_Text Processing - Fatal编程技术网

查找网络IP范围的Shell脚本(Bash)

查找网络IP范围的Shell脚本(Bash),bash,shell,text-processing,Bash,Shell,Text Processing,查找网络IP范围的Shell脚本(Bash) 我试图创建一个shell脚本来自动查找网络的IP地址范围。到目前为止,我主持了comamnd: ifconfig | awk '/broadcast/' 这将创建输出: inet 192.168.1.228 netmask 255.255.255.0 broadcast 192.168.1.255 我想让shell脚本获取提供的数字(我认为这足以找到一个IP地址范围,但如果我错了,请纠正我),基本上只输出一个范围,因此我认为这将是以下选项之一

查找网络IP范围的Shell脚本(Bash)

我试图创建一个shell脚本来自动查找网络的IP地址范围。到目前为止,我主持了comamnd:

ifconfig | awk '/broadcast/'
这将创建输出:

inet 192.168.1.228  netmask 255.255.255.0  broadcast 192.168.1.255
我想让shell脚本获取提供的数字(我认为这足以找到一个IP地址范围,但如果我错了,请纠正我),基本上只输出一个范围,因此我认为这将是以下选项之一:

192.168.1.0/24

192.168.1.0-255

192.168.1.*

如果这是查找IP范围的方法,那么谁能帮助我找出如何将其显示为简单的输出,如我前面提到的三个选项之一?如果这不是找到IP范围的方法,请您解释一下实现这一点的最准确方法是什么。我试图更深入地理解网络和shell脚本,因此非常感谢您的帮助。

如果您打算使用ifconfig,那么它应该是这样的:

BARRAY=({0..1}{0..1}{0..1}{0..1}{0..1}{0..1}{0..1}{0..1})

PARAMS=$(ifconfig wlan0 | grep netmask | awk '{print $2" "$4}')

IP_ADDRESS=${PARAMS%% *}
IP_ADDRESS=${IP_ADDRESS//./ }

BINARY_IP_ADDRESS=$(for octet in $IP_ADDRESS; do echo -n ${BARRAY[octet]}" "; done)

BIN_IP_SEP1=${BINARY_IP_ADDRESS//1/1 }
BINARY_IP_ARRAY=( ${BIN_IP_SEP1//0/0 } )

NETMASK=${PARAMS#* }
NETMASK=${NETMASK//./ }

BINARY_NETMASK=$(
for octet in $NETMASK
do
    echo -n ${BARRAY[octet]}" "
done
)

BIN_MASK_SEP1=${BINARY_NETMASK//1/1 }
BINARY_MASK_ARRAY=( ${BIN_MASK_SEP1//0/0 } )

# Count bits in MASK ARRAY
BITS_COUNT=0
for i in ${BINARY_MASK_ARRAY[@]}
do
    [ "$i" == "1" ] && BITS_COUNT=$((BITS_COUNT + 1))
done

# Count address
NEW_ADDRESS=""
for i in {0..31}
do
    [ $(($i % 8)) -ne 0 ] || NEW_ADDRESS+=" "
    if [ "${BINARY_MASK_ARRAY[$i]}" == "1" ]
    then
        NEW_ADDRESS+="${BINARY_IP_ARRAY[$i]}"
    else
        NEW_ADDRESS+="${BINARY_MASK_ARRAY[$i]}"
    fi
done

# Convert binary to decimal
DECIMAL_ADDRESS=`echo $(for octet in $NEW_ADDRESS; do echo $((2#$octet)); done)`
DECIMAL_ADDRESS=${DECIMAL_ADDRESS// /.}

# Final result
echo $DECIMAL_ADDRESS/$BITS_COUNT
如果要使用“ip地址显示”,则只需根据收到的数据更正参数计算。无论如何,只有这一行使用外部命令,脚本的其余部分使用纯bash。
我希望它能有所帮助。

ifconfig
已被弃用,请阅读,我认为更好的方法是
ip addr show
nmcli dev list iface eth0
(这取决于分布式)。使用