Przejdź do głównej zawartości

Linux - Bash - Wyszukanie wszystkich aktywnych hostów w sieci - skrypt

Automatyzacja zadań przy pomocy skryptów bash jest nieoceniona w przypadku gdy trzeba cyklicznie wykonać jakieś polecenie. Przykład takiego zadania to wyszukanie wszystkich aktywnych hostów w sieci przy użyciu polecenia ping (oraz narzędzia fping). W tym przykładzie zakładamy, że host może być nieaktywny w dwóch przypadkach - brak zasilania, - kłopoty z siecią. Więcej szczegółowych informacji o narzędziu ping znajduję się na stronach wilipedii. PING.





Skrypt wyszukujący wszystkie aktywne hosty w podanej sieci

#!/bin/bash

for ip in 192.168.0.{1..255};
do
        
        ping $ip -c 2 &> /dev/null;

        if [ $? -eq 0 ];
                then
                        echo $ip jest aktywny
        fi
        )

       
done

Zasada działania powyższego narzędzia jest bardzo prosta. Narzędzie PING odpytuje każdego hosta z puli adresów jakie znajdują się w pętli "for" czyli od 192.168.0.1 do 192.168.0.255. Przełącznik " -c 2 " służy do ograniczenia wywołania echa do 2 razy. Zapis $> /dev/null przekierowuje błędy stderr jak i standardowe wyjście stdout co ogranicza wyświetlenie danych w oknie terminala do tych najbardziej interesujących. Ciąg $? określa status wyjścia. Jeżeli polecenie zakończyło się pomyślnie status wyjściowy wynosi 0 w innym wypadku jego wartość jest niezerowa, przez co wyświetlone zostaną adresy IP z jakimi udało się nawiązać połączenie. 

Skrypt nie należy do najszybszych. Nieco szybsza wersja wygląda następująco: 

#!/bin/bash

for ip in 192.168.0.{1..255};
do
        (
        ping $ip -c 2 &> /dev/null;

        if [ $? -eq 0 ];
                then
                        echo $ip jest aktywny
        fi
        )&

        wait
done

W tym przypadku wszystkie polecenia ping zostają uruchomione równolegle co znacznie skraca czas działania skryptu. Umieszczenie pętli w nawiasie zakończonym znakiem & powoduję wykonanie jej w podpowłoce, a znak & umieszcza podpowłokę w tle oraz powoduję opuszczenie aktualnego wątku. Zawartość pętli for wykonana zostaje w wielu podpowłokach w tle. Komenda "wait" powoduję iż skrypt zakończy się dopiero w momencie zakończenia wszystkich procesów podrzędnych wykonywanych w tle. 

Dużo szybciej z narzędziem FPING

Narzędzie fping umożliwia jednoczesne wysłanie pakietów do listy adresów IP oraz natychmiastowe uzyskanie odpowiedzi. W tym przypadku różnice w szybkości jest bardzo widoczna. Strona domowa projektu : http://fping.org/

Pobieranie pakietu w zależności od wersji systemu: 

## For RHEL/CentOS 6.3-6.0 32-Bit OS ##
# wget http://pkgs.repoforge.org/fping/fping-3.1-1.el6.rf.i686.rpm

## For RHEL/CentOS 5 32-Bit OS ##
# wget http://pkgs.repoforge.org/fping/fping-3.1-1.el5.rf.i386.rpm

## For RHEL/CentOS 4 32-Bit OS ##
# wget http://pkgs.repoforge.org/fping/fping-3.1-1.el4.rf.i386.rpm
## For RHEL/CentOS 6.3-6.0 64-Bit OS ##
# wget http://pkgs.repoforge.org/fping/fping-3.1-1.el6.rf.x86_64.rpm

## For RHEL/CentOS 5 64-Bit OS ##
# wget http://pkgs.repoforge.org/fping/fping-3.1-1.el5.rf.x86_64.rpm

## For RHEL/CentOS 4 64-Bit OS ##
# wget http://pkgs.repoforge.org/fping/fping-3.1-1.el4.rf.x86_64.rpm

Instalacja pakietu w zależności od wersji systemu 

## For RHEL/CentOS 6.3-6.0 32-Bit OS ##
# rpm -ivh http://pkgs.repoforge.org/fping/fping-3.1-1.el6.rf.i686.rpm

## For RHEL/CentOS 5 32-Bit OS ##
# rpm -ivh http://pkgs.repoforge.org/fping/fping-3.1-1.el5.rf.i386.rpm

## For RHEL/CentOS 4 32-Bit OS ##
# rpm -ivh http://pkgs.repoforge.org/fping/fping-3.1-1.el4.rf.i386.rpm
## For RHEL/CentOS 6.3-6.0 64-Bit OS ##
# rpm -ivh http://pkgs.repoforge.org/fping/fping-3.1-1.el6.rf.x86_64.rpm

## For RHEL/CentOS 5 64-Bit OS ##
# rpm -ivh http://pkgs.repoforge.org/fping/fping-3.1-1.el5.rf.x86_64.rpm

## For RHEL/CentOS 4 64-Bit OS ##
# rpm -ivh http://pkgs.repoforge.org/fping/fping-3.1-1.el4.rf.x86_64.rpm

Dostępne opcje :

  • -a   - Wyświetlone zostaną osiągalne - dostępne IP hostów 
  • -u   - Wyświetlone zostaną nieosiągalne - niedostępne hosty
  • -g   - wygenerowanie zakresu adresów IP w notacji 192.168.1/24

Tak więc na potrzeby tytułowego wyszukania hostów stosujemy polecenie : 

# fping -a 192.168.1/24 -g 2> /dev/null

Komentarze

Najczęściej czytane w tym miesiącu

50 popularnych pytań dotyczących systemu Linux zadawanych na rozmowach kwalifikacyjnych. (Pytania & Odpowiedzi)

Jak dodać użytkownika w systemie Windows z poziomu konsoli CMD? (net user, net localgroup)

Generowanie testowych plików o określonej wielkości