Страница 1 из 1

Проверка по IP диапозону.

Добавлено: 2008-03-19 13:57:29
Djo
Как в shell можно реальзовать проверку по диапозону IP.
Дается Ip адрес 192.168.130.45 и если он оходит в сеть 192.168.128.0/20 то приписывает переменой значения а если не входит скрипт идет дальше.

Re: Проверка по IP диапозону.

Добавлено: 2008-03-19 14:25:36
Alex Keda
http://www.lissyara.su/?id=1517
глянь - может он умеет возвращать разное значение в зависмости от результата.
или вывод парсить

Re: Проверка по IP диапозону.

Добавлено: 2008-03-19 20:59:37
Djo
С ipcalc сомого начало пытался но не получатся. Слаб еше чтоб хорошо прогромировать на shell.
Вродебы он может сравнивать ип. Как написать проверку вида на shell:

Код: Выделить всё

if 192.168.128.0 < 192.168.130.45 < 192.168.143.255
Может есть идее как можно в mysql это реализовать.

Re: Проверка по IP диапозону.

Добавлено: 2008-03-19 21:17:15
Alex Keda
дополнить все биты до трёх цифр, склеить и сравнить как цифры.
это навскидку

Re: Проверка по IP диапозону.

Добавлено: 2008-03-20 2:09:48
NoResponse
лис, я кодер со стажем... какие цифры.. какие быты ???... ты что курил ?.. поделись ))))

Re: Проверка по IP диапозону.

Добавлено: 2008-03-20 9:53:17
Alex Keda
if 192.168.128.0 < 192.168.130.45 < 192.168.143.255
первый адрес - цифр не хватает в последнем разряде адреса, второй адрес - там же, в третьем всё путём.
преобразуем сначала так:

Код: Выделить всё

if 192.168.128.000 < 192.168.130.045 < 192.168.143.255
потом так

Код: Выделить всё

if 192168128000 < 192168130045 < 192168143255
что уже можно сравнить как обычное десятичное число =)))

Re: Проверка по IP диапозону.

Добавлено: 2008-03-24 9:30:20
Djo
А ка это сделать не поскажешь?

Re: Проверка по IP диапозону.

Добавлено: 2008-03-24 9:37:12
Alex Keda
разобрать на октеты
проверить длинну октетов.
если короткие - дополнить слева нулями
собрать из октетов одну строку

Re: Проверка по IP диапозону.

Добавлено: 2008-03-24 12:48:06
Djo
Сделал так:

Код: Выделить всё


from_IP=`192.168.0.12` #Какой IP проверить

un=0

#Разбор IP
IP1=`echo "${from_IP}" |replace '.' ' '|awk '{print $1*256*256*256}'`
IP2=`echo "${from_IP}" |replace '.' ' '|awk '{print $2*256*256}'`
IP3=`echo "${from_IP}" |replace '.' ' '|awk '{print $3*256}'`
IP4=`echo "${from_IP}" |replace '.' ' '|awk '{print $4}'`
IP=`echo $((${IP4}+${IP3}+${IP2}+${IP1}))`

#Проверка IP
if [ 3232235520 -le ${IP} -a 3232235725 -ge ${IP} ] ; then
        un=1
fi
Может кто сделает болиее красивой форме. Буду очень рад.

Re: Проверка по IP диапозону.

Добавлено: 2008-03-24 13:40:45
zg
Djo писал(а):Может кто сделает болиее красивой форме. Буду очень рад.
в авк есть функци split

Код: Выделить всё

       split(s, a, fs)
              splits  the  string s into array elements a[1], a[2], ..., a[n],
              and returns n.  The separation is done with the regular  expres-
              sion  fs  or with the field separator FS if fs is not given.  An
              empty string as field separator splits the string into one array
              element per character.

Код: Выделить всё

#!/bin/sh
IP1=`echo $1 | awk '{split($1, a, "."); print a[1] *256*256*256 + a[2] *256*256 + a[3] *256 + a[4]}'`
echo $IP1
ну или можно ещё проще

Код: Выделить всё

#!/bin/sh
IP_FROM="192.168.0.1"      
IP1=`echo $IP_FROM | awk -F. '{print $1*256^3 + $2*256^2 + $3*256 + $4}'`
echo $IP1

