[Bash] Skrypt do massping.

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
knr
Piegowaty Guziec
Piegowaty Guziec
Posty: 4
Rejestracja: 29 mar 2005, 13:18
Płeć: Mężczyzna
Wersja Ubuntu: 7.10
Środowisko graficzne: GNOME
Kontakt:

[Bash] Skrypt do massping.

Post autor: knr »

Witam!
Moje pytanie nie dotyczy rozwiązania konkretnego problemu, proszę was raczej (jako dużo bardziej doświadczonych) o podpowiedzenie narzędzi jakim powinienem się posłużyć przy rozwiązaniu zagadnienia.
Dodam jeszcze że moje doświadczenie to kilkadziesiąt średnio zaawansowanych (:]) skryptów w bashu i nic więcej :(
Teraz co chce uzyskać. Jest to w zasadzie pretekst by rozpocząć naukę jakiegoś "pisania", ale także ostatnie narzędzie potrzebne by porzucić ostatniego windowsa :]
Mam kilkadziesiąt (około 50) "celów", czyli adresów ip, które muszę na bieżąco obserwować. Mam jakieś narządko (http://www.advtoolware.com/images/t4e/f ... olumn1.gif) które jest odpalone na ekranie obok i pokazuje mi śmiesznymi ikonkami czy ping do danego adresu jest czy nie.
Chciałbym to samo mieć na linuxie (bądź coś podobnego) i chce to stworzyć sam. Ruszyłem z bashem (tylko to w jakimiś tam stopniu znam) ale szybko temat upadł. Na początek powstało cosik takiego:

Kod: Zaznacz cały

#!/bin/bash
plik=adresy.txt
lini=`wc -l $plik |awk '{print $1}'`
for((linia=1;linia<$lini+1;linia++))
do
adres=`sed -n "$linia"p $plik |awk '{print $1}'`
opis=`sed -n "$linia"p $plik |awk '{print $2,$3,$4,$5}'`
ping -c 1 $adres > /dev/null
done
if [ $? != 1 ]; then
        clear
        echo -e "\e[00;32mOK\e[00m" $'\t' "$opis";
else
        clear
        echo -e "\e[00;33mLOOK\e[00m" $'\t' "$opis";
        sleep 10
        ping -c 1 $adres > /dev/null
        if [ $? != 1 ]; then
                clear
                echo -e "\e[00;32mOK\e[00m" $'\t' "$opis";
        else
                clear
                echo -e "\e[00;31mERROR\e[00m" $'\t' "$opis";
        fi
fi
Obok pliczek tekstowy adresy.txt a w nim linijka pod linijką ip i nazwa.
Wszystko spoko ale:
1)widzę na ekranie tylko status jednego połączenia na raz;
2)po sprawdzeniu skrypt się po prostu kończy - nie mam ciągłości;
3)nie da się (lub nie wiem jak :]) dodać kilka formularzy np pod F1,F2,... w których można by dodawać nowe hosty, ich ip, opis i czasy między wysłaniem icmp.
...
Teraz, tak jak punkt 3 wydaje mi się być może w bashu do przejścia tak pierwsze dwa chyba nie (przynajmniej tak wynika z przeszukania google).

Teraz meritum. Czy ten projekt jest do zrobienia w bashu, jeśli natomiast nie (a tak podejrzewam) to jakie narzędzie polecacie mi abym postudiował a które umożliwi mi zrobienie takiego "softu". Dodam że jestem świadomy że moge to zrobić w C czy Asemblerze ale nie chciałbym z basha przechodzić od razu w taką masakrę :]
Zastanawiam się nad perlem, nie znam jednak tego języka i nie wiem jakie są jego możliwości.

Pozdrawiam serdecznie.
Hate It Or Love It (!!!)
Awatar użytkownika
leon1313
Zakręcona Traszka
Zakręcona Traszka
Posty: 668
Rejestracja: 02 sty 2006, 19:35
Płeć: Mężczyzna
Wersja Ubuntu: 10.10
Środowisko graficzne: KDE Plasma
Architektura: x86

Odp: Najlepsze narzędzie do napisania massping.

Post autor: leon1313 »

