Re: netmask in a script

Top Page
Attachments:
Message as email
+ (text/plain)
Delete this message
Reply to this message
Author: Dale Farnsworth
Date:  
To: plug-discuss
CC: 
Subject: Re: netmask in a script
Larry wrote:
> I would like to apply a netmask to an arbitrary IP in a bash/dash script
> (e.g. apply 255.255.255.0 to 173.10.3.155 to get 173.10.3.0). Is there any
> easy way to do that without taking the IP apart, doing 4 operations and
> reassembling the results?


I know you said without disassembly/reassembly, but here are some
bash functions that apply the mask using disassembly/reassembly.

===================== begin =======================
to_int()
{
    # Convert from dotted-quad to integer
    local i=$1
    local OIFS="$IFS"
    IFS=.
    i=($i)
    IFS="$OIFS"
    echo $(((${i[0]} << 24) + (${i[1]} << 16) + (${i[2]} << 8) + ${i[3]}))
}


to_ip()
{
    # Covert from integer to dotted-quad
    local d=$1
    echo $(($d >> 24)).$(($d >> 16 & 255)).$(($d >> 8 & 255)).$(($d&255))
}


and_ip()
{
    # And two ip addresses in dotted-quad format
    local ip1=$1
    local ip2=$2
    echo $(to_ip $(($(to_int $ip1) & $(to_int $ip2))))
}
===================== end =======================


Just pass the ip and netmask to and_ip:
Example:

$ and_ip 11.22.33.44 255.255.255.0
11.22.33.0

-Dale
---------------------------------------------------
PLUG-discuss mailing list -
To subscribe, unsubscribe, or to change your mail settings:
http://lists.PLUG.phoenix.az.us/mailman/listinfo/plug-discuss