Add 'excel/network_ip_masks'

This commit is contained in:
daryl
2022-11-17 15:40:05 +10:30
parent e78af4a047
commit a1e88c0c40

114
excel/network_ip_masks Normal file
View File

@@ -0,0 +1,114 @@
A1 = IP address
B1 = CIDR netmask
ref https://gist.github.com/f-steff/d2ef30bed5328f0e417d635d3b46e256
Calculate netmask:
==================
=bin2dec(mid(REPT("1",B1)&rept("0",32-B1),1,8))&"."&
bin2dec(mid(REPT("1",B1)&rept("0",32-B1),9,8))&"."&
bin2dec(mid(REPT("1",B1)&rept("0",32-B1),17,8))&"."&
bin2dec(mid(REPT("1",B1)&rept("0",32-B1),25,8))
Calculate start of IP range:
============================
=BITAND(
(LEFT(A1, find(char(160),SUBSTITUTE(A1,".",CHAR(160),0))-1))
,
(bin2dec(mid(REPT("1",B1)&rept("0",32-B1),1,8)))
)
&"."&
BITAND(
(MID(A1, find(char(160),SUBSTITUTE(A1,".",CHAR(160),1))+1,find(char(160),SUBSTITUTE(A1,".",CHAR(160),2))-find(char(160),SUBSTITUTE(C1,".",CHAR(160),1))))
,
(bin2dec(mid(REPT("1",B1)&rept("0",32-B1),9,8)) )
)
&"."&
BITAND(
(MID(A1, find(char(160),SUBSTITUTE(A1,".",CHAR(160),2))+1,find(char(160),SUBSTITUTE(A1,".",CHAR(160),3))-find(char(160),SUBSTITUTE(A1,".",CHAR(160),2))))
,
(bin2dec(mid(REPT("1",B1)&rept("0",32-B1),17,8)))
)
&"."&
BITAND(
(MID(A1, find(char(160),SUBSTITUTE(A1,".",CHAR(160),3))+1,find(char(160),SUBSTITUTE(A1&".",".",CHAR(160),4))-find(char(160),SUBSTITUTE(A1,".",CHAR(160),3))-1))
,
bin2dec(mid(REPT("1",B1)&rept("0",32-B1),25,8))
)
Calculate end of IP range:
==========================
=BITOR(
(LEFT(A1, find(char(160),SUBSTITUTE(A1,".",CHAR(160),0))-1))
,
(255-bin2dec(mid(REPT("1",B1)&rept("0",32-B1),1,8)))
)
&"."&
BITOR(
(MID(A1, find(char(160),SUBSTITUTE(A1,".",CHAR(160),1))+1,find(char(160),SUBSTITUTE(A1,".",CHAR(160),2))-find(char(160),SUBSTITUTE(C1,".",CHAR(160),1))))
,
(255-bin2dec(mid(REPT("1",B1)&rept("0",32-B1),9,8)) )
)
&"."&
BITOR(
(MID(A1, find(char(160),SUBSTITUTE(A1,".",CHAR(160),2))+1,find(char(160),SUBSTITUTE(A1,".",CHAR(160),3))-find(char(160),SUBSTITUTE(A1,".",CHAR(160),2))))
,
(255-bin2dec(mid(REPT("1",B1)&rept("0",32-B1),17,8)))
)
&"."&
BITOR(
(MID(A1, find(char(160),SUBSTITUTE(A1,".",CHAR(160),3))+1,find(char(160),SUBSTITUTE(A1&".",".",CHAR(160),4))-find(char(160),SUBSTITUTE(A1,".",CHAR(160),3))))
,
(255-bin2dec(mid(REPT("1",B1)&rept("0",32-B1),25,8)))
)-1
Calculate Broadcast IP:
=======================
=BITOR(
(LEFT(A1, find(char(160),SUBSTITUTE(A1,".",CHAR(160),0))-1))
,
(255-bin2dec(mid(REPT("1",B1)&rept("0",32-B1),1,8)))
)
&"."&
BITOR(
(MID(A1, find(char(160),SUBSTITUTE(A1,".",CHAR(160),1))+1,find(char(160),SUBSTITUTE(A1,".",CHAR(160),2))-find(char(160),SUBSTITUTE(C1,".",CHAR(160),1))))
,
(255-bin2dec(mid(REPT("1",B1)&rept("0",32-B1),9,8)) )
)
&"."&
BITOR(
(MID(A1, find(char(160),SUBSTITUTE(A1,".",CHAR(160),2))+1,find(char(160),SUBSTITUTE(A1,".",CHAR(160),3))-find(char(160),SUBSTITUTE(A1,".",CHAR(160),2))))
,
(255-bin2dec(mid(REPT("1",B1)&rept("0",32-B1),17,8)))
)
&"."&
BITOR(
(MID(A1, find(char(160),SUBSTITUTE(A1,".",CHAR(160),3))+1,find(char(160),SUBSTITUTE(A1&".",".",CHAR(160),4))-find(char(160),SUBSTITUTE(A1,".",CHAR(160),3))))
,
(255-bin2dec(mid(REPT("1",B1)&rept("0",32-B1),25,8)))
)
Calculate number of hosts:
==========================
=2^(32-B1)-1
===================================================================================================================================
(Does not follow on from above columns.)
===================================================================================================================================
Convert traditional netmask in A1 to CIDR:
="/"&32-LEN(SUBSTITUTE(TEXT(DEA1BIN(MID(A1,1,FIND(".",A1)-1)),"00000000")&TEXT(DEA1BIN(MID(A1,1+FIND(".",A1),FIND(".",A1,FIND(".",A1)+1)-FIND(".",A1)-1)),"00000000")&TEXT(DEA1BIN(MID(A1,1+FIND(".",A1,FIND(".",A1)+1),FIND(".",A1,FIND(".",A1,FIND(".",A1)+1)+1)-FIND(".",A1,FIND(".",A1)+1)-1)),"00000000")&TEXT(DEA1BIN(RIGHT(A1,LEN(A1)-FIND(".",A1,FIND(".",A1,FIND(".",A1)+1)+1))),"00000000"),"1",""))
(ref https://www.reddit.com/r/excel/comments/9ivaal/simple_formula_ip_subnet_masks_to_cidr/)