Форум Gatchina OnLine

Форум Gatchina OnLine (https://forumgol.ru/index.php)
-   Программирование и разработка (https://forumgol.ru/forumdisplay.php?f=4)
-   -   Скрипт на баше (https://forumgol.ru/showthread.php?t=11547)

VK 23.05.2011 01:49

Цитата:

Сообщение от ΛLIEN (Сообщение 416077)
Сомневаюсь, что без напильника это заработает под линухом, как раз из-за нестандартного вывода ifconfig.

в том-то и дело, что стандартов на это нет.
но дело даже не в этом, вряд ли это кому-то может понадобиться еще :) это плод больного воображения препода и только. к жизни отношения не имеющий.

TNT 24.05.2011 21:03

Цитата:

Сообщение от VK (Сообщение 416078)
это плод больного воображения препода и только. к жизни отношения не имеющий.

Именно так. Слабо понимаю, нахрен это надо.

FeD 24.05.2011 21:22

Цитата:

Сообщение от TNT (Сообщение 416170)
Слабо понимаю, нахрен это надо.

а зачем в школе на бэйсике пишут проги для решения квадратных уравнений? это тоже бред больного воображения? ведь можно ж в калькуляторе посчитать

TNT 24.05.2011 22:33

Плохой пример, это разные вещи.

TNT 25.05.2011 15:04

В общем, сделал все заново так (вдруг кому интересно):

Код:

#!/bin/bash
# Additional functions
# Decimal to binary
binary=0
decToBin(){
        binary=`echo $1 | gawk -F. '{OFMT = "%.10g"; print $1*2^24+$2*2^16+$3*2^8+$4}'`
}

#Binary to decimal
decimal=0.0.0.0
binToDec(){
        decimal=`echo $1 | gawk '{ 
                                  temp = $1;
                                  for (i = 1; i<=4; i++){
                                        IP[i] = temp%2^8;
                                        temp = int(temp/2^8);
                                  }
                                  print IP[4]"."IP[3]"."IP[2]"."IP[1] 
                                }'`
}

# Part A Getting list of subnets and their masks.
subnets=(` ifconfig -a | grep broadcast | gawk '{print $2}'`)
count=${#subnets[*]}

#Part B Updating ARP table
i=0

while [ $i -lt $count ]
do
        net=`netstat -rnv | gawk '$3 == "'${subnets[$i]}'" {print $1}' | grep -v  224 `
      mask=` netstat -rnv | gawk '$3 == "'${subnets[$i]}'" {print $2}' | grep -v 240`
        decToBin $net
        net=$binary;
        decToBin $mask
        mask=$binary;

        comp=1;       
        limit=`echo 2^32 - $mask - 1 | bc`;
       
        while [ $comp -lt $limit ]
        do
          ip=`echo $net + $comp | bc`;
          binToDec $ip;
          ping $decimal 1;
                if [ $? -eq 0 ]
                then
                  rsh $decimal df -l;
                fi
          let "comp+=1";

        done
        let "i+=1";
done

Пингует и, если пинг удачный, пытается сделать df.

VK 25.05.2011 21:05

что-то твое решение хреново совпадает с твоим же условием в первом посте :) и строчку с ifconfig ты переделал опять до того же некорректно работающего состояния :) sort там был не просто так.

TNT 25.05.2011 22:38

А почему с условием не совпадает? Вроде нормательно: обновляет ARP-таблицу, как только пинг прошел - берет информацию df -l.

Да, кстати, насчет сорта: я так и не врубил, зачем был он нужен... :)

VK 25.05.2011 22:40

"вывести... отвечающие на ARP-запросы". ping - это не arp-запрос, ответ на пинг может быть и не получен, а arp вполне.
sort нужен был для того, чтобы исключить дублирующиеся сети.

VK 25.05.2011 22:45

короче, вот это:
Цитата:

ping $decimal 1;
if [ $? -eq 0 ]
then
rsh $decimal df -l;
fi
надо переделать вот так:
arp $decimal >/dev/null && rsh $decimal df -l;

и все.

TNT 25.05.2011 22:50

Ну в принципе тоже верно.
А чем плоха проверка потока с ошибками? Просто не самый эффективный метод?


Текущее время: 10:05. Часовой пояс GMT +3.

Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2025, vBulletin Solutions, Inc. Перевод: zCarot