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