Re: Проверка по IP диапозону.

Добавлено: 2008-03-24 14:04:17
NoResponse
кстати, а как лучше разбить на октеты... с регэксом у меня буда :(

Re: Проверка по IP диапозону.

Добавлено: 2008-03-24 14:11:52
zg
awk -F.

Re: Проверка по IP диапозону.

Добавлено: 2008-03-24 14:37:30
Djo
zg писал(а): ....
спасибо большое. Очень хоршо работает.
Но у меня вопрос. Почему как написал я не работала по крону(не разберает ипи, нуливое значения возрашает), а твой вариант работает все прикрасно.

Re: Проверка по IP диапозону.

Добавлено: 2008-03-24 15:16:56
zg
Djo писал(а):Почему как написал я не работала по крону(не разберает ипи, нуливое значения возрашает), а твой вариант работает все прикрасно.
потому, что переменная $PATH в кроне содержит не все пути, которые есть в консоли

Код: Выделить всё

zg# echo $PATH
/sbin:/bin:/usr/sbin:/usr/bin:/usr/games:/usr/local/sbin:/usr/local/bin:/usr/X11R6/bin:/root/bin
zg# grep PATH /etc/crontab 
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin
zg# 
пропиши в файл /etc/crontab пути в PATH и всё заработает :)

Re: Проверка по IP диапозону.

Добавлено: 2008-05-05 6:06:38
zingel
Попробуй вот такую штуку (на shell это - изврат):

Код: Выделить всё

#!/usr/bin/perl

##################################
#created by zingel 26/07/07 0:26 #
##################################


if(@ARGV<2){print "Usage: $0 <start IP> <port>\n";exit;}
else{
        use IO::Socket;
        $sIP="@ARGV[0]";
        $port="@ARGV[1]";
        ($ip1,$ip2,$ip3,$ip4)=split(/\./,$sIP);
        while($ip4<254){
                $ipaddr="$ip1.$ip2.$ip3.$ip4";
                IP_connect();
                $ip4++;
        }
}
sub IP_connect {
  $z=IO::Socket::INET->new(
  PeerAddr=>"$ipaddr",PeerPort=>"$port",Proto=>"tcp",Timeout=>"5")
  or warn "Cannot connect to $ipaddr\n";
    if($z){print "Connect! - $ipaddr:$port\n";}
  close($z)
}

Re: Проверка по IP диапозону.

Добавлено: 2008-05-05 22:58:20
Alex Keda
странный у вас формат записи...
непонятно где год где месяц...
В данном случае - проблем не возникает, а вот через месяц - они будут...

Re: Проверка по IP диапозону.

Добавлено: 2008-05-16 12:50:16
FREDAN
Можно так попробовать:)

#!/bin/sh -

#Например примем такие данные
Subnet=1.1.1.1
BroadCast=1.1.1.255
IP="1.1.1.200"

IsIpInSubnet() {
for a in 1 2 3 4
do
let Subnet$a=`echo $Subnet | cut -f$a -d'.'`
let BroadCast$a=`echo $BroadCast | cut -f$a -d'.'`
let IP$a=`echo $IP | cut -f$a -d'.'`
done
#echo $IP1, $IP2, $IP3, $IP4
#echo $Subnet1, $Subnet2, $Subnet3, $Subnet4
#echo $BroadCast1, $BroadCast2, $BroadCast3, $BroadCast4

if [[ IP1 -ge Subnet1 &&
IP2 -ge Subnet2 &&
IP3 -ge Subnet3 &&
IP4 -ge Subnet4 &&
IP1 -le BroadCast1 &&
IP2 -le BroadCast2 &&
IP3 -le BroadCast3 &&
IP4 -le BroadCast4 ]] ; then
return 0
else
return 1
fi
}

#Пример использования
IsIpInSubnet
if [ $? -eq 0 ] ; then
echo IP-address $IP in subnet $Subnet!!!!!!! with broadcast $BroadCast
else
echo IP-address $IP is not in subnet $Subnet!!!!!!! with broadcast $BroadCast
fi

Re: Проверка по IP диапозону.

Добавлено: 2008-05-17 9:48:44
FREDAN
Subnet конечно 1.1.1.0 который в примере