2009-06-18 14 views
0

Ich bin auf einem Linux-System, wo ich nicht die 'Ping' Anwendung verwenden darf (ping: icmp open socket: Operation nicht erlaubt). Allerdings muss das Skript, das ich schreibe (PHP, aber ich kann einen exec() -Aufruf an jedes Skript/Programm, wenn benötigt), um festzustellen, ob ein Host 'am Leben' ist. Wie kann ich das ohne "Ping" machen?Ping von Dynamischer Sprache ohne Verwendung von 'ping'

Antwort

2

Wenn Ping es nicht kann, können Sie es nicht in einer anderen Sprache tun. Hier ist eine Analogie, die Ihnen helfen kann zu verstehen, warum. Nehmen wir an, es gibt eine Datei im Dateisystem und Sie möchten deren Inhalt. Sie laufen cat filename und es heißt cat: filename: Permission denied. Denkst du Perl (oder eine andere Sprache) wird besser als C hier? Lassen Sie uns versuchen:

#!/usr/bin/perl 

use strict; 
use warnings; 


die "usage: $0 filename" unless @ARGV == 1; 
my $filename = shift; 

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

print while <$fh>; 

Wenn gegen die Datei ausführen, es sagt could not open filename: Permission denied. Egal, welche Sprache Sie verwenden möchten, erhalten Sie Operation not permitted.

Das heißt, es gibt andere Methoden zu bestimmen, ob eine Maschine lebt. Wenn ein Server bekannt ist, der immer auf dem Computer ausgeführt wird, könnten Sie versuchen, eine Verbindung zu ihm herzustellen. Beachten Sie, dass Sie die Verbindung nicht beenden müssen (z. B. Anmelden), nur die Tatsache, dass Sie die Verbindung erfolgreich herstellen können, reicht aus, um zu wissen, dass die Box aktiv ist.

0

Das PHP-Handbuch enthält den vom Benutzer bereitgestellten Code für eine Implementierung eines ping in PHP. Leider erfordert es Root-Zugriff, daher ist es auch nicht wahrscheinlich, dass Sie das verwenden können. Eine Alternative ist curl zu verwenden und sich die Werte wieder durch curl_getinfo():

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

Es ist bei weitem nicht entspricht ping zu sein, aber vielleicht noch geeignet für Ihre Bedürfnisse.

1

Um einen Ping (ICMP) durchzuführen, benötigen Sie Root-Zugriff.

Die einzige Möglichkeit, die Sie haben, ist eine TCP oder UDP-Ping zu tun. Wenn Sie ein Beispiel den Code Cacti überprüfen oder Sie hping es für Sie

1

tun können Sie können auch auf Unix auf „ping“ Programm SUID-Bit gesetzt;)