PHP Console Monitor
De Wiki levelKro
Révision datée du 25 janvier 2019 à 06:32 par LevelKro (discussion | contributions)
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