php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 29-02-2016, 17:27
Iv0ry
 Registrierter Benutzer
Links : Onlinestatus : Iv0ry ist offline
Registriert seit: Jun 2010
Beiträge: 5
Iv0ry befindet sich auf einem aufstrebenden Ast
Standard Übersicht lokales Netzwerk

Hallo Leute, im Rahmen meines Lehramt Referendariats bin ich an einer Schule im Computerraum eingesetzt. Ich möchte den Schülern Linux (Ubuntu) und die Grundlagen von Html und PHP beibringen. Leider ist mein Kenntnisstand in PHP derzeit ebenfalls nur Grundwissen (aber ich arbeite daran). Um die 15 Computer hierbei besser (Netzwerkerreichbarkeit und Webserverstatus) Überwachen zu können. Es geht dabei nicht darum die Schüler zu überwachen, sondern nur die Erreichbarkeit (Ping + http Status) um die Wartung weiter zu minimieren.

Dazu mein Plan:

  • Shellscript, was alle 15 Minuten (cronjob) alle 15 Computer anpingt und das "Ergebnis" in eine Textdatei schreibt.
  • Übersichtseite (html/php) auf meinem Computer, der den aktuellen Status wiedergibt.


Das Shellscript werde ich schon hinbekommen (nehme aber hierbei auch gern Ideen entgegen).


Ausganslage:

CompStat.txt (ich dachte an Zahlen untereinander 1 = ok | 0 = nicht erreichbar). Die Computer haben die IP-Adresse: 192.168.1.10/25

Code:
1
0
1
1
etc ..
Mein Script bisher:

PHP-Code:
<?php $Comparray file("CompStat.txt"); ?>
weiter unten in der Tabelle jeweils:

PHP-Code:
<td align="center"><img src="img/pc1.png" width="220" height="100" alt=""/><br> 

Ping: 
<?php 

if ($Comparray[0] == 1) { echo '<img src="img/online.png" />'; } else { echo '<img src="img/Offline.png" />'; } ?> 

Webserver: 
<?php 

$url 
"http://192.168.1.10"$online = @fsockopen ("$url"80); if (!$online) { echo '<img src="img/online.png" />'; } else { echo '<img src="img/Offline.png" />'; }; @fclose($online); 
?> 
</td>
Und dann erneut das selbe (eben 15 x). Gibt es da einen eleganteren Weg die Textdatei auszulesen und es auszugeben. Darüber hinaus scheint der "Webservercheck" nur ein mal die weiteren IP'S werden auch wenn diese Offline sind als Online angezeigt. Ich hoffe Ihr könnt mir hierbei weiterhelfen.

Gruß & Danke!
Iv0ry
Mit Zitat antworten
  #2 (permalink)  
Alt 01-03-2016, 00:34
Benutzerbild von mermshaus mermshaus
 Registrierter Benutzer
Links : Onlinestatus : mermshaus ist offline
Registriert seit: Jun 2009
Beiträge: 451
mermshaus wird schon bald berühmt werden
Standard

PHP-Code:
<?php

function getData($file$prefix$startIp)
{
    
$ret = array();

    
$data file($fileFILE_IGNORE_NEW_LINES);

    
$cnt count($data);
    for (
$i 0$i $cnt$i++) {
        
$ip $prefix . ($startIp $i);

        
$ping = ($data[$i] === '1');

        
$http false;
        if (
$ping) { // Wenn es nicht auf ping antwortet, wird es wohl aus sein
            
$errno 0;
            
$errstr '';
            
$fp = @fsockopen($ip80$errno$errstr1);
            if (
false !== $fp) {
                
$http true;
                
fclose($fp);
            }
        }

        
$ret[] = array(
            
'ip'   => $ip,
            
'ping' => $ping,
            
'http' => $http
        
);
    }

    return 
$ret;
}



// Nur für Testzwecke. Lokal einfach: $file = 'CompStat.txt';
$content ''; for ($i 0$i 15$i++) { $content .= mt_rand(01) . "\n"; }
$file    'data://text/plain;base64,' base64_encode($content);

