08-19-2013
Breaking out ip subnet to smaller subnets
I have a script and it works fine, but I am sure this can be shrunk down to something much better. I would appreciate someone taking a crack at it for me.
What it does is take the ip block submitted and breaks it out down to /24's.
Code :
#!/bin/ksh
ipadd=${1}
octet1=`echo $ipadd | nawk -F. '{print $1}'`
octet2=`echo $ipadd | nawk -F. '{print $2}'`
octet3=`echo $ipadd | nawk -F. '{print $3}'`
subnet=`echo $ipadd | nawk -F/ '{print $2}'`
octet3_1=`echo "$octet3"+1 | bc`
octet3_2=`echo "$octet3"+2 | bc`
octet3_3=`echo "$octet3"+3 | bc`
octet3_4=`echo "$octet3"+4 | bc`
octet3_5=`echo "$octet3"+5 | bc`
octet3_6=`echo "$octet3"+6 | bc`
octet3_7=`echo "$octet3"+7 | bc`
octet3_8=`echo "$octet3"+8 | bc`
octet3_9=`echo "$octet3"+9 | bc`
octet3_10=`echo "$octet3"+10 | bc`
octet3_11=`echo "$octet3"+11 | bc`
octet3_12=`echo "$octet3"+12 | bc`
octet3_13=`echo "$octet3"+13 | bc`
octet3_14=`echo "$octet3"+14 | bc`
octet3_15=`echo "$octet3"+15 | bc`
octet3_16=`echo "$octet3"+16 | bc`
octet3_17=`echo "$octet3"+17 | bc`
octet3_18=`echo "$octet3"+18 | bc`
octet3_19=`echo "$octet3"+19 | bc`
octet3_20=`echo "$octet3"+20 | bc`
octet3_21=`echo "$octet3"+21 | bc`
octet3_22=`echo "$octet3"+22 | bc`
octet3_23=`echo "$octet3"+23 | bc`
octet3_24=`echo "$octet3"+24 | bc`
octet3_25=`echo "$octet3"+25 | bc`
octet3_26=`echo "$octet3"+26 | bc`
octet3_27=`echo "$octet3"+27 | bc`
octet3_28=`echo "$octet3"+28 | bc`
octet3_29=`echo "$octet3"+29 | bc`
octet3_30=`echo "$octet3"+30 | bc`
octet3_31=`echo "$octet3"+31 | bc`
octet3_32=`echo "$octet3"+32 | bc`
octet3_33=`echo "$octet3"+33 | bc`
octet3_34=`echo "$octet3"+34 | bc`
octet3_35=`echo "$octet3"+35 | bc`
octet3_36=`echo "$octet3"+36 | bc`
octet3_37=`echo "$octet3"+37 | bc`
octet3_38=`echo "$octet3"+38 | bc`
octet3_39=`echo "$octet3"+39 | bc`
octet3_40=`echo "$octet3"+40 | bc`
octet3_41=`echo "$octet3"+41 | bc`
octet3_42=`echo "$octet3"+42 | bc`
octet3_43=`echo "$octet3"+43 | bc`
octet3_44=`echo "$octet3"+44 | bc`
octet3_45=`echo "$octet3"+45 | bc`
octet3_46=`echo "$octet3"+46 | bc`
octet3_47=`echo "$octet3"+47 | bc`
octet3_48=`echo "$octet3"+48 | bc`
octet3_49=`echo "$octet3"+49 | bc`
octet3_50=`echo "$octet3"+50 | bc`
octet3_51=`echo "$octet3"+51 | bc`
octet3_52=`echo "$octet3"+52 | bc`
octet3_53=`echo "$octet3"+53 | bc`
octet3_54=`echo "$octet3"+54 | bc`
octet3_55=`echo "$octet3"+55 | bc`
octet3_56=`echo "$octet3"+56 | bc`
octet3_57=`echo "$octet3"+57 | bc`
octet3_58=`echo "$octet3"+58 | bc`
octet3_59=`echo "$octet3"+59 | bc`
octet3_60=`echo "$octet3"+60 | bc`
octet3_61=`echo "$octet3"+61 | bc`
octet3_62=`echo "$octet3"+62 | bc`
octet3_63=`echo "$octet3"+63 | bc`
if [[ $subnet -eq 24 ]]; then
echo $octet1"."$octet2"."$octet3".0/24"
fi
if [[ $subnet -eq 23 ]]; then
echo $octet1"."$octet2"."$octet3".0/23"
echo $octet1"."$octet2"."$octet3".0/24"
echo $octet1"."$octet2"."$octet3_1".0/24"
fi
if [[ $subnet -eq 22 ]]; then
echo $octet1"."$octet2"."$octet3".0/22"
echo $octet1"."$octet2"."$octet3".0/23"
echo $octet1"."$octet2"."$octet3_2".0/23"
echo $octet1"."$octet2"."$octet3".0/24"
echo $octet1"."$octet2"."$octet3_1".0/24"
echo $octet1"."$octet2"."$octet3_2".0/24"
echo $octet1"."$octet2"."$octet3_3".0/24"
fi
if [[ $subnet -eq 21 ]]; then
echo $octet1"."$octet2"."$octet3".0/21"
echo $octet1"."$octet2"."$octet3".0/22"
echo $octet1"."$octet2"."$octet3_4".0/22"
echo $octet1"."$octet2"."$octet3".0/23"
echo $octet1"."$octet2"."$octet3_2".0/23"
echo $octet1"."$octet2"."$octet3_4".0/23"
echo $octet1"."$octet2"."$octet3_6".0/23"
echo $octet1"."$octet2"."$octet3".0/24"
echo $octet1"."$octet2"."$octet3_1".0/24"
echo $octet1"."$octet2"."$octet3_2".0/24"
echo $octet1"."$octet2"."$octet3_3".0/24"
echo $octet1"."$octet2"."$octet3_4".0/24"
echo $octet1"."$octet2"."$octet3_5".0/24"
echo $octet1"."$octet2"."$octet3_6".0/24"
echo $octet1"."$octet2"."$octet3_7".0/24"
fi
if [[ $subnet -eq 20 ]]; then
echo $octet1"."$octet2"."$octet3".0/20"
echo $octet1"."$octet2"."$octet3".0/21"
echo $octet1"."$octet2"."$octet3_8".0/21"
echo $octet1"."$octet2"."$octet3".0/22"
echo $octet1"."$octet2"."$octet3_4".0/22"
echo $octet1"."$octet2"."$octet3_8".0/22"
echo $octet1"."$octet2"."$octet3_12".0/22"
echo $octet1"."$octet2"."$octet3".0/23"
echo $octet1"."$octet2"."$octet3_2".0/23"
echo $octet1"."$octet2"."$octet3_4".0/23"
echo $octet1"."$octet2"."$octet3_6".0/23"
echo $octet1"."$octet2"."$octet3_8".0/23"
echo $octet1"."$octet2"."$octet3_10".0/23"
echo $octet1"."$octet2"."$octet3_12".0/23"
echo $octet1"."$octet2"."$octet3".0/24"
echo $octet1"."$octet2"."$octet3_1".0/24"
echo $octet1"."$octet2"."$octet3_2".0/24"
echo $octet1"."$octet2"."$octet3_3".0/24"
echo $octet1"."$octet2"."$octet3_4".0/24"
echo $octet1"."$octet2"."$octet3_5".0/24"
echo $octet1"."$octet2"."$octet3_6".0/24"
echo $octet1"."$octet2"."$octet3_7".0/24"
echo $octet1"."$octet2"."$octet3_8".0/24"
echo $octet1"."$octet2"."$octet3_9".0/24"
echo $octet1"."$octet2"."$octet3_10".0/24"
echo $octet1"."$octet2"."$octet3_11".0/24"
echo $octet1"."$octet2"."$octet3_12".0/24"
echo $octet1"."$octet2"."$octet3_13".0/24"
echo $octet1"."$octet2"."$octet3_14".0/24"
echo $octet1"."$octet2"."$octet3_15".0/24"
fi
if [[ $subnet -eq 19 ]]; then
echo $octet1"."$octet2"."$octet3"."$octet"/19"
echo $octet1"."$octet2"."$octet3"."$octet"/20"
echo $octet1"."$octet2"."$octet3"."$octet16"/20"
echo $octet1"."$octet2"."$octet3".0/21"
echo $octet1"."$octet2"."$octet3_8".0/21"
echo $octet1"."$octet2"."$octet3_16".0/21"
echo $octet1"."$octet2"."$octet3_24".0/21"
echo $octet1"."$octet2"."$octet3".0/22"
echo $octet1"."$octet2"."$octet3_4".0/22"
echo $octet1"."$octet2"."$octet3_8".0/22"
echo $octet1"."$octet2"."$octet3_12".0/22"
echo $octet1"."$octet2"."$octet3_16".0/22"
echo $octet1"."$octet2"."$octet3_20".0/22"
echo $octet1"."$octet2"."$octet3_24".0/22"
echo $octet1"."$octet2"."$octet3_28".0/22"
echo $octet1"."$octet2"."$octet3".0/23"
echo $octet1"."$octet2"."$octet3_2".0/23"
echo $octet1"."$octet2"."$octet3_4".0/23"
echo $octet1"."$octet2"."$octet3_6".0/23"
echo $octet1"."$octet2"."$octet3_8".0/23"
echo $octet1"."$octet2"."$octet3_10".0/23"
echo $octet1"."$octet2"."$octet3_12".0/23"
echo $octet1"."$octet2"."$octet3_14".0/23"
echo $octet1"."$octet2"."$octet3_16".0/23"
echo $octet1"."$octet2"."$octet3_18".0/23"
echo $octet1"."$octet2"."$octet3_20".0/23"
echo $octet1"."$octet2"."$octet3_22".0/23"
echo $octet1"."$octet2"."$octet3_24".0/23"
echo $octet1"."$octet2"."$octet3_26".0/23"
echo $octet1"."$octet2"."$octet3_28".0/23"
echo $octet1"."$octet2"."$octet3_30".0/23"
echo $octet1"."$octet2"."$octet3".0/24"
echo $octet1"."$octet2"."$octet3_1".0/24"
echo $octet1"."$octet2"."$octet3_2".0/24"
echo $octet1"."$octet2"."$octet3_3".0/24"
echo $octet1"."$octet2"."$octet3_4".0/24"
echo $octet1"."$octet2"."$octet3_5".0/24"
echo $octet1"."$octet2"."$octet3_6".0/24"
echo $octet1"."$octet2"."$octet3_7".0/24"
echo $octet1"."$octet2"."$octet3_8".0/24"
echo $octet1"."$octet2"."$octet3_9".0/24"
echo $octet1"."$octet2"."$octet3_10".0/24"
echo $octet1"."$octet2"."$octet3_11".0/24"
echo $octet1"."$octet2"."$octet3_12".0/24"
echo $octet1"."$octet2"."$octet3_13".0/24"
echo $octet1"."$octet2"."$octet3_14".0/24"
echo $octet1"."$octet2"."$octet3_15".0/24"
echo $octet1"."$octet2"."$octet3_16".0/24"
echo $octet1"."$octet2"."$octet3_17".0/24"
echo $octet1"."$octet2"."$octet3_18".0/24"
echo $octet1"."$octet2"."$octet3_19".0/24"
echo $octet1"."$octet2"."$octet3_20".0/24"
echo $octet1"."$octet2"."$octet3_21".0/24"
echo $octet1"."$octet2"."$octet3_22".0/24"
echo $octet1"."$octet2"."$octet3_23".0/24"
echo $octet1"."$octet2"."$octet3_24".0/24"
echo $octet1"."$octet2"."$octet3_25".0/24"
echo $octet1"."$octet2"."$octet3_26".0/24"
echo $octet1"."$octet2"."$octet3_27".0/24"
echo $octet1"."$octet2"."$octet3_28".0/24"
echo $octet1"."$octet2"."$octet3_29".0/24"
echo $octet1"."$octet2"."$octet3_30".0/24"
echo $octet1"."$octet2"."$octet3_31".0/24"
fi
if [[ $subnet -eq 18 ]]; then
echo $octet1"."$octet2"."$octet3".0/18"
echo $octet1"."$octet2"."$octet3".0/19"
echo $octet1"."$octet2"."$octet3_32".0/19"
echo $octet1"."$octet2"."$octet3".0/20"
echo $octet1"."$octet2"."$octet3_16".0/20"
echo $octet1"."$octet2"."$octet3_32".0/20"
echo $octet1"."$octet2"."$octet3_48".0/20"
echo $octet1"."$octet2"."$octet3".0/21"
echo $octet1"."$octet2"."$octet3_8".0/21"
echo $octet1"."$octet2"."$octet3_16".0/21"
echo $octet1"."$octet2"."$octet3_24".0/21"
echo $octet1"."$octet2"."$octet3_32".0/21"
echo $octet1"."$octet2"."$octet3_40".0/21"
echo $octet1"."$octet2"."$octet3_48".0/21"
echo $octet1"."$octet2"."$octet3_56".0/21"
echo $octet1"."$octet2"."$octet3".0/22"
echo $octet1"."$octet2"."$octet3_4".0/22"
echo $octet1"."$octet2"."$octet3_8".0/22"
echo $octet1"."$octet2"."$octet3_12".0/22"
echo $octet1"."$octet2"."$octet3_16".0/22"
echo $octet1"."$octet2"."$octet3_20".0/22"
echo $octet1"."$octet2"."$octet3_24".0/22"
echo $octet1"."$octet2"."$octet3_28".0/22"
echo $octet1"."$octet2"."$octet3_32".0/22"
echo $octet1"."$octet2"."$octet3_36".0/22"
echo $octet1"."$octet2"."$octet3_40".0/22"
echo $octet1"."$octet2"."$octet3_44".0/22"
echo $octet1"."$octet2"."$octet3_48".0/22"
echo $octet1"."$octet2"."$octet3_52".0/22"
echo $octet1"."$octet2"."$octet3_56".0/22"
echo $octet1"."$octet2"."$octet3_60".0/22"
echo $octet1"."$octet2"."$octet3".0/23"
echo $octet1"."$octet2"."$octet3_2".0/23"
echo $octet1"."$octet2"."$octet3_4".0/23"
echo $octet1"."$octet2"."$octet3_6".0/23"
echo $octet1"."$octet2"."$octet3_8".0/23"
echo $octet1"."$octet2"."$octet3_10".0/23"
echo $octet1"."$octet2"."$octet3_12".0/23"
echo $octet1"."$octet2"."$octet3_14".0/23"
echo $octet1"."$octet2"."$octet3_16".0/23"
echo $octet1"."$octet2"."$octet3_18".0/23"
echo $octet1"."$octet2"."$octet3_20".0/23"
echo $octet1"."$octet2"."$octet3_22".0/23"
echo $octet1"."$octet2"."$octet3_24".0/23"
echo $octet1"."$octet2"."$octet3_26".0/23"
echo $octet1"."$octet2"."$octet3_28".0/23"
echo $octet1"."$octet2"."$octet3_30".0/23"
echo $octet1"."$octet2"."$octet3_32".0/23"
echo $octet1"."$octet2"."$octet3_34".0/23"
echo $octet1"."$octet2"."$octet3_36".0/23"
echo $octet1"."$octet2"."$octet3_38".0/23"
echo $octet1"."$octet2"."$octet3_40".0/23"
echo $octet1"."$octet2"."$octet3_42".0/23"
echo $octet1"."$octet2"."$octet3_44".0/23"
echo $octet1"."$octet2"."$octet3_46".0/23"
echo $octet1"."$octet2"."$octet3_48".0/23"
echo $octet1"."$octet2"."$octet3_50".0/23"
echo $octet1"."$octet2"."$octet3_52".0/23"
echo $octet1"."$octet2"."$octet3_54".0/23"
echo $octet1"."$octet2"."$octet3_56".0/23"
echo $octet1"."$octet2"."$octet3_58".0/23"
echo $octet1"."$octet2"."$octet3_60".0/23"
echo $octet1"."$octet2"."$octet3_62".0/23"
echo $octet1"."$octet2"."$octet3".0/24"
echo $octet1"."$octet2"."$octet3_1".0/24"
echo $octet1"."$octet2"."$octet3_2".0/24"
echo $octet1"."$octet2"."$octet3_3".0/24"
echo $octet1"."$octet2"."$octet3_4".0/24"
echo $octet1"."$octet2"."$octet3_5".0/24"
echo $octet1"."$octet2"."$octet3_6".0/24"
echo $octet1"."$octet2"."$octet3_7".0/24"
echo $octet1"."$octet2"."$octet3_8".0/24"
echo $octet1"."$octet2"."$octet3_9".0/24"
echo $octet1"."$octet2"."$octet3_10".0/24"
echo $octet1"."$octet2"."$octet3_11".0/24"
echo $octet1"."$octet2"."$octet3_12".0/24"
echo $octet1"."$octet2"."$octet3_13".0/24"
echo $octet1"."$octet2"."$octet3_14".0/24"
echo $octet1"."$octet2"."$octet3_15".0/24"
echo $octet1"."$octet2"."$octet3_16".0/24"
echo $octet1"."$octet2"."$octet3_17".0/24"
echo $octet1"."$octet2"."$octet3_18".0/24"
echo $octet1"."$octet2"."$octet3_19".0/24"
echo $octet1"."$octet2"."$octet3_20".0/24"
echo $octet1"."$octet2"."$octet3_21".0/24"
echo $octet1"."$octet2"."$octet3_22".0/24"
echo $octet1"."$octet2"."$octet3_23".0/24"
echo $octet1"."$octet2"."$octet3_24".0/24"
echo $octet1"."$octet2"."$octet3_25".0/24"
echo $octet1"."$octet2"."$octet3_26".0/24"
echo $octet1"."$octet2"."$octet3_27".0/24"
echo $octet1"."$octet2"."$octet3_28".0/24"
echo $octet1"."$octet2"."$octet3_29".0/24"
echo $octet1"."$octet2"."$octet3_30".0/24"
echo $octet1"."$octet2"."$octet3_31".0/24"
echo $octet1"."$octet2"."$octet3_32".0/24"
echo $octet1"."$octet2"."$octet3_33".0/24"
echo $octet1"."$octet2"."$octet3_34".0/24"
echo $octet1"."$octet2"."$octet3_35".0/24"
echo $octet1"."$octet2"."$octet3_36".0/24"
echo $octet1"."$octet2"."$octet3_37".0/24"
echo $octet1"."$octet2"."$octet3_38".0/24"
echo $octet1"."$octet2"."$octet3_39".0/24"
echo $octet1"."$octet2"."$octet3_40".0/24"
echo $octet1"."$octet2"."$octet3_41".0/24"
echo $octet1"."$octet2"."$octet3_42".0/24"
echo $octet1"."$octet2"."$octet3_43".0/24"
echo $octet1"."$octet2"."$octet3_44".0/24"
echo $octet1"."$octet2"."$octet3_45".0/24"
echo $octet1"."$octet2"."$octet3_46".0/24"
echo $octet1"."$octet2"."$octet3_47".0/24"
echo $octet1"."$octet2"."$octet3_48".0/24"
echo $octet1"."$octet2"."$octet3_49".0/24"
echo $octet1"."$octet2"."$octet3_50".0/24"
echo $octet1"."$octet2"."$octet3_51".0/24"
echo $octet1"."$octet2"."$octet3_52".0/24"
echo $octet1"."$octet2"."$octet3_53".0/24"
echo $octet1"."$octet2"."$octet3_54".0/24"
echo $octet1"."$octet2"."$octet3_55".0/24"
echo $octet1"."$octet2"."$octet3_56".0/24"
echo $octet1"."$octet2"."$octet3_57".0/24"
echo $octet1"."$octet2"."$octet3_58".0/24"
echo $octet1"."$octet2"."$octet3_59".0/24"
echo $octet1"."$octet2"."$octet3_60".0/24"
echo $octet1"."$octet2"."$octet3_61".0/24"
echo $octet1"."$octet2"."$octet3_62".0/24"
echo $octet1"."$octet2"."$octet3_63".0/24"
fi
Here is an example run where a /22 is broken down into /23's and /24's.
Code :
./test.sh 192.168.1.0/22
192.168.1.0/22
192.168.1.0/23
192.168.3.0/23
192.168.1.0/24
192.168.2.0/24
192.168.3.0/24
192.168.4.0/24
9 More Discussions You Might Find Interesting
1. UNIX for Advanced & Expert Users
We have two Sun Sparc systems running on the xxx.xxx.1.xxx network and can be access fine by machines on that subnet. We are able the ping one of the machines from the xxx.xxx.2.xxx network, but we are not able to ping or communicate with the other machine on the (1) subnet from the (2) subnet.
... (8 Replies)
Discussion started by: pyerj
8 Replies
2. AIX
All,
I have a pSeries 550 and several Xerox printers I need to print to from there. I can define the printers via the Xerox "xpadmin" utility for all the machines locally (in my building, .244.xxx subnet), but if I go to a different subnet (say .131.xxx) I can not apply any changes.
I can... (1 Reply)
Discussion started by: kjbaumann
1 Replies
3. IP Networking
I have a routing problem that I need to solve for both Windows and Linux.
In our test lab, I've set up a small network that is separated from the rest of the work by a firewall. One interface is on the 15.8.152 network, the other is on the 192.168.100 network.
I can already get to the... (2 Replies)
Discussion started by: thomn8r
2 Replies
4. Solaris
I have two networks which is not connected to each other. Each network has its own internet connection. I also have one Solaris machine with two NICs connected to both of the networks.
How do I use the Solaris to connect both network so that hosts from either side of the network can... (9 Replies)
Discussion started by: Ahmad Pakhri
9 Replies
5. IP Networking
Hi,
My project needs to migrate the existing Subnet (255.255.255.0) to a new subnet and change the ipaddresses (currently C class). How can I do that. I need some information.
John (0 Replies)
Discussion started by: johnmarsh
0 Replies
6. UNIX for Advanced & Expert Users
Greetings,
Having an issue with a multihomed global zone hosting zones on different subnets.
The issue is with the dev zone that is hosted on the non-default network.
Any help, other than going to exclusive IP, as I have one card for admin ntwk for both zones, would be appreciated.
... (1 Reply)
Discussion started by: 22blaze
1 Replies
7. IP Networking
Hi guys
I started to work in a small company which doesn't have infrastructure and I need to built it.
My problem is: I am a student with theoretical knowledge but without practical one so I don't have any ideas how to solve my problem.
I installed on CentOS 6.4 DNS and DHCP. This... (1 Reply)
Discussion started by: solaris_user
1 Replies
8. Shell Programming and Scripting
Bash script to subdivide a given subnet into a pre-defined number of smaller subnets. Show network/broadcast address, number of hosts and assign gateway.
For example:
Input:
./subnetter.sh 192.168.0.0/24 3 Output:
192.168.0.0/128 subnet 192.168.0.0 broadcast 192.168.0.127 gateway... (1 Reply)
Discussion started by: mail2rias
1 Replies
9. Shell Programming and Scripting
Bash script to subdivide a given subnet into a pre-defined number of smaller subnets. Show network/broadcast address, number of hosts and assign gateway.
For example:
Input:
./subnetter.sh 192.168.0.0/24 3 Output:
192.168.0.0/128 subnet 192.168.0.0 broadcast 192.168.0.127 gateway... (1 Reply)
Discussion started by: mail2rias
1 Replies