[php] computer pingen *

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hallo, voor gebruik binnen een php scriptje wil ik checken of een bepaalde pc binnen mijn lokale netwerk aan of uit staat.
Ik probeer daarvoor het station te pingen en afhankelijk van het resultaat een simpele melding laten zien.
De variabelen in dit script worden uit een sql database gehaald.
Als (in de test situatie) alle 3 de pc's aanstaan werkt het, staat er echter 1 uit dan verwacht ik dat ik zie dat er 1 uit staat en 2 aan. Er gebeurt dan echter niets.
In het log bestand waar de ping resultaten in gelogd worden zie ik dit wel verschijnen.
Via de searh vind ik soortgelijke voorbeelden maar ik krijg het niet werkend.....

Wat doe ik fout?

Dit is de code die ik gebruik.

code:
1
2
3
4
5
6
7
8
9
10
$ping = exec("ping -c2 " .$ip.' 1>>/var/log/send/ping-output 2>>/var/log/send/ping-errors');
if (eregi("Unreachable", $ping)) 
    {
    echo "$compnaam staat uit!";
    }
else 
    {
    echo "$compnaam staat aan";
    }
}

Acties:
  • 0 Henk 'm!

  • Jimbolino
  • Registratie: Januari 2001
  • Laatst online: 20-09 08:54

Jimbolino

troep.com

je moet het commando ping een timeout waarde meegeven, anders blijft ie voor eeuwig hangen

edit: oeps, dit klopt niet, is alleen bij firewalls zo...

[ Voor 69% gewijzigd door Jimbolino op 11-01-2004 20:53 ]

The two basic principles of Windows system administration:
For minor problems, reboot
For major problems, reinstall


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

(jarig!)
http://nl.php.net/manual/en/function.exec.php

Ik zou es naar de output-array en return_var kijken...
Maar als je je output redirect naar een file, dan krijg je niet zomaar je output meer terug in je applicatie natuurlijk... Dan zal je ofwel die redirected-files moeten gebruiken, ofwel je aanroep moeten vervangen.

Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-09 08:50

gorgi_19

Kruimeltjes zijn weer op :9

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

  • BrZ
  • Registratie: Maart 2000
  • Laatst online: 14:15

BrZ

alleen gaat dat topic niet over pingen (ICMP echo request) maar over een soort van poortscan. Als je geen servcies draait werkt wat daar staat niet :)

Maar goed, de oorzaak zegt ACM al, $ping blijft leeg als je alle output naar files gooit ;)
(en daarnaast staat er helemaal geen unreachable in de ping output als een pc uit staat op je eigen netwerk)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
:)
met een toegevoegd -w3 gaat hij inderdaad in iedergeval verder en zie ik dat die $ping lekker leeg blijft.....

Acties:
  • 0 Henk 'm!

  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

BrZ schreef op 11 januari 2004 @ 20:51:
[...]

alleen gaat dat topic niet over pingen (ICMP echo request) maar over een soort van poortscan. Als je geen servcies draait werkt wat daar staat niet :)

Maar goed, de oorzaak zegt ACM al, $ping blijft leeg als je alle output naar files gooit ;)
(en daarnaast staat er helemaal geen unreachable in de ping output als een pc uit staat op je eigen netwerk)
Met de toevoeging hieraan dat ik [url=]in dat topic heb gespammed[/] met een ping script wat de TS van dit topic wellicht kan gebruiken ;)
Mocht je niet willen portscannen maar echt willen pingen is onderstaande methode wellicht een oplossing
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php // Pc's die worden gechecked...
$addresses = array (
        "ROUTER"                        => "192.168.1.1",
        "SPIDER008"                     => "192.168.1.12",
        "SPIDER007"                     => "192.168.1.16",
        "DHCP1"                         => "192.168.1.20",
        "DHCP2"                         => "192.168.1.21",
        "DHCP3"                         => "192.168.1.22"
);
        while (list($host, $ip) = each($addresses)){
                system("ping -c1 -w1 $ip >/dev/null", $result);
?>
                        <tr>
                                <td><?=$host?></td>
                                <td><?=$ip?></td>
                                <td><font color="<?=
($result)?'red">Offline"':'green">Online'
?></font></td>
                        </tr>
<?      } ?>
:)

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik geloof dat ik er nog steeds geen bal van begrijp....

zoals ik het lees in de manual zorgt dit
code:
1
$ping = exec("ping -c2 -w3" .$ip,$dummy,$status);

ervoor dat alle output in de array $dummy wordt weggeschreven.
Wanneer ik dan wil kijken wat ik wel terugkrijg met
code:
1
2
3
4
foreach ($dummy as $dummy)
    {
    echo "$dummy";
        }

zie ik niets.....

Iemand?

Acties:
  • 0 Henk 'm!

  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

als je in mijn voorbeeld kijkt zie je dat de output in dit geval bestaat uit een boolean. Je moet dus 'if ($dummy)' doen

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
zucht....ettelijke uren verder...

code:
1
2
3
4
5
6
7
8
9
10
11
12
blahblahblah
while ($record = mysql_fetch_assoc($werkstation_query))
{
    $compnaam=$record['naam'];
    $ip=$record['ip_adres'];

 exec("ping -c2 -w3 $ip",$results);
 $count=count($results);
for($i=0;$i<$count;$i++)
{
print "regel $i $results[$i]<br>";
}

laat me zien dat hij adres A pingt, vervolgens ping hij adres a en b, daarna pingt hij adres a,b en c.....en das dus niet de bedoeling....

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Verwijderd schreef op 11 januari 2004 @ 23:39:
zucht....ettelijke uren verder...

code:
1
2
3
4
5
6
7
8
9
10
11
12
blahblahblah
while ($record = mysql_fetch_assoc($werkstation_query))
{
    $compnaam=$record['naam'];
    $ip=$record['ip_adres'];

 exec("ping -c2 -w3 $ip",$results);
 $count=count($results);
for($i=0;$i<$count;$i++)
{
print "regel $i $results[$i]<br>";
}

laat me zien dat hij adres A pingt, vervolgens ping hij adres a en b, daarna pingt hij adres a,b en c.....en das dus niet de bedoeling....
edit:
zucht 't wordt steeds later.......$results leeg maken zal wel helpen.......

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Volgens mij klopt hij nu.....

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
while ($record = mysql_fetch_assoc($werkstation_query))
{
    $compnaam=$record['naam'];
    $ip=$record['ip_adres'];

 exec("ping -c2 -w3 $ip",$results);
// $count=count($results);

if (eregi("Unreachable", $results[1])) 
    {
    echo "$compnaam staat uit!<br>";
    unset ($results);
    }
else 
    {
    echo "$compnaam staat aan<br>";
    unset ($results);
    }

}

Althans in de situatie met mijn 3 pc'tjes lijkt het te werken......

Acties:
  • 0 Henk 'm!

Verwijderd

Wat dacht je van de while eerst afsluiten en dan pas beginnen met for loop?

al op andere manier opgelost maja...

[ Voor 70% gewijzigd door Verwijderd op 11-01-2004 23:51 . Reden: al op andere manier opgelost maja... ]

Pagina: 1