Free IP Calculator

Bob Sneidar bobsneidar at iotecdigital.com
Thu Jan 8 19:44:13 EST 2015


Hi all. 

It’s not often I get a chance to give something back to the LC community, so here is my contribution. I put together an IP calculator function which when passed any IP address and subnet mask returns an array of pretty much every value you want to know about your network. It may also help others who don’t know about how subnets are calculated to understand it a bit better. I didn’t do any error checking, because frankly there are a lot of bad values you can pass, including for example passing 0 for the first octet of the ip address or subnet, or passing the broadcast address as the IP address etc. 

I will add error checking later. so without further ado, here you go!
function IPCalc theIPAddress, theSubnetMask
   set the itemdelimiter to "."
-- initial setup
   set the numberFormat to "00000000"
   
   -- convert the ip address to binary
   put 0 into whichOctet
   repeat for each item theOctet in theIPAddress
      add 1 to whichOctet
      put baseConvert(theOctet, 10, 2) into item whichOctet of theBinIPAddress
      add 0 to item whichOctet of theBinIPAddress
   end repeat
   
   -- convert the subnet mask to binary
   put 0 into whichOctet
   repeat for each item theOctet in theSubnetMask
      add 1 to whichOctet
      put baseConvert(theOctet, 10, 2) into item whichOctet of theBinSubnetMask
      add 0 to item whichOctet of theBinSubnetMask
   end repeat
   
   -- calculate the binary subnet address
   put offset("0", theBinSubnetMask) into theFirstNodeChar
   put theFirstNodeChar -1 into theCIDRDepth
   put char 1 to theFirstNodeChar -1 of theBinIPAddress into theBinNetworkAddr
   put char theFirstNodeChar to -1 of theBinIPAddress into theBinNodeAddr
   put theBinNodeAddr into theBinSubnetNodeAddr
   set the numberFormat to "0"
   replace "1" with "0" in theBinSubnetNodeAddr
   put theBinNetworkAddr & theBinSubnetNodeAddr into theBinSubnetAddr
   
   -- convert the binary subnet address to decimal
   put 0 into whichOctet
   repeat for each item theOctet in theBinSubnetAddr
      add 1 to whichOctet
      put baseconvert(theOctet, 2, 10) into item whichOctet of theSubnetAddr
   end repeat
   
   -- calculate the first usable IP address
   put theSubnetAddr into theFirstAddr
   add 1 to item 4 of theFirstAddr
   
   -- calculate the binary broadcast address
   put theBinNodeAddr into theBinBcastNodeAddr
   replace "0" with "1" in theBinBcastNodeAddr
   put theBinNetworkAddr & theBinBcastNodeAddr into theBinBcastAddr
   
   -- convert the binary broadcast address to decimal
   put 0 into whichOctet
   repeat for each item theOctet in theBinBcastAddr
      add 1 to whichOctet
      put baseConvert(theOctet, 2 ,10) into item WhichOctet of theBcastAddr
   end repeat
   
   -- calculate the last usable IP address
   put theBcastAddr into theLastAddr
   subtract 1 from item 4 of theLastAddr
   
   -- calculate the number of usable addresses
   put item 4 of theLastAddr - item 4 of theFirstAddr +1 into theAddrCount
   
   -- calculate the CIDR notation
   put theSubnetAddr & "/" & theCIDRDepth into theCIDRAddr
   
   -- create array
   put theIPAddress into ipdata ["ipaddress"]
   put theSubnetMask into ipdata ["subnetmask"]
   put theSubnetAddr into ipdata ["subnetaddr"]
   put theFirstAddr into ipdata ["firstaddr"]
   put theBcastAddr into ipdata["bcastaddr"]
   put theLastAddr into ipdata ["lastaddr"]
   put theCIDRAddr into ipdata ["cidrdepth"]
   put theAddrCount into ipdata ["usablecount"]
   put theCIDRAddr into ipdata ["cidraddr"]
   return ipdata
end IPCalc

Bob S




More information about the use-livecode mailing list