Ich verwende ein ähnliches PHP-Shell-Skript, das vom Terminal aus gestartet wurde, um zu testen, ob ein oder mehrere Geräte außer Betrieb sind. Ich verwende es, um zu überwachen, ob eine WLAN-Brücke ausgefallen ist (wenn die MAC-Adresse von Geräten auf der anderen Seite der Brücke nicht angezeigt wird, nehmen Sie an, dass die Verbindung unterbrochen wurde):
#!/usr/bin/php <?php $MULTICAST_ADDR='192.168.99.255'; $DEVICES_TO_TEST_FOR_BRIDGE=array( // list of MACs 'XX:XX:63:f2:XX:XX', 'XX:XX:d0:ad:XX:XX', 'XX:XX:b9:eb:XX:XX' ); $SLEEP=10000000; // one sec = 1000000, sleep before reconnect while(TRUE) { usleep($SLEEP); flush(); `ping -b -c 3 -t 3 $MULTICAST_ADDR 2> /dev/null`; flush(); $res=`arp -an`; $bridgeIsOn=FALSE; echo("DEVICES:\n"); echo($res); echo("\n"); foreach($DEVICES_TO_TEST_FOR_BRIDGE as $deviceToTestForBridge) { if (strpos($res, $deviceToTestForBridge) !== false) { $bridgeIsOn=TRUE; $lastBridgeOn=time(); } } if(!$bridgeIsOn && (time()-$lastBridgeOn>5*60) ) { // If bridge is down for 5 minutes echo(" BRIDGE HAS BEEN OFF FOR LONG (".(time()-$lastBridgeOn)."s) - REQUESTING A RESTART\n"); // Do something here } }
Wie es ist, in einem Terminal zu tippen
ping -b -c 3 -t 3 192.168.99.255 2> /dev/null
Meine Geräte liegen im Bereich 192.168.99.xxx, .255 bedeutet "alle". Also ping sie alle und ignoriere die Antworten.
Und dann die arp-Tabellen mit Befehl lesen
arp -an
Der Rest des Codes besteht darin, die Liste mit den gewünschten Geräten zu vergleichen. Am Ende der Schleife ist $ bridgeIsOn entweder WAHR oder FALSCH, und $ lastBridgeOn hat die Zeit, zu der es zuletzt gesehen wurde, sodass ich Entscheidungen treffen und Dinge ausführen kann. In Ihrem Fall müssen Sie die Logik umkehren. Mit $ bridgeIsOn ist Ihr Telefon im Netzwerk:if($bridgeIsOn) { /* do something */}
Ich speichere das Skript als "Monitorbridge", mache es ausführbar und starte es in einem Terminal
./monitorbridge
Das Skript bleibt so lange aktiv, bis ich das Terminal schließe oder ^ C eingebe. Sie können es natürlich beim Login oder beim Booten starten.