Zainstaluj sobie na Ubuntu narzędzie Nagios. W razie problemów mozesz śmiało pisać, powiem ci co i jak po kolei od podstaw trzeba zainstalować, aby zadziałało i jak to później skonfigurować. //Dla bardzej ambitnych polecam ZABBIX-a, ale tu już wchodzi w rachubę rozwiązanie serwer-agent, ale mozliwości o niebo lepsze.//
"Poza tym dostałeś PLONKa i zabraniam Ci pisać na te grupe!!! Powiedziałem PLONK i sie zamknij i nawet nie knuj rzeby mi odpisywać! Zabraniam!!!"
[r4]
Przebojowy Jelonek
Przebojowy Jelonek
Posty: 1048
Rejestracja: 08 maja 2007, 07:40
Wersja Ubuntu: 12.10
Środowisko graficzne: Xfce
Architektura: x86

Odp: Najlepsze narzędzie do napisania massping.

Post autor: [r4] »

Ponizej wklejam Ci skrypt, z jakiego korzystamy w pracy (napisany napredce przy kolejnym zerwanym polaczaniu :P), moze Ci cos podpowie.

Kod: Zaznacz cały

#!/bin/bash
ip[1]=172.17.29.1
ip[2]=192.168.129.129
ip[3]=10.100.10.12
ip[4]=172.17.63.129
ip[5]=172.17.192.131
ip[6]=172.17.192.129
ip[7]=172.17.192.4
ip[8]=153.88.11.51
ip[9]=192.168.240.166
ip[10]=150.132.18.129
ip[11]=150.132.35.41

good="."
warning="_"
critical="x"

clear
echo "Legend:"
echo "$good - all good"
echo "$warning - warning; long ping response time (>1000 ms)"
echo "$critical - critical; could not resolve host in 5000 ms"

while true; do

  #echo -n $(date | gawk '{print $4}') ' ';
  echo -ne '\n' $(date +%T) ' ';

  for i in 1 2 3 4 5; do
    sekund1=$(date +%s)

    for index in 1 2 3 4 5 6 7 8 9 10 11; do
        czas=$(date +%s)
        ping -c 1 -w 5 ${ip[index]} > /dev/null;
        result=$?;
        czas2=$(date +%s)
        czas=$((czas2-czas))

        if [[ $result -ne 0 ]]; then echo -n "$critical";
        elif [[ $czas -lt 1 ]]; then
            echo -n "$good";
        else echo -n "$warning";
        fi;

    done

  sekund2=$(date +%s)
  sekund=$((sekund2-sekund1))
  sekund=$((30-sekund))

  if [[ i -lt 5 ]]; then
    echo -n '  '
  fi

  if [[ $sekund -gt 0 ]]; then
    sleep $sekund;
  fi

  done

done

Przerob sobie :)
I believe not drinking is actually the best way to not get a hangover in the first place.
Coincidentally, it's also the best way to not enjoy your life.
knr
Piegowaty Guziec
Piegowaty Guziec
Posty: 4
Rejestracja: 29 mar 2005, 13:18
Płeć: Mężczyzna
Wersja Ubuntu: 7.10
Środowisko graficzne: GNOME
Kontakt:

Odp: Najlepsze narzędzie do napisania massping.

Post autor: knr »

Dzięki. Na pewno sprawdzę te softy. Problem jednak w tym że to kombajny a ja nie chce takich olbrzymów. Kupowaliśmy takie wielkie projekty za worki pieniędzy a później nikt z tego nie korzystał. Softów które wysyłają maile itd mam chyba z 3 i z żadnego nie korzystam :]

Pozostaje jednak nadal kwestia pisania skryptu samodzielnie.
Postanowiłem przysiąść konkretniej do bash'a i wyniki są na tę chwile takie:

Kod: Zaznacz cały


#!/bin/bash
zm_plik=adresy.txt
zm_lini=`wc -l $plik |awk '{print $1}'`
for((zm_linia=1;zm_linia<$zm_lini+1;zm_linia++))
do
zm_adres=`sed -n "$zm_linia"p $zm_plik |awk '{print $1}'`
zm_opis=`sed -n "$zm_linia"p $zm_plik |awk '{print $2,$3,$4,$5}'`
zm_work=`nmap -sP $zm_adres |grep "be up" |awk '{print $3}' |tr "()" " "`
if [[ "$zm_work" = *.*.*.* ]]; then
        echo "prawda" > /dev/null
else
        zm_work=0.0.0.0;
fi
if [ $adres = $zm_work ]; then
        echo -e "\e[00;32mOK\e[00m" $'\t' "$zm_opis";
