[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Subnet address
From: |
Dave Rutherford |
Subject: |
Re: Subnet address |
Date: |
Sat, 21 Jul 2007 10:39:25 -0400 |
On 7/21/07, Archimerged Ark Submedes <archimerged@gmail.com> wrote:
On 7/20/07, Mike Frysinger <vapier@gentoo.org> did not read the question.
Neither did you. ;-) Asked for was a solution using ifconfig and bash;
you added grep and tr. Yes, that's entirely reasonable on your part,
but it's not necessary.
The answer is:
/sbin/ifconfig eth0 |
grep 'inet addr' | tr .: ' ' |
(read inet addr a b c d Bcast e f g h Mask i j k l;
echo $(($a & $i)).$(($b & $j )).$(( $c & $k )).$(( $d & $l )) )
Here's an ugly way to do it:
NETADDR=`/sbin/ifconfig |
while read w d z z; do
if [ "$w" = "inet" ]; then
d=${d#addr:}; z=${z#Mask:};
a=${d%%.*}; w=${z%%.*}; d=${d#*.}; z=${z#*.};
b=${d%%.*}; x=${z%%.*}; d=${d#*.}; z=${z#*.};
c=${d%%.*}; y=${z%%.*}; d=${d#*.}; z=${z#*.};
echo $((a&w)).$((b&x)).$((c&y)).$((d&z));
break;
fi;
done`
And here's a better way, inspired by your use of 'tr':
NETADDR=`/sbin/ifconfig |
while read w x y y; do
if [ "$w" = "inet" ]; then
set -- ${x//./ }; a=${1#addr:}; b=$2; c=$3; d=$4;
set -- ${y//./ }; w=${1#Mask:}; x=$2; y=$3; z=$4;
echo $((a&w)).$((b&x)).$((c&y)).$((d&z));
break;
fi;
done`
Dave