Gå til innhold

Pinge IP'er - oppe/nede?


Anbefalte innlegg

Hei!

 

Skulle hatt et script som pinger noen iper som jeg har i en .txt fil hvert kvarter. Så den svarer med enten oppe, eller nede hvis den ikke svarer.

 

Noe lignende dette:

http://www.ph-status.com/

 

Vil altså ikke at den pinger alle når man går inn på siden, men at den kun pinger hver IP én gang hvert kvarter.

Er snakk om omtrent 150 IPer.

 

 

 

Noen som har et forslag? (:

Lenke til kommentar
Videoannonse
Annonse

Må det gjøres i php? Det kan gjøres på en annen måte i linux. Kanskje ikke enklere, men det er en annen måte...

Du kan enkelt lage en php fil som looper over ip adressene med passthru

while ($ip = $iterator->getNext()) {
passthru("ping -c 3 -p 3 -n -q $ip");
}

og legg til i /etc/crontab at den skal kjøres hvert kvarter

0,15,30,45 * * * * www-data php -f /path/script.php > /path/script.txt

 

Deretter kan du lese og behandle resultatet uavhengig om noen besøker siden eller ikke.

Du bør kanskje cache resultatet av parsingen (og sammenligne cache tiden med modifikasjonstiden på resultatsfilen).

 

2+ script vil ikke forsøke å kjøre pingene samtidig.

En eller flere bruker vil ikke måtte vente mens du pinger alle serverne.

Men denne vil kjøre hvert 15 min selv om noen besøker siden eller ikke.

Lenke til kommentar

Takk for forslag!

Ikke dumt det siste der nei, men serveren kjører desverre windows.

 

Har testet litt med batch og har fått den til å skrive ut dette til en fil:

 

AP: xx.xxx.x.x AP000a Siste svar: 21:48:19,57 Status: oppe

AP: xx.xxx.x.x AP000b Siste svar: 21:48:26,60 Status: nede

AP: xx.xxx.x.x AP000b Siste svar: 21:48:30,00 Status: oppe

AP: xx.xxx.x.x AP000b Siste svar: 21:48:33,37 Status: oppe

AP: xx.xxx.x.x AP000a Siste svar: 21:48:36,75 Status: oppe

 

Men skulle gjerne hatt det litt mer oversiktlig når jeg skal se det på websia.

Klarte ikke å få det inn i en tabell heller =\

Lenke til kommentar
Takk for forslag!

Ikke dumt det siste der nei, men serveren kjører desverre windows.

 

Har testet litt med batch og har fått den til å skrive ut dette til en fil:

 

AP: xx.xxx.x.x AP000a Siste svar: 21:48:19,57 Status: oppe

AP: xx.xxx.x.x AP000b Siste svar: 21:48:26,60 Status: nede

AP: xx.xxx.x.x AP000b Siste svar: 21:48:30,00 Status: oppe

AP: xx.xxx.x.x AP000b Siste svar: 21:48:33,37 Status: oppe

AP: xx.xxx.x.x AP000a Siste svar: 21:48:36,75 Status: oppe

 

Men skulle gjerne hatt det litt mer oversiktlig når jeg skal se det på websia.

Klarte ikke å få det inn i en tabell heller =\

 

du kan gjøre det samme i windows. i stedenfor crontab kan du bruke schedule..

bare pek på php exe fila med path til php fila

Lenke til kommentar
<?php
// Made by ITSBTH, based on code from http://www.planet-source-code.com/vb/scripts/ShowCode.asp?lngWId=8&txtCodeId=1786


// Checksum calculation function
function icmpchecksum($data)
{
if(strlen($data) % 2)
	$data .= "\x00";

$bit = unpack('n*', $data);
$sum = array_sum($bit);

while($sum >> 16)
	$sum = ($sum >> 16) + ($sum & 0xffff);

return pack('n*', ~$sum);
}

function ping($dest, $data = "DATAHEREPLOX"){
$tpackage = "\x08\x00\x00\x00\x00\x00\x00\x00" . $data;
$package = "\x08\x00" . icmpchecksum($tpackage) . "\x00\x00\x00\x00" . $data;

if(!$socket = socket_create(AF_INET, SOCK_RAW, 1))
	return false;

if(!socket_connect($socket, $dest, null))
	return false;

$startTime = microtime(true);

if(!socket_send($socket, $package, strlen($package), 0))
	return false;

if(socket_read($socket, 255))
	$ret = microtime(true) - $startTime;
else
	return false;

socket_close($socket);
return $ret;
}
?>

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...