PHP Console Monitor
De Wiki levelKro
Révision datée du 25 janvier 2019 à 05:31 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