用于计算IP地址范围的Bash脚本

用于计算IP地址范围的Bash脚本,bash,ip,ipv4,netmask,Bash,Ip,Ipv4,Netmask,我需要编写一个bash脚本,当我输入两个ip地址时,它将计算它们的汇总地址 例: 192.168.1.27/25 192.168.1.129/25 结果将是: 192.168.1.0/24 你能帮我写这个剧本吗 我知道你会问我“你试过什么?” 我试图在谷歌上找到一些东西,但我发现我必须转换成二进制然后计算,这将是非常困难的 我甚至不知道如何开始 有什么想法或提示吗?用bash计算常用网络掩码: #!/bin/bash D2B=({0..1}{0..1}{0..1}{0..1}{0.

我需要编写一个bash脚本,当我输入两个ip地址时,它将计算它们的汇总地址

例:

192.168.1.27/25
192.168.1.129/25  
结果将是:

192.168.1.0/24  
你能帮我写这个剧本吗

我知道你会问我“你试过什么?”

我试图在谷歌上找到一些东西,但我发现我必须转换成二进制然后计算,这将是非常困难的

我甚至不知道如何开始


有什么想法或提示吗?

用bash计算常用网络掩码:

#!/bin/bash

D2B=({0..1}{0..1}{0..1}{0..1}{0..1}{0..1}{0..1}{0..1})
declare -i c=0                              # set integer attribute

# read and convert IPs to binary
IFS=./ read -r -p "IP 1: " a1 a2 a3 a4     # e.g. 192.168.1.27
b1="${D2B[$a1]}${D2B[$a2]}${D2B[$a3]}${D2B[$a4]}"

IFS=./ read -r -p "IP 2: " a1 a2 a3 a4     # e.g. 192.168.1.129
b2="${D2B[$a1]}${D2B[$a2]}${D2B[$a3]}${D2B[$a4]}"

# find number of same bits ($c) in both IPs from left, use $c as counter
for ((i=0;i<32;i++)); do
  [[ ${b1:$i:1} == "${b2:$i:1}" ]] && c=c+1 || break
done    

# create string with zeros
for ((i=c;i<32;i++)); do
  fill="${fill}0"
done    

# append string with zeros to string with identical bits to fill 32 bit again
new="${b1:0:$c}${fill}"

# convert binary $new to decimal IP with netmask
new="$((2#${new:0:8})).$((2#${new:8:8})).$((2#${new:16:8})).$((2#${new:24:8}))/$c"
echo "$new"
#/bin/bash
D2B=({0..1}{0..1}{0..1}{0..1}{0..1}{0..1}{0..1}{0..1})
declare-ic=0#set integer属性
#读取IP并将其转换为二进制
IFS=。/阅读-r-p“IP 1:a1 a2 a3 a4#例如192.168.1.27
b1=“${D2B[$a1]}${D2B[$a2]}${D2B[$a3]}${D2B[$a4]}”
IFS=/读-r-p“IP 2:”a1 a2 a3 a4#例如192.168.1.129
b2=“${D2B[$a1]}${D2B[$a2]}${D2B[$a3]}${D2B[$a4]}”
#从左边找到两个IP中相同的位数($c),使用$c作为计数器

对于((i=0;i)您在这里到底想做什么?找到包含给定IP地址的最小网络?如果我有许多子网,请尝试对它们进行总结,(最常见的地址),那么是“是的,我是指包含所有给定IP地址的最小子网”还是“否,我是指其他内容”查看视频,展示我需要做的事情这是一场严肃的狂欢 192.168.1.0/24