netmask in a script

Dazed_75 lthielster at gmail.com
Thu Oct 27 16:51:27 MST 2011


Agreed!  Certainly more elegant than anything I might have done today.
Maybe back in the days when I made a living doing this stuff, but ...

Hmmm, I need to start saving some of these gems!

Thanks Dale.

On Thu, Oct 27, 2011 at 4:19 PM, Brian Cluff <brian at snaptek.com> wrote:

> I've never had a need to do any bit twiddling in bash... thanks for this
> solution,  It was very educational.
>
> Brian Cluff
>
>
> On 10/27/2011 11:43 AM, Dale Farnsworth wrote:
>
>> 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 - PLUG-discuss at lists.plug.**phoenix.az.us<PLUG-discuss at lists.plug.phoenix.az.us>
>> To subscribe, unsubscribe, or to change your mail settings:
>> http://lists.PLUG.phoenix.az.**us/mailman/listinfo/plug-**discuss<http://lists.PLUG.phoenix.az.us/mailman/listinfo/plug-discuss>
>>
>>
> ------------------------------**---------------------
> PLUG-discuss mailing list - PLUG-discuss at lists.plug.**phoenix.az.us<PLUG-discuss at lists.plug.phoenix.az.us>
> To subscribe, unsubscribe, or to change your mail settings:
> http://lists.PLUG.phoenix.az.**us/mailman/listinfo/plug-**discuss<http://lists.PLUG.phoenix.az.us/mailman/listinfo/plug-discuss>
>



-- 
Dazed_75 a.k.a. Larry

The spirit of resistance to government is so valuable on certain occasions,
that I wish it always to be kept alive.
  - Thomas Jefferson
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.PLUG.phoenix.az.us/pipermail/plug-discuss/attachments/20111027/2fe136ac/attachment.html>


More information about the PLUG-discuss mailing list