Free IP Calculator

Alex Tweedly alex at tweedly.net
Fri Jan 9 16:21:57 EST 2015


Thanks Bob - that looks really useful.

You do need one tiny tweak - the CIDR calculations are slightly off, 
because of the "."s in  theBinSubnetMask.
I added the line
   replace "." with empty in theBinSubnetMask
just before
    put offset("0", theBinSubnetMask) into theFirstNodeChar

to get the right answer (e.g. 24 instead of 27 in   192.168.1.1 
255.255.255.0)

Thanks again
-- Alex.


On 09/01/2015 00:44, Bob Sneidar wrote:
> 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
>
>
> _______________________________________________
> use-livecode mailing list
> use-livecode at lists.runrev.com
> Please visit this url to subscribe, unsubscribe and manage your subscription preferences:
> http://lists.runrev.com/mailman/listinfo/use-livecode





More information about the use-livecode mailing list