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
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.
http://us2.php.net/manual-lookup.php?pattern=socket
Aber wenn Sie nicht eine Steckdose mit Ping öffnen kann, ist es unwahrscheinlich, dass Sie eines dieser verwenden können. Sprechen Sie mit Ihrem Hosting-Anbieter.
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.
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
tun können Sie können auch auf Unix auf „ping“ Programm SUID-Bit gesetzt;)
- 1. Ermitteln der MTU-Größe ohne Verwendung von Ping
- 2. Warum empfängt Ping ein weiteres Ping-Befehlspaket?
- 3. Wie ping von Zabbix Agent?
- 4. Dienst zum Ping-Webserver
- 5. Instant Messaging ping
- 6. C++ ping-ähnliche Funktion ohne Superuser-Zugriff
- 7. Python Ping-t
- 8. Zur Latenz in Ping
- 9. C-Sockel Ping-Befehl?
- 10. Multithread-Ping-IPs
- 11. Python-Funktion zum Testen von Ping
- 12. Ping von openvz VM ist nicht verfügbar
- 13. Javascript Ping durch Herunterladen von JSON-Datei
- 14. Problem ping eine URL von C#
- 15. Mit ping in C#
- 16. Android-Dienst - Ping-URL
- 17. Ping mit iPhone SDK
- 18. iOS hohe Ping-Zeit
- 19. Continuous Ping Powershell Formular
- 20. Ping Code java
- 21. ruby ping für 1.9.1
- 22. Ping spart nicht
- 23. Ping funktioniert nicht?
- 24. ActiveMQ JMS ping
- 25. Bash: wie stdout eines Ping testen, ohne jede Datei
- 26. Wie "ping" mit Android BLE
- 27. Batch-Datei ping -t Befehl
- 28. Ping durch einen LXC-Container
- 29. Wie Multithread PowerShell Ping-Skript
- 30. Fast Ping-Funktion für PowerShell