From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Message-ID: <3F91C974.4010803@yauza.ru> Date: Sun, 19 Oct 2003 03:15:00 +0400 From: "Pavel S. Khmelinsky" User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.4) Gecko/20030710 X-Accept-Language: ru, en-us, en MIME-Version: 1.0 To: community@altlinux.ru Subject: Re: [Comm] script for checking if ip address is from network/len References: <3F919740.6070803@yauza.ru> <3F91BD3C.6030606@pisem.net> In-Reply-To: <3F91BD3C.6030606@pisem.net> X-Enigmail-Version: 0.76.1.0 X-Enigmail-Supports: pgp-inline, pgp-mime Content-Type: text/plain; charset=KOI8-R; format=flowed Content-Transfer-Encoding: 8bit X-BeenThere: community@altlinux.ru X-Mailman-Version: 2.1.2 Precedence: list Reply-To: community@altlinux.ru List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 18 Oct 2003 23:15:00 -0000 X-List-Received-Date: Sat, 18 Oct 2003 23:15:00 -0000 Archived-At: List-Archive: List-Post: Borovoy M. wrote: > Pavel S. Khmelinsky пишет: > >> Может кто подскажет простой способ из скрипта узнать пренадлежит ли ip >> адресс сети заданной в виде network/len. Понятно что можно и самому >> написать, но такое скорее всего уже есть. Хорошо бы либо модуль под >> перл, либо программку консольную ;) > > > Посмотри man ipcalc, может поможет. > Например > $ ipcalc --network 192.168.123.1 255.255.224.0 > NETWORK=192.168.96.0 Ндя, чего-то я совсем забыл про это утилитку, спасибо большое что напомнили. Набросал не большую программку с ее использованием, если кому интересно: ---------------------------------------------------------------- #!/bin/bash ip=$1 net=`echo $2 | perl -ne'/(\S+)\/\S+/;print $1;'` len=`echo $2 | perl -ne'/\S+\/(\S+)/;print $1;'` if test `ipcalc -n $ip/$len | sed 's/NETWORK=//'` = $net ; then echo IS_IN fi ---------------------------------------------------------------- Вроде работает $ ./iptest 82.148.25.128 82.148.25.64/26 $ ./iptest 82.148.25.127 82.148.25.64/26 IS_IN $ ./iptest 82.148.25.64 82.148.25.64/26 IS_IN $ ./iptest 82.148.25.65 82.148.25.64/26 IS_IN $ ./iptest 82.148.25.255 82.148.25.64/26 Вот правда перловые regex я знаю много лучше того что в posix поэтому везде пользуюсь перлом что в данном случае не совсем оправданно, так что лучше наверное с использованием tr переписать, но мне чего-то лень в man 7 regex разбираться. Михаил, еще раз спасибо.