Ankündigung

Einklappen
Keine Ankündigung bisher.

PC´s via PHP anpingen und darstellen

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • PC´s via PHP anpingen und darstellen

    Hey Leute,

    bin ganz frisch hier und habe direkt mal eine Einsteiger Frage

    und zwar folgendes - ich mach gerade für die Uni nen Projekt und ein Teil davon ist, über einen Webapp (Apache über Raspberry Pie) + PHP mehrere Server im lokalen Netz anzupingen um deren Online / Offline Status zu überprüfen. Jetzt hab ich mal bisschen rumgegoogelt und bin habe diese Seite mit folgenden PHP Skript gefunden, welches laut Beschreibung genau das macht, was ich mir wünsche.

    https://www.informationsarchiv.net/topics/13689/

    ..und natürlich funktioniert es nicht so wie es sollte - sonst wär ich ja jetzt nicht hier bei euch gelandet


    hab den Quellcode in 1zu1 in eine Datei namens ping.php kopiert und in mein Apache Projekt Verzeichnis gepackt.

    Wenn ich das Skript nun allerdings über einen Webbrowser aufrufe bekomme nur eine eine leere weiße Seite angezeigt, ohne Fehlermeldung oder Sonstiges.


    da ich nun überhaupt keine Ahnung habe woran das liegt, geschweige denn wie ich das beheben kann, bin ich nun auf eure Hilfe angewießen

    Andere von mir erstellte Skripte funktionieren übrigens einwandfrei, am Apache sollte es also nicht liegen.

    Wäre euch sehr dankbar wenn ihr ein paar Tipps für mich habt, oder eventuell sogar ein anderes Skript das ich mal ausprobieren könnte =)

    Vielen Dank

    Martin


    PHP-Code:
      <?php  /* Dieses Script Pingt einen oder mehrere Rechner in einem Netzwerk    an und stellt somit fest ob diese/r eingeschaltet sind/ist oder nicht.    Dafür muss natürlich auf dem entsprechenden Computer auf dem das Script    laufen soll ein Webserver mit PHP installiert sein. ;-)*/  // ---------------- KONFIGURATION --------------  $iparray=array("Becks-Server:192.168.0.1", "Sylvester:192.168.0.2", "Erika:192.168.0.3", "Loaner3:192.168.0.4", "Accesspoint:192.168.0.10");  // Einfach den Computernamen, Doppelpunkt und die IP Adresse (oder Namen im Netzwerk) schreiben. // Beispiel--> "Arbeitszimmer:192.168.0.2", "Server:192.168.1.1"  // ----------- ENDE DER KONFIGURATION -----------   function ping($PC,$ip) { //Pingoptionen für Linux Rechner   $cmd=shell_exec("ping -c 1 -t 2 $ip"); // Ping mit counter=1 und timeout=2 (wartet zwei millisek. auf Antwort)   $checker=explode(",",$cmd); // Array erstellen um auf Received = 1 oder Received = 0 checken zu können.      if (eregi ("0", $checker[1], $out))   {       $connectionstatus="<img src="off.gif">";       $text="ist offline";   } // Check ob "0" im Array an 1. Stelle enthhalten.      if (eregi ("unknown", $checker[0], $out))   {       $connectionstatus="<img src="err.gif">";       $text="ist unbekannt / hat einen unbekannten Status";   } // Check ob "unknown" im Array an 0. Stelle enthalten.      if (eregi ("1", $checker[1], $out))   {       $connectionstatus="<img src="on.gif">";       $text="ist online";   } // Check ob "1" im Array an 1. Stelle enthhalten.    $output="$connectionstatus [$ip] <b>$PC $text.</b><br><br>";   return $output; // Die Ausgabevariable als Rückgabewert. }  while(list($k,$v)=each($iparray))  // Alle Computer "durchpingen" ;-) {  $pcip=explode(":",$v); // Rechnername und IP in ein Array schreiben (Bei ":" erfolgt Trennung)  $output=ping($pcip[0],$pcip[1]); // Funktion mit den Daten des Arrays aufrufen  echo $output; // Fertig } ?>

  • #2
    Eine leere Seite deutet darauf hin, dass ein Fehler aufgetreten ist. In dem Fall schaut man ins Error-Log.

    Kommentar


    • #3
      Mal am Rande:
      Wenn du zukünftig hier Code einfügst, achte bitte darauf, dass er eingerückt und nicht horizontal scrollbar dargestellt wird. Mit den meisten Editoren gibt es zudem kein Problem bei anderen muss du da eben nachhelfen.

      Kommentar


      • #4
        Beim groben durchscrollen des Codes ist mir die Verwendung der Funktion eregi() aufgefallen - diese Funktion gibt es seit PHP 7 nicht mehr, das Script wird deswegen mit einem Fatal Error abbrechen.

        Kommentar


        • #5
          https://php-de.github.io/jumpto/leitfaden/

          https://www.php.net/manual/de/function.eregi.php Dort roten Kasten ansehen und befolgen.

          Kommentar


          • #6
            Zitat von protestix Beitrag anzeigen
            https://www.php.net/manual/de/function.eregi.php Dort roten Kasten ansehen und befolgen.
            Nein, in dem Fall sind reguläre Ausdrücke völlig überflüssig: ein einfaches strpos() reicht hier völlig aus.

            Kommentar


            • #7
              da1000 Hast du mal auf das Datum deiner Quelle geschaut? 2005 !! Wirf es weg.

              Kommentar


              • #8
                Wow, das geht hier ja richtig flott mit den Antworten!
                vielen Dank euch =)

                also wenn ich jetzt die Funktion preg_match bzw strpos 1zu1 einbaue anstatt eregi sollte es funktionern oder?

                noch ne Frage... die .gifs Dateien müssen sich im gleichen Verzeichnis befinden wie das ping.php Skript richtig?

                PHP-Code:

                function ping($PC,$ip)
                {
                //Pingoptionen für Linux Rechner
                  
                $cmd=shell_exec("ping -c 1 -t 2 $ip"); // Ping mit counter=1 und timeout=2 (wartet zwei millisek. auf Antwort)
                  
                $checker=explode(",",$cmd); // Array erstellen um auf Received = 1 oder Received = 0 checken zu können.

                  
                if (preg_match ($checker[1], "0"$out))
                  {
                      
                $connectionstatus="<img src="off.gif">";
                      
                $text="ist offline";
                  } 
                // Check ob "0" im Array an 1. Stelle enthalten.

                  
                if (preg_match ($checker[0], "unknown"$out))
                  {
                      
                $connectionstatus="<img src="err.gif">";
                      
                $text="ist unbekannt / hat einen unbekannten Status";
                  } 
                // Check ob "unknown" im Array an 0. Stelle enthalten.

                  
                if (preg_match ($checker[1], "1"$out))
                  {
                      
                $connectionstatus="<img src="on.gif">";
                      
                $text="ist online";
                  } 
                // Check ob "1" im Array an 1. Stelle enthhalten.

                  
                $output="$connectionstatus [$ip] <b>$PC $text.</b><br><br>";
                  return 
                $output// Die Ausgabevariable als Rückgabewert.

                Kommentar


                • #9
                  PHP-Code:
                  $cmd=shell_exec("ping -c 1 -t 2 $ip"); 
                  shell befehle immer mit vollen Pfad, so hab ich das mal gelernt.
                  anstatt preg_match lässt sich auch der returnwert von ping auswerten:

                  antwort 17:
                  https://stackoverflow.com/questions/...ing-the-result

                  Kommentar


                  • #10
                    Zitat von tomBuilder Beitrag anzeigen
                    PHP-Code:
                    $cmd=shell_exec("ping -c 1 -t 2 $ip"); 
                    shell befehle immer mit vollen Pfad, so hab ich das mal gelernt.
                    Jap, das kann ansonsten als potentieller Angriffsvektor dienen. Viel wichtiger ist aber, die Argumente die in den Befehl eingesetzt werden, strikt zu validieren und/oder zu escapen. (php.net/escapeshellarg)
                    Wenn dort als IP irgendwas rein rutscht in Form von "127.0.0.1; [hier code für reverse shell einsetzen]" ist das "ungünstig". Es spielt dabei keine Rolle, ob aktuell die IP Adressen nur aus einem Array im Code kommen. Code ändert sich. Code wird kopiert.

                    Kommentar


                    • #11
                      Wo du recht hast erc

                      ich ging davon aus, das validierung der ip aulösen und möglw.. des hostnamens an anderer stelle passiert;
                      bei einem pingtool möchte iuU auchb wissen ob es zu einem dns error gekommen oder die domain abgemeldet ist .

                      aber du hast recht, code wird copiert

                      Kommentar


                      • #12
                        Hey Leute,
                        könnt ihr mir nochmal kurz helfen bitte?

                        ich hab das jetzt mit preg_match und strpos ausprobiert, aber leider funktioniert es immer noch nicht so wie gewollt.

                        Meinem Gefühl nach ist der Fehler irgendwo beim Einlesen der Ping Antwort aus der Shell in die $checker Variable.

                        Wär echt super wenn ihr mir da nochmals helfen könntet!

                        PHP-Code:

                        <!doctype html>
                        <html>
                        <head>
                            <title>Ping ()</title>

                        </head>
                        <body>
                        <?php

                        /**
                         * Ping via exec
                         *
                         * @param $host
                         * @return bool
                         */

                        function ping($host)
                        {
                            
                        exec(sprintf('ping -c 1 -w 5 %s'escapeshellarg($host)), $res$rval);
                            return 
                        $rval === 0;    
                        }

                        /* check if the host is up. &host can also be an ip address */
                        $host '192.168.2.140';
                        $up ping($host);

                        /* optionally display status */
                        $faClass = ($up) ? 'fa-check-square-o' 'fa-square-o';
                        echo 
                        sprintf('<i class="fa %s"></i> %s'$faClass$host);

                        ?>

                        </body>

                        </html>

                        Kommentar

                        Lädt...
                        X