Tak jak obiecałem, umieszczam malutki skrypcik do sprawdzania, które komputery w sieci lokalnej są włączone (wymaga on statycznie przypisanych adresów IP do każdego kompa, można go oczywiście przerobić aby skanował całą klasę w poszukiwaniu kompów, ale robiłem go na własne potrzeby i zależało mi na czasie skanowania

)
<?php
// *********************
// Konfiguracja
//
/* OS na ktorym bedzie uruchamiany skrypt
windows - dziala _tylko_ metoda ping
unix - dziala zarowno ping jak i nmap (jezeli jest w systemie) */
$config['os'] = 'unix';
/* Metoda sprawdzania hostow
ping
nmap - wymaga nmapa w systemie*/
$config['scanMethod'] = 'nmap';
/* IPki do sprawdzenia */
$ipsArray['192.168.0.1'] = \"Host1\";
$ipsArray['192.168.0.2'] = \"Host2\";
/* Tablica ipkow majacych dostep do strony (jezeli pusta - wszyscy maja dostep) */
//$allowArray[] = \"127.0.0.1\";
// *********************
// Sprawdzenie uprawnien
// dostepu do strony
{
if( in_array( $_SERVER['REMOTE_ADDR'], $allowArray ) == False) {
print(\"Brak dostępu!\"); }
}
// *********************
// Szablon
$tblBegin = '<table border=\"0\" cellpadding=\"0\" cellspacing=\"2\" summary=\"\">
<tr>
<td colspan=\"3\" class=\"title\">Status komputerów w sieci lokalnej</td>
</tr>
<tr>
<td colspan=\"3\" class=\"separator\"></td>
</tr>
<tr>
<td class=\"cell2\">Status</td>
<td class=\"cell2\">Host/ksywa/imię</td>
<td class=\"cell2\">Adres IP</td>
</tr>';
$tblRow = '<tr>
<td class=\"cell\" style=\"text-align: center\"><img src=\"comp{STATUS}.gif\"></td>
<td class=\"cell\">{HOST}</td>
<td class=\"cell\">{IP}</td>
</tr>';
$tblEnd = '<tr height=\"55\" valign=\"center\">
<td class=\"cell3\" colspan=\"3\">W sumie: <img src=\"compon.gif\" align=\"absmiddle\"> {SUMAON} <img src=\"compoff.gif\" align=\"absmiddle\"> {SUMAOFF} </td>
</tr>
</table>';
// *********************
// Sprawdzenie komputerow
$time_start = getmicrotime();
$compOn = $compOff = 0;
foreach( $ipsArray as $ip => $host )
{
$compStatus = scan( $ip );
($compStatus == \"on\") ? $compOn++ : $compOff++;
$row = $tblRow;
$rows .= $row;
}
$page = $tblBegin . $rows . $end;
$time_end = getmicrotime();
$stoper = $time_end - $time_start;
function scan( &$ip )
{
if( $config['scanMethod'] == 'nmap' )
{
$cmd = shell_exec( \"nmap -sP -max_rtt_timeout 10 $ip\" ); Return ( strpos( $cmd, '1 host up' ) === False ) ?
'off' : 'on'; }
elseif( $config['scanMethod'] == 'ping' )
{
if( $config['os'] == 'windows' )
{
$cmd = shell_exec( \"ping -n 1 -w 10 $ip\" ); Return ( strpos( $cmd, '(100%' ) === False ) ?
'on' : 'off'; }
else
{
$pingResult = explode( \",\", $cmd );
Return ( strpos( $pingResult[1], '1' ) === False ) ?
'off' : 'on'; }
}
else
{
Return \"off\";
}
}
function getmicrotime()
{
list
( $usec, $sec ) = explode( \" \", microtime() ); return( (float)$usec + (float)$sec );
}
?>
<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">
<head>
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-2\" />
<style type=\"text/css\">
body {
margin: 15px;
font: 11px Verdana;
color: #515151;
}
table {
text-align: center;
border: 1px solid gray;
}
a, a:link, a:visited {
text-decoration: none;
color: #515151;
}
a:hover {
text-decoration: underline;
color: black;
}
td, tr {
font: 11px Verdana;
color: #515151;
}
.title {
padding: 5px;
background-color: #e5e5e5;
color: black;
text-align: center;
font-weight: bold;
}
.cell {
padding: 5px;
background-color: #F5F5F5;
text-align: left;
}
.cell2 {
padding: 5px;
background-color: #F5F5F5;
font-weight: bold;
text-align: center;
}
.cell3 {
padding: 5px;
background-color: #F5F5F5;
font-weight: bold;
text-align: right;
}
.separator {
height: 2px;
background-color: #D2D2D2;
}
.stopka {
font: 9px Verdana;
color: #a5a5a5;
}
</style>
<title>Status komputerów w sieci lokalnej</title>
</head>
<body>
<?
print( '<p class=\"stopka\">' ); print( 'scan method: <b>' . $config['scanMethod'] . '</b><br>' ); printf( 'generated in <b>%0.2f sec.</b><br>', $stoper ); print( 'code by <b>BzikOS</b></p>' ); ?>
</body>
</html>
Ikonki (
compon.gif i
compoff.gif) można zrobić samemu, a bardzo leniwi mogą sobie pobrać te, które ja użyłem.
Skrypcik można używać i zmieniać do woli, jedyne o co proszę to o link do skryptu w przypadku użycia go

<b>[update]</b> Uwaga, skrypt przystosowany jest do sprawdzania komputerów w sieci lokalnej! Jeżeli ktoś chce sprawdzać zewnętrzne hosty, musi zwiększyć czas oczekiwania na odpowiedź (-w 10 - w przypadku pinga windowsowego; -max_rtt_timeout 10 - w przypadku nmapa), co niestety wydłuży czas sprawdzania hostów.
Czas ten podany jest w milisekundach, myślę, że w przypadku zewnetrznych hostów trzeba by ustawić go na co najmniej 200 ms.