Scripts hosts activos, en linea.
Estoy haciendo un script que dados una serie de hosts, te diga si este host se encuentra online o en caso contrario offline, lo he estado haciendo con sockets, ya que ha sido la unica forma que se me ha ocurrido, pero no he conseguido llegar a nada, no me da siempre resultados correctos pero alguna vez ha funcionado correctamente :S
El script que llevo por el momento es este :
(Los datos de los hosts se encuentran en una matriz $maquinas que a su vez esta en el fichero datos.php por su larga extension)
function onlineAll() {
include_once("datos.php");
$port=5800;
$timer=0.01;
$num=count($maquinas);
$on=0;
$off=0;
for ($i=0;$i<$num-1;$i++) {
$ip=$maquinas[$i]["ip"];
$conection = fsockopen($ip, $port, &$errno, &$errstr, $timer);
if (!$conection) {
$off++;
echo "<strong><font color=#FF0000>[Offline]</font> -> </strong>".$maquinas[$i]["nom"]." [".$ip."] ... ";
echo "$errstr ($errno)<br />n";
unset($conection);
} else {
$on++;
echo "<strong>[Online] -> </strong>".$maquinas[$i]["nom"]." [".$ip."]<br>";
fclose($conection);
}
}
}
Haber si alguien consigue solucionarme porque coño no funciona este script, o me da alguna forma alternativa de conseguir lo que quiero.
Gracias de antemano.
El script que llevo por el momento es este :
(Los datos de los hosts se encuentran en una matriz $maquinas que a su vez esta en el fichero datos.php por su larga extension)
function onlineAll() {
include_once("datos.php");
$port=5800;
$timer=0.01;
$num=count($maquinas);
$on=0;
$off=0;
for ($i=0;$i<$num-1;$i++) {
$ip=$maquinas[$i]["ip"];
$conection = fsockopen($ip, $port, &$errno, &$errstr, $timer);
if (!$conection) {
$off++;
echo "<strong><font color=#FF0000>[Offline]</font> -> </strong>".$maquinas[$i]["nom"]." [".$ip."] ... ";
echo "$errstr ($errno)<br />n";
unset($conection);
} else {
$on++;
echo "<strong>[Online] -> </strong>".$maquinas[$i]["nom"]." [".$ip."]<br>";
fclose($conection);
}
}
}
Haber si alguien consigue solucionarme porque coño no funciona este script, o me da alguna forma alternativa de conseguir lo que quiero.
Gracias de antemano.
Esto era correcto, lo unico que falla es el tiempo que le das al socket. Es demasiado bajo
/*La variable ip_new la tengo funcionando en una consulta de mysql si quieres la puedes cambiar por la ip que quieras*/
<?
$fp = fsockopen("tcp://$ip_new", 5800, $errno, $errstr, 0.5);
if (!$fp)
echo "<img src=\'imagenes/offline.gif\'><h4>$ip_new SIN LINEA</H4>";
else {
echo "<img src=\'imagenes/online.gif\'><H4>$ip_new EN LINEA</H4>";
}
fclose($fp);
?>
<?
$fp = fsockopen("tcp://$ip_new", 5800, $errno, $errstr, 0.5);
if (!$fp)
echo "<img src=\'imagenes/offline.gif\'><h4>$ip_new SIN LINEA</H4>";
else {
echo "<img src=\'imagenes/online.gif\'><H4>$ip_new EN LINEA</H4>";
}
fclose($fp);
?>
La variable ip_new la tengo funcionando en una consulta de mysql si quieres la puedes cambiar por la ip que quieras
<?
$fp = fsockopen(\'tcp://$ip_new\', 5800, $errno, $errstr, 0.5);
if (!$fp)
echo "<img src=\'imagenes/offline.gif\'><h4>$ip_new SIN LINEA</H4>";
else {
echo "<img src=\'imagenes/online.gif\'><H4>$ip_new EN LINEA</H4>";
}
fclose($fp);
?>
<?
$fp = fsockopen(\'tcp://$ip_new\', 5800, $errno, $errstr, 0.5);
if (!$fp)
echo "<img src=\'imagenes/offline.gif\'><h4>$ip_new SIN LINEA</H4>";
else {
echo "<img src=\'imagenes/online.gif\'><H4>$ip_new EN LINEA</H4>";
}
fclose($fp);
?>
Tenes acceso a los host? si es asi yo hago algo similar con este procedimiento:
$ip = "192.168.1.106"
$servidor = @include 'http://192.168.1.106/unarchivo.php';
if(!$servidor)
{
$control = mysql_db_query("$DBName","insert into servidores (servidor,activo)
values('$ip','0')");
}
if($servidor)
{
$control = mysql_db_query("$DBName","insert into servidores (servidor,activo)
values('$ip','1')");
}
solo que como yo solo verifico la conexion a un servidor la ip es estatica por eso te puse la variable $ip al principio pero no se si se puede insertar dentro del include.... yo digo que talvez si... el proceso se lleva unos pocos segundos y el include lleva un signo de @ para que no te marque error si el servidor no esta disponible, lo que quisiera hacer es poner un tiempo maximo de prueba de conexion pero no se como.. si lo haces me lo envias por correo o lo posteas
saludos
$ip = "192.168.1.106"
$servidor = @include 'http://192.168.1.106/unarchivo.php';
if(!$servidor)
{
$control = mysql_db_query("$DBName","insert into servidores (servidor,activo)
values('$ip','0')");
}
if($servidor)
{
$control = mysql_db_query("$DBName","insert into servidores (servidor,activo)
values('$ip','1')");
}
solo que como yo solo verifico la conexion a un servidor la ip es estatica por eso te puse la variable $ip al principio pero no se si se puede insertar dentro del include.... yo digo que talvez si... el proceso se lleva unos pocos segundos y el include lleva un signo de @ para que no te marque error si el servidor no esta disponible, lo que quisiera hacer es poner un tiempo maximo de prueba de conexion pero no se como.. si lo haces me lo envias por correo o lo posteas
saludos