[RISOLTO] trasferire ping su una pagina dinamica

di il
6 risposte

[RISOLTO] trasferire ping su una pagina dinamica

Salve a tutti,
vi spiego cosa mi piacerebbe fare: ho una tabella mysql col la lista degli IP locali; in php la interrogo e hoo delle pagine dinamiche. Adesso vorrei inserire lo stato degli IP (se pingano o no).
Avete qualche idea?

Ho visto cmq il programma fing che crea una pagina html sotto forma di tabella semplice oppure in csv, quindi (ma non so come si fa) si potrebbe leggere questo file e da lì vedere se un certo IP è acceso e pinga oppure no.. e addirittura vedere se ci sono nuovi IP ancora non messi su mysql.

La mia idea come vi sembra? è fattibile? Una mano per provarla a fare?

Grazie

6 Risposte

  • Re: [RISOLTO] trasferire ping su una pagina dinamica

    Se ho ben compreso, tu hai una serie di IP che vuoi pingare, e vuoi generare dinamicamente lo stato di questi server.

    Quello che farei io è mischiare questa tua idea con quanto presente , quindi: 1) aggiungere un campo nella tabella mysql "stato" (può essere un tinyint ad esempio), 2) avere uno script che fa il ping ai vari IP ed aggiorna il campo stato nel database, 3) un'altro script che genera la pagina HTML pescando i dati dal database e mostrandoli a chi li deve vedere.
  • Re: [RISOLTO] trasferire ping su una pagina dinamica

    Rispondo di qua, perché è meglio evitare di "invadere" i topic altrui (almeno questo è quello che suggerisco di solito dove faccio supporto ).

    c3n2o ha scritto:


    Sto provando a fare uno script di prova per vedere se un IP è raggiungibile.. questo va bene?
    Se intendi quello nel messaggio https://www.iprogrammatori.it/forum-programmazione/php/testare-server-con-curl-t25213.html?sid=2da8f1c9f8898d2eff43484591958a8a#p8541664
    
    $curl = curl_init();
    $timeout = 40;
    curl_setopt ($curl, CURLOPT_CONNECTTIMEOUT, $timeout);
    curl_setopt($curl, CURLOPT_PROXY, $ip_server);
    $risultato = curl_exec ($curl);
    curl_close ($curl);
    Dovrebbe andare.

    c3n2o ha scritto:


    Inoltre, ho provato a stampare il $risultato, ma non mi esce nulla..
    echo "Risultato: ".$risultato;
    Come faccio a capire dov'è l'errore? è un valore booleano?
    Come da documentazione: http://php.net/manual/en/function.curl-exec.ph
    curl_exec ritorna un boolean, quindi vero o falso.
    Se non stampa niente è perché probabilmente ritorna falso (quindi errore).
    Magari togli la parte relativa al timeout.
    Poi, per gli errori di cURL, puoi usare:
    http://php.net/manual/en/function.curl-error.ph
    che ti ritorna la stringa dell'errore incontrato.
  • Re: [RISOLTO] trasferire ping su una pagina dinamica

    Mi dice che tutti gli IP sono spenti.. il codice che ho modificato è corretto?
    while($cicle=mysql_fetch_array($query)){
        $url=$cicle['Indirizzo_IP'];
        $ch=curl_init();
        $timeout = 5;
        curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
        curl_setopt($ch, CURLOPT_PROXY, $url);
        $risultato = curl_exec ($ch);
        if(!curl_errno($ch)) {
            echo "<tr><td style=\"background-color:green\">";
        } else {
            echo "<tr><td style=\"background-color:red\">";
    
        }
        curl_close($ch);
    Mi viene il dubbio che non devo cercare l'IP come proxy.. (con l'opzione CURLOPT_PROXY)..

    E poi ho pensato che pingan do uno alla volta, la pagina in php (visto che possono essere anche più di 10 IP) verrebbe caricata troppo lentamente..

    Forse è meglio usare Fing, fargli creare un file e leggere quello con fopen()..

    ..la ricerca continua
  • Re: [RISOLTO] trasferire ping su una pagina dinamica

    Come ho scritto da qualche parte (o almeno credo di aver scritto), non sono un grande esperto di cURL, ma leggendo dalla documentazione:
    http://php.net/manual/en/function.curl-init.ph
    l'url (e quindi l'IP nel tuo caso) va in curl_init e non come proxy (che in effetti non ha alcun senso).
  • Re: [RISOLTO] trasferire ping su una pagina dinamica

    In rete ho trovato uno script che sembrerebbe funzionare, ma quando faccio un ciclo while, sembrerebbe che l'istruzione curl_errno($ch) venga considerata una sola volta.. cioè: se faccio una paginetta con lo script e gli do io un valore alla volta lo script funziona, se lo metto nella mia pagina con ciclo while ho dei risultati a caso..

    Ecco lo script completo:
    while($cicle=mysql_fetch_array($query)){
        $url=$cicle['Indirizzo_IP'];
        $ch = curl_init($url);
        curl_setopt($ch, CURLOPT_NOBODY, true);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
        curl_exec($ch);
        if(!curl_errno($ch)) {
            echo "<tr><td style=\"background-color:green\">";
        } else {
            echo "<tr><td style=\"background-color:red\">";
        }
        curl_close($ch);
        echo $url."</td>";
        ... //Chiama i campi della tabella
        echo "<td>".$cicle['Note']."</td></tr>";
    }
    ?>
    Forse il problema potrebbe essere che oltre a pingare IP con server web pingo anche dei comuni PC con windows7 dove non c'è servizio HTTP?
  • Re: [RISOLTO] trasferire ping su una pagina dinamica

    Ho quasi risolto, cambiando approccio:
    Prima di tutto uso il programma FING per avere un file csv, e lo converto eliminando delle colonne che non mi servono:
    fing -n 192.168.0.0/16 -d false -o table,csv,test.csv
    awk -F ";" '{print $1, $3}' test.csv >ip.csv
    Poi apro il file con fopen(), lo splitto con explode e cerco ciò che mi interessa:
    while($cicle=mysql_fetch_array($query)){
        $url=$cicle['Indirizzo_IP'];
            $file = "ip.all";
            $output="spento";
            $fr = fopen($file, 'r');
            while (!feof($fr)) {
                // estraggo la riga
                $riga = fgets($fr);
                // separo la riga
                $split = explode(" ", $riga);
                // ricavo il valore
                $ip = $split[0];
               
                if ($ip == $url) {
                    // creo l'output
                    $output = $split[1];
                    break;
                }
            }
            // chiudo il file
            fclose($fr);
    
    
    
        if(strpos($output, "up") === false) {
            echo "<tr><td style=\"background-color:red\">";
        } else {
            echo "<tr><td style=\"background-color:green\">";
        }
        echo $url."</td>";
    Così funziona
    Adesso devo mettere l'esecuzione automatica dei due comandi iniziali..
Devi accedere o registrarti per scrivere nel forum
6 risposte