PHP Console Monitor
De Wiki levelKro
Permet d'afficher le états des serveurs défini et de leur services (réponse). Simple affichage en console des résultats aux Ping avec personnalisation de l'affichage.
Sommaire
Pré-requis
- PHP-CLI 5.4+
- Shell (Telnet/SSH ou Prompt de commande)
- PHP Minecraft Query API si vous désirez faire un ping d'un serveur Minecraft
Fichiers
colors.php
Pour rendre le résultat en couleur.
<?php
class Colors {
private $foreground_colors = array();
private $background_colors = array();
public function __construct() {
// Set up shell colors
$this->foreground_colors['black'] = '0;30';
$this->foreground_colors['dark_gray'] = '1;30';
$this->foreground_colors['blue'] = '0;34';
$this->foreground_colors['light_blue'] = '1;34';
$this->foreground_colors['green'] = '0;32';
$this->foreground_colors['light_green'] = '1;32';
$this->foreground_colors['cyan'] = '0;36';
$this->foreground_colors['light_cyan'] = '1;36';
$this->foreground_colors['red'] = '0;31';
$this->foreground_colors['light_red'] = '1;31';
$this->foreground_colors['purple'] = '0;35';
$this->foreground_colors['light_purple'] = '1;35';
$this->foreground_colors['brown'] = '0;33';
$this->foreground_colors['yellow'] = '1;33';
$this->foreground_colors['light_gray'] = '0;37';
$this->foreground_colors['white'] = '1;37';
$this->background_colors['black'] = '40';
$this->background_colors['red'] = '41';
$this->background_colors['green'] = '42';
$this->background_colors['yellow'] = '43';
$this->background_colors['blue'] = '44';
$this->background_colors['magenta'] = '45';
$this->background_colors['cyan'] = '46';
$this->background_colors['light_gray'] = '47';
}
// Returns colored string
public function getColoredString($string, $foreground_color = null, $background_color = null) {
$colored_string = "";
// Check if given foreground color found
if (isset($this->foreground_colors[$foreground_color])) {
$colored_string .= "\033[" . $this->foreground_colors[$foreground_color] . "m";
}
// Check if given background color found
if (isset($this->background_colors[$background_color])) {
$colored_string .= "\033[" . $this->background_colors[$background_color] . "m";
}
// Add string and end coloring
$colored_string .= $string . "\033[0m";
return $colored_string;
}
// Returns all foreground color names
public function getForegroundColors() {
return array_keys($this->foreground_colors);
}
// Returns all background color names
public function getBackgroundColors() {
return array_keys($this->background_colors);
}
}
libs.php
Inclus les fonctions PHP du script.
<?php
$services=array(
"ftp"=>"21",
"ssh"=>"22",
"dns"=>"53",
"http"=>"80",
"https"=>"443",
"sc"=>"8000",
"tnet"=>"31457",
"webmin"=>"10000",
"sql"=>"3306",
"source"=>"27015",
"smtp"=>"25",
"pop"=>"995",
"rtmp"=>"1935",
"mc"=>"25565",
"mcpe"=>"19132",
"smb"=>"445",
"netb"=>"139",
"proxy"=>"3128"
);
$names=array(
"ftp"=>"FTP - Serveur de fichier",
"ssh"=>"SSH - Shell de commande",
"dns"=>"DNS - Serveur de nom de domaine (DNS)",
"http"=>"HTTP - Serveur Web",
"https"=>"HTTPS - Serveur Web sécurisé avec SSL ",
"sc"=>"SHOUTCast - Serveur de streaming Audio",
"tnet"=>"TetriNet - Serveur de jeu Tetrinet",
"webmin"=>"Webmin/Virtualmin - Serveur de gestion",
"sql"=>"MySQL - Base de données",
"source"=>"Source - Serveur de jeu Source",
"smtp"=>"SMTP - Serveur d'envoie des courriels",
"pop"=>"POP - Service de boîte des courriels",
"rtmp"=>"RTMP - Serveur de diffusion Flash",
"mc"=>"Minecraft - Serveur Minecraft (Java)",
"mcpe"=>"Minecraft PE - Serveur Minecraft Pocket Edition/Windows 10",
"smb"=>"Samba - Réseau de partage de type Samba/Windows",
"netbios"=>"Samba NetBIOS - Réseau de partage de type Samba/Windows avec NetBIOS",
"proxy"=>"Proxy - Service de camouglage de l'adresse réel du client",
);
function remoteState($host,$port){
if($fp=@fsockopen($host, $port, $errno, $errstr, 20)){ $rep=true; }
else{ $rep=false; }
return($rep);
@fclose($fp);
$fp=null; $name=null; $rep=null; $port=null; $host=null;
}
function remoteStateMC($host,$port){
$json=exec("php ./mcstatus/json.php ".$host." ".$port,$ret);
$array = json_decode($json,true);
return (($array['status']=="Online")?true:false);
}
function remotePing($ip){
$ping = exec("ping -c 1 $ip");
$ping=explode("=",$ping);
if(!$ping[1]) return false;
else return true;
}
status.php
Le fichier à exécuter.
<?php
/*
Script de vérification réseau
En ligne de commande PHP (PHP-CLI)
Pour faire un écran de veille avec un serveur Linux
Permet de monitorer rapidement son réseau
Par Mathieu Légaré (levelKro) levelkro@yahoo.ca https://levelkro.com https://levelkro.net
Version 5 des sources utilisé, version 2 de l'affichage
Version du 5 octobre 2018
*/
echo date("H:i:s",time())." > Démarrage du script ...\r\n";
system("setterm -blank 0"); // Éviter la fermeture de l'écran
$s_cols=exec("tput cols");
$s_rows=exec("tput rows");
require("colors.php");
$color=New Colors();
echo date("H:i:s",time())." > ... module des couleurs chargé\r\n";
require("libs.php");
echo date("H:i:s",time())." > ... module des librairies chargé\r\n";
start:
include("config.php");
echo date("H:i:s",time())." > ... configurations chargé\r\n";
echo "\r\n";
echo date("H:i:s",time())." > Démarrage de l'analyse\r\n";
system('clear');
// HEADER
echo "\r\n\r\n";
$name="Script d'analyse de serveurs, services et réseau, v 2.4";
echo str_repeat(" ",round(($s_cols-strlen($name))/2,0)).$color->getColoredString($name."\r\n","white","black");
echo "\r\n";
// LEGENDS
if($config['legends']){
echo " ";
echo $color->getColoredString("*** ","purple","black");
echo $color->getColoredString("Légende des types de services","cyan","black");
echo "\r\n";
foreach($names as $tag=>$name){
echo " ";
echo $color->getColoredString(strtoupper($tag),"light_purple","black");
echo $color->getColoredString(str_repeat(" ",(6-strlen($tag)))." : ".$name."\r\n","light_cyan","black");
}
echo "\r\n";
}
// SERVERS
echo " ";
echo $color->getColoredString("*** ","purple","black");
echo $color->getColoredString("Analyse des serveurs","cyan","black");
echo "\r\n";
foreach($servers as $server) {
$str="[".$server['type']."] ".$server['name'];
echo " "; //4
echo $color->getColoredString("[","light_gray","black");
echo $color->getColoredString(strtoupper($server['type']),"white","black");
echo $color->getColoredString("] ","light_gray","black");
echo $color->getColoredString($server['name'],"light_cyan","black");
echo " ".$color->getColoredString(str_repeat(".",($s_cols-(20+strlen($str)+strlen($server['ip'])))),"grey","black")." "; //2
echo $color->getColoredString($server['ip']." ","light_cyan","black");
$ping=remotePing($server['ip']);
echo $color->getColoredString("[","light_gray","black");
echo (($ping==true)?$color->getColoredString("ONLINE ","light_green","black"):$color->getColoredString("OFFLINE","light_red","black"));
echo $color->getColoredString("]\r\n","light_gray","black"); //9
// DOMAINS
if($config['domains'] && count($server['domains'])>=1){
if(is_array($server['domains'])){
$x=0;
$a=0;
if($config['ports'] && count($server['ports'])>=1) $follow=true;
else $follow=false;
foreach($server['domains'] as $domain){
$a++;
$x++;
if($x==1) {
echo " ";
echo $color->getColoredString((($follow || $a<=(count($server['domains'])-3))?"├":"└")." ","light_gray","black");
}
echo str_repeat(".",(32-strlen($domain)))." ".$color->getColoredString($domain,"light_cyan","black")." ";
if((42+($x*32))>=$s_cols && $a<count($server['domains'])) {
$x=0;
echo "\r\n";
}
}
echo "\r\n";
}
}
// SERVICES
if($config['ports'] && count($server['ports'])>=1){
echo " ";
echo $color->getColoredString("└ ","light_gray","black");
$z=12;
foreach($server['ports'] as $v=>$port){
$z=(3+$z)+strlen($port);
if(($z)>=$s_cols) {
echo "\r\n ";
$z=12;
}
if($ping==true){
// Add support for Minecraft custom server port
if(in_array($port,array("mc","mcpe"))) {
$answer=remoteStateMC($server['ip'],$services[$port]);
}
elseif(count(explode(":",$port))==2){
$t=explode(":",$port);
$answer=remoteState($server['ip'],$t[1]);
$port=$t[0];
}
else {
$answer=remoteState($server['ip'],$services[$port]);
}
echo $color->getColoredString("[","light_gray","black");
if($answer==true) echo $color->getColoredString(strtoupper($port),"light_green","black");
else echo $color->getColoredString(strtoupper($port),"light_red","black");
echo $color->getColoredString("] ","light_gray","black");
}
else {
if(count(explode(":",$port))==2){
$t=explode(":",$port);
$port=$t[0];
}
echo $color->getColoredString("[","light_gray","black");
echo $color->getColoredString(strtoupper($port),"brown","black");
echo $color->getColoredString("] ","light_gray","black");
}
}
echo "\r\n";
}
}
// COOLDOWN
echo "\r\n";
echo " ";
echo $color->getColoredString("*** ","purple","black");
echo $color->getColoredString("Cooldown de ".$config['cooldown']." secondes","cyan","black");
echo "\r\n ";
$wc=$s_cols-8;
$w=round($wc/$config['cooldown'],0);
if(($w*$config['cooldown'])>$wc) {
$dif=($w*$config['cooldown'])-$wc;
//$jump=round($config['cooldown']/$dif,0);
$jump=round($wc/$dif,0);
}
else {
$jump=false;
}
$jumpx=0;
$v=0;
for($x=0;$x<$config['cooldown'];$x++){
if($jump>0) $jumpx++;
if($jump==false || $jumpx<$jump) {
echo $color->getColoredString(str_repeat("=",$w),"purple","magenta");
$v=($v+$w);
}
elseif($jump>=1 && $jumpx>=$jump) $jumpx=0;
sleep("1");
}
if($v<$wc) echo $color->getColoredString(str_repeat("=",$wc-$v),"purple","magenta");
sleep("1");
echo "\r\n";
echo "\r\n";
// Restart script
echo date("H:i:s",time())." > Redémarrage...\r\n";
sleep(2);
goto start;
config.php
Le fichier à éditer pour les informations, il est relu à chaque début de scan, alors inutile de redémarrer le script pour voir les changements.
<?php
error_reporting(E_ALL & ~E_NOTICE & ~E_WARNING & ~E_DEPRECATED);
ini_set("display_errors", 0);
@unlink("./.error");
$config=array(
"ports"=>true, // false for disable or true for scan and display services ports
"domains"=>false, // false for disable or true for display domains names
"legends"=>false, // false for disable or true for display services legends
"cooldown"=>"120", // Limiting ports and ping flood, wait before re-run script.
);
$servers=array(
array(
"ip"=>"192.168.0.101",
"type"=>"lan",
"domains"=>array(),
"name"=>"Imprimante MFC-J625DW",
"ports"=>array()
),
array(
"ip"=>"192.168.0.104",
"type"=>"lan",
"domains"=>array(),
"name"=>"Console Wii",
"ports"=>array()
),
array(
"ip"=>"192.168.0.111",
"type"=>"lan",
"domains"=>array(),
"name"=>"LVKPC",
"ports"=>array("IPCAM:8100")
),
array(
"ip"=>"198.46.211.119",
"type"=>"vps",
"domains"=>array("exemple.com"),
"name"=>"Exemple Server 01",
"ports"=>array("ssh","webmin","ftp","dns","http","https","smtp:465","pop"),
),
);
Exécution
Tous simplement faire la commande dans le terminal.
php status.php