$prefix  '192.168.1.';
$startIp 10;

$data getData($file$prefix$startIp);

// Hier beliebig formatiert ausgeben

var_dump($data);
Die Ausgabe sollte aber prinzipiell auch ohne Zwischenspeichern der Ping-Resultate und sehr viel schneller ermittelt werden können.

- PHP: curl_multi_exec - Manual
Mit Zitat antworten
  #3 (permalink)  
Alt 01-03-2016, 11:00
Iv0ry
 Registrierter Benutzer
Links : Onlinestatus : Iv0ry ist offline
Registriert seit: Jun 2010
Beiträge: 5
Iv0ry befindet sich auf einem aufstrebenden Ast
Standard

Hallo Mermshaus,

danke für Deine Mühe!


Ich muss gestehen, dass ich leider nur die Hälfte vom Script bzw. der Funktion verstanden habe. Aber ich arbeite daran.


gibt aus:
(grün = stimmt | rot = nicht korrekt)

Code:
{ [0]=> array(3) { ["ip"]=> string(11) "192.168.1.1" ["ping"]=> bool(false) ["http"]=> bool(false) 
} [1]=> array(3) { ["ip"]=> string(11) "192.168.1.2" ["ping"]=> bool(false) ["http"]=> bool(false) 
} [2]=> array(3) { ["ip"]=> string(11) "192.168.1.3" ["ping"]=> bool(false) ["http"]=> bool(false) 
} [3]=> array(3) { ["ip"]=> string(11) "192.168.1.4" ["ping"]=> bool(true) ["http"]=> bool(true) 
} [4]=> array(3) { ["ip"]=> string(11) "192.168.1.5" ["ping"]=> bool(true) ["http"]=> bool(true) 
} [5]=> array(3) { ["ip"]=> string(11) "192.168.1.6" ["ping"]=> bool(false) ["http"]=> bool(false) 
} [6]=> array(3) { ["ip"]=> string(11) "192.168.1.7" ["ping"]=> bool(false) ["http"]=> bool(false) 
} [7]=> array(3) { ["ip"]=> string(11) "192.168.1.8" ["ping"]=> bool(true) ["http"]=> bool(false) 
} [8]=> array(3) { ["ip"]=> string(11) "192.168.1.9" ["ping"]=> bool(false) ["http"]=> bool(false) 
} [9]=> array(3) { ["ip"]=> string(12) "192.168.1.10" ["ping"]=> bool(false) ["http"]=> bool(false) 
} [10]=> array(3) { ["ip"]=> string(12) "192.168.1.11" ["ping"]=> bool(true) ["http"]=> bool(true) 
} [11]=> array(3) { ["ip"]=> string(12) "192.168.1.12" ["ping"]=> bool(false) ["http"]=> bool(false) 
} [12]=> array(3) { ["ip"]=> string(12) "192.168.1.13" ["ping"]=> bool(true) ["http"]=> bool(false) 
} [13]=> array(3) { ["ip"]=> string(12) "192.168.1.14" ["ping"]=> bool(true) ["http"]=> bool(false) 
} [14]=> array(3) { ["ip"]=> string(12) "192.168.1.15" ["ping"]=> bool(false) ["http"]=> bool(false)
Wenn ich die Seite mittels 'F5' (Refresh) neu lade, verändern sich die Werte jedes mal. Irgendwie läuft da
aber etwas falsch (namp zu dem Zeitpunkt)? Mit Multidimensional Arrays habe ich bisher leider noch nicht
gearbeitet. 'var_dump($data);' war ja die Ausgabe der dump. Ich dachte die 1 Sek Timeout sind das Problem
und habe mit 3, 8 und 15 Sekunden aber leider die selben seltsamen Ergebnisse erhalten.

Gruß
Iv0ry

Geändert von Iv0ry (04-03-2016 um 00:51 Uhr)
Mit Zitat antworten
  #4 (permalink)  
Alt 02-03-2016, 22:14
Benutzerbild von mermshaus mermshaus
 Registrierter Benutzer
Links : Onlinestatus : mermshaus ist offline
Registriert seit: Jun 2009
Beiträge: 451
mermshaus wird schon bald berühmt werden
Standard

Zitat:
Wenn ich die Seite mittels 'F5' (Refresh) neu lade, verändern sich die Werte jedes mal.
Ich erzeuge in dem Script zufällige Testdaten für den Inhalt der „Ping“-Datei, damit der Beispielcode auch lauffähig ist, ohne eine solche Datei erstellen zu müssen. Das ist aber eben nur für das Beispiel.

Ersetze in deinem Fall einfach…

PHP-Code:
$content ''; for ($i 0$i 15$i++) { $content .= mt_rand(01) . "\n"; }
$file    'data://text/plain;base64,' base64_encode($content); 
…durch deine Datei. Zum Beispiel:

PHP-Code:
$file 'CompStat.txt'


Ansonsten ist es für mich schwierig, ohne größere Umstände mehr zu weiteren Verbesserungen zu sagen. Das fängt schon damit an, dass du vermutlich Windows nutzt. (?)
Mit Zitat antworten
  #5 (permalink)  
Alt 03-03-2016, 10:14
Iv0ry
 Registrierter Benutzer
Links : Onlinestatus : Iv0ry ist offline
Registriert seit: Jun 2010
Beiträge: 5
Iv0ry befindet sich auf einem aufstrebenden Ast
Standard

Danke Mermshaus für Deine Rückmeldung!

Zitat:
Zitat von mermshaus Beitrag anzeigen
Ansonsten ist es für mich schwierig, ohne größere Umstände mehr zu weiteren Verbesserungen zu sagen. Das fängt
schon damit an, dass du vermutlich Windows nutzt. (?)
Nein, wie im ersten Post beschrieben, laufen alle Computer unter Ubuntu (Server 14.04 LTS mit Apache2, MySQL und
PHP 5). Und ich habe mir schon den Kopf zerbrochen, wofür du 'mt_rand' (Zufallszahlengenerator) verwendet hast und
bin einfach nicht dahinter gekommen, dass es zum Füttern der Werte für das Beispiel Script genutzt hast. Das macht
dann natürlich Sinn.

Okay, mit Angabe der Textdatei ($file = 'CompStat.txt' sind die Werte nun (fast) korrekt. Fast, weil dass Script
geht ja davon aus, dass wenn ein Computer auf einen Ping nicht reagiert, auch der Webserver nicht aktiv ist, sofern
ich Folgendes korrekt verstanden habe:

PHP-Code:
$ping = ($data[$i] === '1');
$http false
Es ist ja durchaus möglich, dass ein Computer nicht auf einen Ping reagiert (Timeout im Script oder mit den Iptables
rumgespielt) aber das der Webserver dennoch erreichbar ist. Obwohl es vermutlich Sinn macht, keine Zeit (Scriptlaufzeit)
zu investieren, wenn ein Gerät schon nicht auf einen Ping reagiert. Die Funktion greift also auf meine Textdatei für die
Ping-Werte (vom Shellscript) für die Ausgabe zu, das ist schon mal sehr gut! Die Frage wäre noch, wie kann ich die
Ausgabe gestalten, also wie greife ich auf die einzelnen Werte des Arrays zu, um diese bspw. mit meinen beiden
Bildern (up/down) auszugeben?

Ich hatte es mittels "echo $data[3][ip];" versucht, was auch korrekt die IP-Adresse ausgibt. Jedoch mit
"echo $data[3][ping];" kommt keine Ausgabe.


EDIT:

Ist es dann nicht schneller (einfach) die IP-Adresse(n) direkt anzusprechen(?)
Ist nur eben nicht sehr elegant.

Beispiel für einen Computer:

PHP-Code:
$fp fsockopen("192.168.1.4",80,$errno,$errstr,2);
if(!
$fp
{ echo 
'<img src="img/Offline.png" />';
} else 
{ echo 
'<img src="img/online.png" />'
}

if (
$Comparray[4] == 1
{ echo 
'<img src="img/online.png" />'
} else { 
echo 
'<img src="img/Offline.png" />'; } 
Gruß
Iv0ry

Geändert von Iv0ry (04-03-2016 um 01:02 Uhr)
Mit Zitat antworten
  #6 (permalink)  
Alt 05-03-2016, 23:46
Benutzerbild von mermshaus mermshaus
 Registrierter Benutzer
Links : Onlinestatus : mermshaus ist offline
Registriert seit: Jun 2009
Beiträge: 451
mermshaus wird schon bald berühmt werden
Standard

Habe noch mal was mit nmap gebastelt:

PHP-Code:
<?php

function getOnlineHosts($range)
{
    
$cmd 'nmap -sn -n -oX - ' $range;

    
$data shell_exec($cmd);

    
$doc = new DOMDocument('1.0''UTF-8');
    
$doc->loadXML($data);

    
$xpath = new DOMXPath($doc);

    
$hosts = array();

    foreach (
$xpath->query('/nmaprun/host[status[@state="up"]]/address/@addr') as $attr) {
        
$hosts[] = $attr->value;
    }

    return 
$hosts;
}

function 
getOnlineHostsWithOpenPort($range$port)
{
    
$cmd 'nmap -p ' $port ' -n -oX - --open ' $range;

    
$data shell_exec($cmd);

    
$doc = new DOMDocument('1.0''UTF-8');
    
$doc->loadXML($data);

    
$xpath = new DOMXPath($doc);

    
$hosts = array();

    foreach (
$xpath->query('/nmaprun/host/address/@addr') as $attr) {
        
$hosts[] = $attr->value;
    }

    return 
$hosts;
}

$rangePing '192.168.178.0-50';
$hostsPing getOnlineHosts($rangePing);

$rangeHttp implode(' '$hostsPing);
$hostsHttp getOnlineHostsWithOpenPort($rangeHttp80);

$s '<table>' "\n";

for (
$n 0$n <= 50$n++) {
    
$host '192.168.178.' $n;
    
$s .= '  <tr>' "\n";
    
$s .= '    <td>' $host '</td>' "\n";
    
$s .= '    <td>' . ((in_array($host$hostsPingtrue)) ? 'online' '-') . '</td>' "\n";
    
$s .= '    <td>' . ((in_array($host$hostsHttptrue)) ? 'online' '-') . '</td>' "\n";
    
$s .= '  </tr>' "\n";
}

$s .= '</table>' "\n";

echo 
$s;
Läuft bei mir lokal in etwa 2 Sekunden.

Was „reagiert nicht auf Ping, aber hat Webserver“ angeht:

PHP-Code:
$range '192.168.178.0-50';

$hostsPing getOnlineHosts($range);
$hostsHttp getOnlineHostsWithOpenPort($range80); 
Läuft bei mir auch noch schnell genug. Aber keine Ahnung, was in deinem Kontext der Usecase dazu sein soll. HTTP-Server kann man sicher genauso verstecken (oder auf einen anderen Port legen), wenn man will. Wenn du von derlei Manipulationen ausgehst, kannst du es mit der Übersicht vermutlich gleich lassen.



PS: Vermutlich kriegt man die Daten insgesamt auch irgendwie vom Router(?). Netzwerkadministration ist nicht so wirklich mein Gebiet.

Geändert von mermshaus (06-03-2016 um 00:26 Uhr)
Mit Zitat antworten
  #7 (permalink)  
Alt 06-03-2016, 11:41
Iv0ry
 Registrierter Benutzer
Links : Onlinestatus : Iv0ry ist offline
Registriert seit: Jun 2010
Beiträge: 5
Iv0ry befindet sich auf einem aufstrebenden Ast
Standard

Wow, danke für Deine erneute Mühe.



Ja, das Script läuft sehr gut (Danke!!). Die einzige Frage, die ich übrig habe ist, wie ich diese Auslesen/Ausgeben kann. Bei Deinem ersten Script habe ich die Ausgabe dann noch hinbekommen, es war ja (hoffe das war richtig?):

PHP-Code:
echo $data[0][ip];
if (
$data[0][ping] == true) { echo '<img src="img/1.png" />'; } else { echo '<img src="img/0.png" />'; }
if (
$data[0][http] == true) { echo '<img src="img/1.png" />'; } else { echo '<img src="img/0.png" />'; } 
Wie komme ich nun an die Daten im neuen Script? Mit einem Ähnlichen Syntax habe ich es leider nicht geschafft. Zumal das Script ja nur die Werte im Array zurück liefert, die auch erreichbar waren ("hostsPing" sowie "hostsHttp"). Wie kann ich nun die darstellen bzw. abfragen, die nicht erreichbar waren?

Ich hatte es folgendermaßen probiert:

PHP-Code:
if ($hostsPing[0][hostsPing] == true) { echo '<img src="img/1.png" />'; } else { echo '<img src="img/0.png" />'; }
if (
$hostsHttp[0][hostsHttp] == true) { echo '<img src="img/1.png" />'; } else { echo '<img src="img/0.png" />'; } 
Funktioniert soweit auch, zwei Frage bleiben in meinem Kopf noch offen, in welcher Variable steckt dann die eigentliche IP-Adresse für die Ausgabe ("$hosts" war es nicht) und wie kann ich die Computer darstellen, die nicht erreichbar sind? Denn im Array finde ich ja nur die, die auch erreichbar waren, oder?

Meine Tabelle für die Auswertung (noch ohne PHP) sieht folgendermaßen aus (gekürzt auf 5 Computer). Hinter "Ping:" und "Webserver:" wollte ich dann jeweils die kleine Ausgabe packen (wie im Code hier drüber zu sehne ist). Oder ist dies erneut ein Denkfehler meinerseits?

Code:
<!DOCTYPE html>
<html lang="de">
    <head>
        <meta charset="utf-8">
        <title>.:ComputerTEST:.</title>
        <link rel="shortcut icon" href="favicon.ico">
        <link rel="stylesheet" href="computer.css">
</head>
    <body>
<table width="80%" border="1" align="center">
                      <tbody>
                        <tr>
                          <td align="center"><h5><img src="img/pc1.png" width="220" height="100" alt=""/><br>
                          Ping:  Webserver:
                           </h5></td>
                          <td align="center"><h5><img src="img/pc2.png" width="220" height="100" alt=""/><br>
                          Ping:  Webserver:
                           </h5></td>
                          <td align="center"><h5><img src="img/pc3.png" width="220" height="100" alt=""/><br>
                          Ping:  Webserver:
                           </h5></td>
                          <td align="center"><h5><img src="img/pc4.png" width="220" height="100" alt=""/><br>
                          Ping:  Webserver:
                           </h5></td>
                          <td align="center"><h5><img src="img/pc5.png" width="220" height="100" alt=""/><br>
                          Ping:  Webserver:
                           </h5></td>
                        </tr>
         </tbody>
        </table>
    </body>
</html>

Gruß
Iv0ry
Mit Zitat antworten
  #8 (permalink)  
Alt 06-03-2016, 12:01
Benutzerbild von mermshaus mermshaus
 Registrierter Benutzer
Links : Onlinestatus : mermshaus ist offline
Registriert seit: Jun 2009
Beiträge: 451
mermshaus wird schon bald berühmt werden
Standard

Irgendwie verstehe ich das Problem nicht. Mein Code enthält doch sogar eine Ausgabe. Die müsstest du lediglich so formatieren/verändern, wie du möchtest.

Die Computer, die offline sind, sind die, die nicht online sind. Wenn du eine feste IP-Range hast, sind die exakt definiert, wenn du weißt, welche online sind.
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Gemeinsames lokales Verzeichnis danibert Off-Topic Diskussionen 2 28-07-2011 10:09
externes lokales programm starten frank7l7 PHP Developer Forum 13 24-05-2005 16:19
[JavaScript] location.href und lokales Speichern mrhappiness HTML, JavaScript, AJAX, jQuery, CSS, Bootstrap, LESS 5 04-10-2004 10:30
Lokales PHP/mySql Tool für CD andik2000 Off-Topic Diskussionen 11 18-06-2004 13:46
lokales verzeichnis ausgeben erbsland PHP Developer Forum 4 07-04-2002 18:43

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 03:05 Uhr.