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

Программирование на sh, быть может немного про альтернативные языки
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Djo
рядовой
Сообщения: 24
Зарегистрирован: 2007-08-10 12:10:26

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

Непрочитанное сообщение Djo » 2008-03-19 13:57:29

Как в shell можно реальзовать проверку по диапозону IP.
Дается Ip адрес 192.168.130.45 и если он оходит в сеть 192.168.128.0/20 то приписывает переменой значения а если не входит скрипт идет дальше.

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35411
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

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

Непрочитанное сообщение Alex Keda » 2008-03-19 14:25:36

http://www.lissyara.su/?id=1517
глянь - может он умеет возвращать разное значение в зависмости от результата.
или вывод парсить
Убей их всех! Бог потом рассортирует...

Djo
рядовой
Сообщения: 24
Зарегистрирован: 2007-08-10 12:10:26

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

Непрочитанное сообщение Djo » 2008-03-19 20:59:37

С ipcalc сомого начало пытался но не получатся. Слаб еше чтоб хорошо прогромировать на shell.
Вродебы он может сравнивать ип. Как написать проверку вида на shell:

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

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

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35411
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

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

Непрочитанное сообщение Alex Keda » 2008-03-19 21:17:15

дополнить все биты до трёх цифр, склеить и сравнить как цифры.
это навскидку
Убей их всех! Бог потом рассортирует...

Аватара пользователя
NoResponse
мл. сержант
Сообщения: 76
Зарегистрирован: 2007-07-30 1:39:02
Контактная информация:

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

Непрочитанное сообщение NoResponse » 2008-03-20 2:09:48

лис, я кодер со стажем... какие цифры.. какие быты ???... ты что курил ?.. поделись ))))
Я сам по себе скопище энтропии. А по законам термодинамики, если не принимать никаких действий энтропия стремится к бесконечности. Похоже, так оно и есть.

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35411
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

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

Непрочитанное сообщение Alex Keda » 2008-03-20 9:53:17

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
что уже можно сравнить как обычное десятичное число =)))
Убей их всех! Бог потом рассортирует...

Djo
рядовой
Сообщения: 24
Зарегистрирован: 2007-08-10 12:10:26

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

Непрочитанное сообщение Djo » 2008-03-24 9:30:20

А ка это сделать не поскажешь?

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35411
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

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

Непрочитанное сообщение Alex Keda » 2008-03-24 9:37:12

разобрать на октеты
проверить длинну октетов.
если короткие - дополнить слева нулями
собрать из октетов одну строку
Убей их всех! Бог потом рассортирует...

Djo
рядовой
Сообщения: 24
Зарегистрирован: 2007-08-10 12:10:26

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

Непрочитанное сообщение Djo » 2008-03-24 12:48:06

Сделал так:

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


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
Может кто сделает болиее красивой форме. Буду очень рад.

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

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

Непрочитанное сообщение zg » 2008-03-24 13:40:45

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
Последний раз редактировалось zg 2008-03-24 14:05:49, всего редактировалось 1 раз.

Аватара пользователя
NoResponse
мл. сержант
Сообщения: 76
Зарегистрирован: 2007-07-30 1:39:02
Контактная информация:

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

Непрочитанное сообщение NoResponse » 2008-03-24 14:04:17

кстати, а как лучше разбить на октеты... с регэксом у меня буда :(
Я сам по себе скопище энтропии. А по законам термодинамики, если не принимать никаких действий энтропия стремится к бесконечности. Похоже, так оно и есть.

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

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

Непрочитанное сообщение zg » 2008-03-24 14:11:52

awk -F.

Djo
рядовой
Сообщения: 24
Зарегистрирован: 2007-08-10 12:10:26

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

Непрочитанное сообщение Djo » 2008-03-24 14:37:30

zg писал(а): ....
спасибо большое. Очень хоршо работает.
Но у меня вопрос. Почему как написал я не работала по крону(не разберает ипи, нуливое значения возрашает), а твой вариант работает все прикрасно.

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

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

Непрочитанное сообщение zg » 2008-03-24 15:16:56

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 и всё заработает :)

Аватара пользователя
zingel
beastie
Сообщения: 6204
Зарегистрирован: 2007-10-30 3:56:49
Откуда: Moscow
Контактная информация:

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

Непрочитанное сообщение zingel » 2008-05-05 6:06:38

Попробуй вот такую штуку (на 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)
}
Z301171463546 - можно пожертвовать мне денег

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35411
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

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

Непрочитанное сообщение Alex Keda » 2008-05-05 22:58:20

странный у вас формат записи...
непонятно где год где месяц...
В данном случае - проблем не возникает, а вот через месяц - они будут...
Убей их всех! Бог потом рассортирует...

FREDAN
проходил мимо

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

Непрочитанное сообщение FREDAN » 2008-05-16 12:50:16

Можно так попробовать:)

#!/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