else
        echo -e "\e[00;33mLOOK\e[00m" $'\t' "$zm_opis";
        zm_work_sec=`nmap -sP $zm_adres |grep "be up" |awk '{print $3}' |tr "()" " "`
        if [[ "$zm_work_sec" = *.*.*.* ]]; then
                echo -e "\e[00;32mOK\e[00m" $'\t' "$zm_opis";
        else
                echo -e "\e[00;31mERROR\e[00m" $'\t' "$zm_opis";
        fi
fi
done



W wyniku wykonania tego kodu dostaję:
OK host1
LOOK host2
ERROR host2
OK host3
LOOK host4
ERROR host4
LOOK host5
ERROR host5
LOOK host6
ERROR host6
OK host7
OK host7

Jak widać wszystko jest ok tylko że stan linijki LOOK host<*> powinien się zmieniać na ERROR host<*> a teraz po prostu wyświetla się poniżej.
Staram się aktualnie wymyślić jak zrobić żeby statusy zastępowały się a nie wyświetlały pod sobą. Gdyby ktoś miał pomysł i chciało się skrobnąć cosik to będę wdzięczny.

Pozdrawiam serdecznie.
Hate It Or Love It (!!!)
[r4]
Przebojowy Jelonek
Przebojowy Jelonek
Posty: 1048
Rejestracja: 08 maja 2007, 07:40
Wersja Ubuntu: 12.10
Środowisko graficzne: Xfce
Architektura: x86

Odp: [Bash] Skrypt do massping.

Post autor: [r4] »

Kod: Zaznacz cały

echo -n "\b"
odpowiedz na Twoje pytanie :)

Czyli najpierw:

Kod: Zaznacz cały

echo -e "LOOK blah blah"
a poxniej

Kod: Zaznacz cały

echo -ne "\b\b\b\b\b\b\b\b\b\b\b\b\b FAIL blah blah"
Jak wkleiles tu swoj skrypt, ze masz w nim "Opis problemu jest niewystarczajacy..."? Uzywasz tagu "Zanim ponownie wpiszesz w tytule tematu słowo PROBLEM zapoznaj się z REGULAMINEMW razie wątpliwości/zastrzeżeń odnośnie powyższej informacji skontaktuj się z moderatorem, który ją wstawił."? :]

EDIT: uzywasz :D
I believe not drinking is actually the best way to not get a hangover in the first place.
Coincidentally, it's also the best way to not enjoy your life.
Awatar użytkownika
leon1313
Zakręcona Traszka
Zakręcona Traszka
Posty: 668
Rejestracja: 02 sty 2006, 19:35
Płeć: Mężczyzna
Wersja Ubuntu: 10.10
Środowisko graficzne: KDE Plasma
Architektura: x86

Odp: [Bash] Skrypt do massping.

Post autor: leon1313 »

Nagios jest darmowym softem, nic nie musisz kupować. Ma jedną zaletę: tak naprawde to końcówka do wizualizacji danych zebranych za pomoca pluginów, które zwracaja różne kody wyjścia ( od 0 do 4 chyba) + komunikat wyjsciowy. Napisanie samodzielnie wtyczek jest dosyc proste a już napewno poprawi Twoją umiejetność programowania.
Ja wychodze z założenia, ze jezeli ktos już cos dobrego stworzył, wykorzystaj to i poznaj ( to chyba najpierw), jak to działa.
Po prostu szkoda czasu.
Kiedys na forum Debiana poruszany był podobny problem, jeden z userów szukał dokładnie tego, co ty teraz: prostego skryptu do pingowania hostów. Potem zachciało mu się historii, wybiórczej notyfikacji, czasowego zatrzymania sprawdzania dla części hostów ( office +24/7 + prace planowane zwiazane z niedostepnością).
Jeżeli szukasz tylko tego, o czym pisałeś, masz rację, skrytp wystarczy.Chłopaki maja tu tęgie głowy i napewno pomogą.
Jesli bedziesz chciał coś większego - pomyśl, czy warto to samemu robić.
p.s compaq z procesorem chyba 500MHZ, 128 MB RAM , jakis linuch leciwy, Nagios i wytrzymuje 250 hostów do sprawdzania mniej wiecj po 5 parametrów (ping, ssh, NTP, DNS, itp), + do tego kupę elementów sieciowych switch-router. Łącznie ponad 2000 parametrów.
"Poza tym dostałeś PLONKa i zabraniam Ci pisać na te grupe!!! Powiedziałem PLONK i sie zamknij i nawet nie knuj rzeby mi odpisywać! Zabraniam!!!"
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 78 gości