OVH Community, votre nouvel espace communautaire.

[PING] Savoir si une machine est down ou lente à répondre


frederic1
17/01/2007, 23h49
Voici un petit script que j'ai codé (fait maison) qui permet de savoir si une machine est down ou met du temps à répondre au Ping.

J'ai testé le script sous Gentoo64 Release 2 OVH :
Code:
#!/usr/local/bin/php -q

 $timeout )	$error++;
		// Sinon ...
		else			$noerror++;
	};
};

// Si l'adresse de la machine est incorrecte
if ( $nohost )
{
	// On envoit un mail d'erreur
	$message = "$date : $host n'existe pas ou plus : \"Unknown Host\" !\n";
	// Dans l'ordre : Destinataire, Sujet, Corps et Expéditeur du mail
	@mail( "$mailto", "$host : Serveur inexistant !", $message, "From: $mailfrom\nReply-To: $mailfrom\n" );
}
// Si la machine existe mais ne répond pas
elseif ( $died )
{
	$message = "$date : $host n'a pas répondu : \"Destination Host Unreachable\" !\n";
	@mail( "$mailto", "$host : Serveur injoignable !", $message, "From: $mailfrom\nReply-To: $mailfrom\n" );
}
// Si à plus de 5 reprises, la réponse du ping a dépassé les "$timeout" ms.
elseif ( $error > 5 )
{
	$message = "$date : $host a répondu en plus de $timeout ms, à $error reprises !\n";
	@mail( "$mailto", "$host : Serveur trop lent !", $message, "From: $mailfrom\nReply-To: $mailfrom\n" );
}
// Si la machine a reçu le ping mais n'a pas répondu (par exemple en cas de firewall)
elseif ( !$error && !$noerror )
{
	$message = "$date : $host a été joint mais n'a pas répondu !\n";
	@mail( "$mailto", "$host : Serveur muet !", $message, "From: $mailfrom\nReply-To: $mailfrom\n" );
};

// Enregistrement de l'erreur dans un fichier log
if ( $message )
{
	$fp = fopen( $logfile, 'a' ) or die ("Erreur d'écriture dans le fichier $logfile");
	fputs( $fp, $message );
	fclose( $fp );
};

?>
En clair, si vous pingez la machine (ping -w 10) et que vous obtenez :
Code:
PING ns00000.ovh.net (0.0.0.0) 56(84) bytes of data.
64 bytes from ns00000.ovh.net (0.0.0.0): icmp_seq=1 ttl=63 time=0.297 ms
64 bytes from ns00000.ovh.net (0.0.0.0): icmp_seq=2 ttl=63 time=0.304 ms
64 bytes from ns00000.ovh.net (0.0.0.0): icmp_seq=3 ttl=63 time=0.262 ms
64 bytes from ns00000.ovh.net (0.0.0.0): icmp_seq=4 ttl=63 time=0.221 ms
64 bytes from ns00000.ovh.net (0.0.0.0): icmp_seq=5 ttl=63 time=0.320 ms
64 bytes from ns00000.ovh.net (0.0.0.0): icmp_seq=6 ttl=63 time=0.371 ms
64 bytes from ns00000.ovh.net (0.0.0.0): icmp_seq=7 ttl=63 time=0.315 ms
64 bytes from ns00000.ovh.net (0.0.0.0): icmp_seq=8 ttl=63 time=0.376 ms
64 bytes from ns00000.ovh.net (0.0.0.0): icmp_seq=9 ttl=63 time=0.383 ms
64 bytes from ns00000.ovh.net (0.0.0.0): icmp_seq=10 ttl=63 time=0.201 ms

--- host ping statistics ---
10 packets transmitted, 10 received, 0% packet loss, time 9005ms
rtt min/avg/max/mdev = 0.201/0.305/0.383/0.059 ms
Alors tout va bien. Aucune alerte n'est envoyée.

Par contre, si vous obtenez :
Code:
ping: unknown host ns00000.ovh.net
... alors vous allez recevoir le 1er mail d'erreur ("Serveur inexistant !")

Si vous obtenez :
Code:
PING ns00000.ovh.net (0.0.0.0) 56(84) bytes of data.
From ns00000.ovh.net icmp_seq=2 Destination Host Unreachable

--- ns00000.ovh.net ping statistics ---
2 packets transmitted, 0 received, +1 errors, 100% packet loss, time 1000ms
... alors vous allez recevoir le 2nd mail d'erreur ("Serveur injoignable !")

Si vous obtenez :
Code:
PING ns00000.ovh.net (0.0.0.0) 56(84) bytes of data.
64 bytes from ns00000.ovh.net (0.0.0.0): icmp_seq=1 ttl=238 time=166 ms
64 bytes from ns00000.ovh.net (0.0.0.0): icmp_seq=2 ttl=238 time=165 ms
64 bytes from ns00000.ovh.net (0.0.0.0): icmp_seq=3 ttl=238 time=165 ms
64 bytes from ns00000.ovh.net (0.0.0.0): icmp_seq=4 ttl=238 time=166 ms
64 bytes from ns00000.ovh.net (0.0.0.0): icmp_seq=5 ttl=238 time=166 ms
64 bytes from ns00000.ovh.net (0.0.0.0): icmp_seq=6 ttl=238 time=166 ms
64 bytes from ns00000.ovh.net (0.0.0.0): icmp_seq=7 ttl=238 time=166 ms
64 bytes from ns00000.ovh.net (0.0.0.0): icmp_seq=8 ttl=238 time=166 ms
64 bytes from ns00000.ovh.net (0.0.0.0): icmp_seq=9 ttl=238 time=165 ms
64 bytes from ns00000.ovh.net (0.0.0.0): icmp_seq=10 ttl=238 time=165 ms

--- ns00000.ovh.net ping statistics ---
10 packets transmitted, 10 received, 0% packet loss, time 9022ms
rtt min/avg/max/mdev = 165.631/166.075/166.987/0.504 ms
... alors vous allez recevoir le 3ème mail d'erreur ("Serveur trop lent !")

Enfin, si vous obtenez :
Code:
PING ns00000.ovh.net (81.64.128.84) 56(84) bytes of data.

--- ns00000.ovh.net ping statistics ---
10 packets transmitted, 0 received, 100% packet loss, time 9027ms
... alors vous allez recevoir le 4ème mail d'erreur ("Serveur muet !")