Scripts hosts activos, en linea.

Andr?Bjou
27 de Junio del 2006
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.

rargueso
27 de Junio del 2006
Esto era correcto, lo unico que falla es el tiempo que le das al socket. Es demasiado bajo

gusalgora
27 de Junio del 2006
/*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);
?>

gusalgora
27 de Junio del 2006
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);
?>

tgp
27 de Junio del 2006
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

Andres Bou
27 de Junio del 2006
El problema es que yo no tengo acceso a los hosts de la manera http://host ..... por eso me voy por los sockets, pero nose porque no me chuta :( :(

Algun crack de php and sockets, k responda . ... jsjsjs ;)