mar 21 2013
[PHP] [PING] Jak w prosty sposób sprawdzić dostępność hostów i serwerów w sieci hurtem?
Najprostszy sposób w MS Windows, czy Linux, to użycie polecenia PING z odpowiednimi parametrami. Jednak takie polecenie potrafi odpytywać tylko 1 IP. Co jeśli chcemy przepingować całą sieć, albo pewien jej zakres? Posłużyć się możemy odpowiednim softem, pingerów różnego kalibru nie brakuje, ale także można zrobić go we własnym zakresie w PHP. Jako, że w PHP mamy możliwość uruchamiania procesów zewnętrznych poprzez exec, toteż możemy posłużyć się tym samym programem pingującym, jaki jest w naszym windowsie, a do tego wywołać go np w pętli, która przemagluje całą pulę adresów. Pozostaje tylko pytanie jak? Przykład funkcji poniżej:
1 2 3 4 5 6 7 8 9 | function ping($ip=NULL) { if(getenv("OS")=="Windows_NT") { $exec = shell_exec("ping -a -n 1 -l 64 -w 1 ".$ip); $n=explode(" ", $exec ); $czas=end(explode("= ",end(explode(",", $exec )))); if(strpos($czas, 'ms')==false) return 'X'; else return $n['1'].' ['.$czas.']'; } } |
Jak widać, funkcja działa z pingiem windowsowym, ale nie trudno ją także przerobić na potrzeby linuxa! Krótko, funkcja zwraca X, jeśli IP nie odpowiedziało na ping, tzn 100% straty, lub nazwę NetBios oraz czas dostępu na krótki ping dla danego IP. Funkcję naturalnie można zmodyfikować i pobrać np czasy dostępu dla większej ilości pingów, straty pakietów, itp. Wszystko zależy oczywiście od parametrów rozruchowych aplikacji ping. Tu zastosowano -a -n 1 -l 64 -w 1, ale wcale tak być nie musi… Jak uruchamiać ping, aby odczytać inne dane? Zaposiłkuję się poradnikiem zewnętrznym: help ping 1, help ping 2, żeby tego samego nie opisywać 50 razy…
Powodzenia w edytowaniu!