Domanda

Sono su un sistema Linux in cui non mi è permesso usare l'applicazione 'ping' (ping: icmp open socket: Operazione non consentita). Tuttavia, lo script che sto scrivendo (PHP, ma posso usare una chiamata exec () a qualsiasi script / programma se necessario) deve determinare se un host è "vivo". Come posso procedere senza usare "ping"?

È stato utile?

Soluzione

Se il ping non può farlo, non puoi farlo in una lingua diversa. Ecco un'analogia che può aiutarti a capire il perché. Supponiamo che ci sia un file nel file system e che tu voglia il suo contenuto. Esegui cat nomefile e dice cat: nomefile: autorizzazione negata . Pensi che il Perl (o qualsiasi altra lingua) sia più giusto di C qui? Proviamo:

#!/usr/bin/perl

use strict;
use warnings;


die "usage: <*> filename" unless @ARGV == 1;
my $filename = shift;

open my $fh, "<", $filename
    or die "could not open $filename: $!\n";

print while <$fh>;

Quando eseguito contro il file, dice Impossibile aprire il nome file: Autorizzazione negata . Indipendentemente dalla lingua che si tenta di utilizzare, verrà visualizzato Operazione non consentita .

Detto questo, ci sono altri metodi per determinare se una macchina è viva. Se è noto che un server è sempre in esecuzione sul computer, è possibile provare a connettersi ad esso. Tieni presente che non è necessario completare la connessione (ad es. Accesso), solo il fatto che puoi avviare correttamente la connessione è sufficiente per sapere che la casella è attiva.

Altri suggerimenti

Per eseguire un ping (ICMP) è necessario l'accesso root.

L'unico modo che hai è fare un ping TCP o UDP . Se vuoi un esempio controlla il codice di Cactus oppure puoi utilizzare hping per farlo per te

Oppure puoi impostare il bit SUID su " ping " programma su unix;)

http://us2.php.net/manual-lookup.php ? modello = presa

Ma se non riesci ad aprire un socket con ping, è improbabile che tu possa usare uno di questi. Parla con il tuo provider di hosting.

Il Manuale di PHP fornisce il codice fornito dall'utente per l'implementazione di un ping in PHP . Sfortunatamente, richiede l'accesso come root, quindi è improbabile che tu possa usarlo neanche. Un'alternativa è usare l'arricciatura e osservare i valori restituiti da curl_getinfo () :

c = curl_init('http://www.site.com/');
curl_exec($c);
$info = curl_getinfo($ch);

Non è affatto equivalente al ping, ma forse adatto alle tue esigenze.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top