2012-12-13 8 views
5

Chcę sprawdzić, czy inny komputer ogólnie odpowiada za pomocą PHP.Czy PHP może pingować zdalny system bez protokołu ICMP i bez zewnętrznych programów?

Większość podejść dotyczy pingowania niektórych usług uruchomionych na komputerze docelowym, ale chcę sprawdzić, czy komputer jest ogólnie dostępny.

Znalazłem http://birk-jensen.dk/2010/09/php-ping/, który rzekomo wysyła pakiet ping ICMP. Problem polega na tym, że trzeba wykonać jedną z następujących czynności: root, aby wykonać socket_create(AF_INET, SOCK_RAW, 1). Obejście przez posix_seteuid(0) również nie działa, ponieważ wymagane są również podwyższone uprawnienia.

Wszystkie funkcje, które pozwoliłyby mi uruchomić program ping, również nie są dostępne w moim scenariuszu.

Jak więc sprawdzić, czy serwer jest podłączony do sieci za pomocą php?

+1

'(" ping yahoo.com ")' ?? –

+0

Czy masz dostęp do zdalnego serwera (np. Ssh)? –

+2

Jeśli nie masz uprawnień, utwórz gniazdo ICMP i nie masz uprawnień do uruchomienia zewnętrznego programu do uruchomienia echa ICMP, nie możesz wykonać echa ICMP. Jeśli nie chcesz oprzeć swojego czeku na jakiejś usłudze lub innej, do której masz uprawnienia, to utkniesz. Jest mało prawdopodobne, abyś musiał być w tym celu "root", twoje konto użytkownika musiałoby po prostu otrzymać to uprawnienie. Skontaktuj się z administratorem serwera i sprawdź, czy może to zrobić za Ciebie. – DaveRandom

Odpowiedz

1

za to może chcesz spróbować, to jest bardzo mało prawdopodobne, aby dać znaczące dane, ale jest coś do grok skończona.

jeśli otworzysz gniazdo TCP do losowego portu i zamiast czasu oczekiwania zamknie się natychmiast. wtedy maszyna jest "w górze", ale to nie znaczy dużo więcej. może być w panice jądra.

i przekroczenie limitu czasu nie oznacza, że ​​maszyna jest wyłączona. tylko dlatego, że zamiast odrzucić uścisk dłoni tcp, upuścił go.

Nie będziesz w stanie uzyskać żadnych znaczących danych czasowych z tym, ale da więcej wykształconych domysłów, jeśli dana maszyna jest włączona lub wyłączona.

<?php 
$sock = socket_create(AF_INET,SOCK_STREAM,SOL_TCP); 
socket_connect ($sock , string $address,22) === true) { 
switch(socket_last_error($sock)) { 
    case 110: 
    case 112: 
    case 113: 
     echo 'Machine may be down'; 
     break; 
    case 111: 
     echo 'Machine may be up'; 
     break; 
    case 115: 
     echo 'Machine is up'; 
     break; 
    default: 
     echo 'Machine in unknown state.'; 
     break; 
} 

już stwierdził, że nie można użyć polecenia ping tak Net_Ping nie będzie działać, jak to jest tylko wyobraźnia interfejs do polecenia ping w systemie operacyjnym System

Powiązane problemy