Pagina 1 di 2 12 UltimoUltimo
Visualizzazione risultati 1 fino 30 di 52

Discussione: Intercettare ip e spider

  1. #1
    Guest

    Predefinito Intercettare ip e spider

    Questo codice non funziona, non intercetta ip e spider.

    Codice PHP:
    //Riconosce che è uno spider e non lo conteggia nei +Letti
    function is_spider($agent) {
    $spider = array("googlebot", "spider", "crawler", "scooter", "yahoo! slurp", "la_archiver", "lycos", "teoma_agent", "ask jeeves", "mercator", "fast", "msnbot", "bingbot", "facebookexternalhit");
    //Qui metti gli ip che non vuoi vengano conteggiati nei +Letti
    $bannedip = array('192.187.100.154','107.170.(.*)','213.42.176.216','38.99.82.(.*)','162.243.(.*)','104.131.217.168');
    foreach(
    $bannedip as $check ) {
    if ( !
    strcmp( $_SERVER['REMOTE_ADDR'], $check))
    return
    true;
    }
    foreach (
    $spider as $value) {
    if (
    stripos(strtolower($agent), $value) !== false) {
    return
    true;
    }
    }
    return
    false;
    }
    $agent = $_SERVER["HTTP_USER_AGENT"];
    if (
    is_spider($agent)) {
    }
    ...

  2. #2
    Guest

    Predefinito

    Codice PHP:
    <?php

    $ip
    = $_SERVER['REMOTE_ADDR'];
    $agent = $_SERVER["HTTP_USER_AGENT"];

    $bot = [
    "googlebot",
    "yahoo",
    "192.66.1."
    ];

    foreach (
    $bot as $item)
    {
    if (
    stripos($agent, $item) > -1 )
    {
    // azione per bot rilevato
    print "BOT!!!";
    }
    if (
    stripos($ip, $item) > -1 )
    {
    // azione per ip rilevato
    print "BAD IP!!!";
    }
    }

    ?>

  3. #3
    Guest

    Predefinito

    Se metto così può andare? questo (.*) vuol dire "qualsiasi cosa" l'ho messo per intercettare la parte finale, perché a volte mi entrano con lo stesso ip con la parte finale diversa.

    107.170.(.*)

  4. #4
    Guest

    Predefinito

    per usare i jolly devi compilare una regex, il codice che ti ho allegato sopra

    prevede già supporto per classi di ip, semplicemente concludi la classe con l'ultimo .

    $bot = [
    "googlebot",
    "yahoo",
    "192.66.1."
    ];

    es. 192.66.1.100 soddifa la regola, cosi come 192.66.1.23,192.66.1.234, ecc

    altro esempio
    $bot = [
    "googlebot",
    "yahoo",
    "192.66."
    ];

    qui 192.66.1.100 soddifa la regola, cosi come 192.66.45.23,192.254.1.234, ecc


    nota:
    l'errore forse piu' grave del tuo codice è che stripos da 0 (aka false) se la stringa si trova all'inizio, -1 (o comunque un numero negativo) in caso di stringa non trovata, apparte quello di norma strcmp non accetta jolly/regex
    Ultima modifica di FormularioDiDrakensang : 21-10-2014 alle ore 13.35.10

  5. #5
    Guest

    Predefinito

    Se ho ben capito, gli ip vanno messi per ultimi, es:

    $bot = [
    "googlebot",
    "yahoo",
    "192.66.1.",
    "124.74.2."
    ];


    praticamente dopo l'ultimo punto dell'ip accetta qualsiasi cosa di quell'ip.

    Questo codice non deve stampare il risultato (nel primo hai messo print), deve semplicemente togliere gli spider o questi ip dalle pagine visitate, non li deve conteggiare come ip o spider che hanno visitato il mio sito.

    Come faccio a testarlo?

  6. #6
    Guest

    Predefinito

    $bot = [
    "192.66.1.",
    "googlebot",
    "124.74.2.",
    "yahoo"
    ];

    l'ordine non ha alcuna importanza

    ---
    metto print come generico segnale che la regola è stata soddisfatta

    se vuoi un risultato boolean per scelte successive

    Codice PHP:
    function isBot($agent,$ip)
    {

    $bot = [
    "googlebot",
    "yahoo",
    "192.66.1."
    ];

    foreach (
    $bot as $item)
    {
    if (
    stripos($agent, $item) > -1 )
    {
    return
    TRUE;
    }
    if (
    stripos($ip, $item) > -1 )
    {
    return
    TRUE;
    }
    }

    return
    FALSE;
    }
    // fine funzione

    ---------

    esempio uso:

    if ( isBot($agent,$ip) ) die();

    // codice conta visite


    // volendo puoi portare agent & ip dentro la funzione
    ---------

    test il modo piu' semplice è simulare $ip o $agent, quello meno semplice cambi l'user agent del tuo browser o ti fai visitare da google
    Ultima modifica di FormularioDiDrakensang : 21-10-2014 alle ore 13.45.53

  7. #7
    Guest

    Predefinito

    Ho messo così e ho tolto la mia, come faccio a testarlo, es, simulando un ip?

    Mi da errore Parse error: syntax error, unexpected '[' in /membri/gruppoalveo/visitate.php on line 46
    Ultima modifica di gruppoalveo : 21-10-2014 alle ore 14.00.08

  8. #8
    Guest

    Predefinito

    p.es

    $ip = $_SERVER['REMOTE_ADDR'];
    $agent = $_SERVER["HTTP_USER_AGENT"];

    diventa

    $ip = $_SERVER['REMOTE_ADDR'];
    $agent = $_SERVER["HTTP_USER_AGENT"];
    $ip = "uno di quelli nella lista completo però dell ultima parte";

    ----
    errore: se le virgole sono rispettate, perchè l'opzione short tag è spenta
    in tal caso no prob.
    $bot = array( ecc.

    il resto rimane tale e quale
    Ultima modifica di FormularioDiDrakensang : 21-10-2014 alle ore 14.02.41

  9. #9
    Guest

    Predefinito

    Ti ho scritto nel frattempo, mi da errore.

  10. #10
    Guest

    Predefinito

    ----
    errore: se le virgole sono rispettate, perchè l'opzione short tag è spenta
    in tal caso no prob.
    $bot = array( ecc.

    il resto rimane tale e quale

  11. #11
    Guest

    Predefinito

    Adesso mi da errore qui: Parse error: syntax error, unexpected T_ELSE in /membri/gruppoalveo/visitate.php on line 59

    function isBot($agent,$ip) {
    $bot = array("googlebot","yahoo","95.211.226.");
    foreach ($bot as $item) {
    if ( stripos($agent, $item) > -1 ) {
    return TRUE;
    }
    if ( stripos($ip, $item) > -1 ) {
    return TRUE;
    }
    }

    return FALSE;
    }

    else {
    if ($continua) {
    ...

  12. #12
    Guest

    Predefinito

    io non ho messo nessun else :)
    li da errore perchè non c'è alcun IF aperto

    per far prendere una decisione al codice in base al risultato di isBot

    per esempio:

    Codice PHP:
    if ( isBot($agent,$ip) ) die();
    oppure
    Codice PHP:
    if ( !isBot($agent, $ip) {
    // conta visite
    }
    Ultima modifica di FormularioDiDrakensang : 21-10-2014 alle ore 14.19.36

  13. #13
    Guest

    Predefinito

    Qualcosa non quadra, mi da un altro errore: Parse error: syntax error, unexpected '{' in /membri/gruppoalveo/visitate.php on line 46


    function is_spider() {
    if ( !isBot($agent, $ip) {
    $bot = array("googlebot","yahoo","95.211.226.");
    foreach ($bot as $item) {
    if ( stripos($agent, $item) > -1 ) {
    return TRUE;
    }
    if ( stripos($ip, $item) > -1 ) {
    return TRUE;
    }
    }

    return FALSE;
    }
    }
    else {
    ...

  14. #14
    Guest

    Predefinito

    l'errore perchè manca una parentesi ) ma cmq perchè stai facendo una macedonia di codice ?

    function isBot(){} è una parte a se stante, metti il suo codice dove preferisci e quando ti serve la chiami, ho anche suggerito di renderla ancora piu' atomica inserendo $agent e $ip dentro la funzione togliendoli quindi dai parametri
    Ultima modifica di FormularioDiDrakensang : 21-10-2014 alle ore 14.30.43

  15. #15
    Guest

    Predefinito

    Questi sono nella funzione, o no? $agent, $ip

    Scusa, non sono pratico, qual'è il codice giusto?

  16. #16
    Guest

    Predefinito

    in definitiva la tua pagina si presenta pressapoco cosi'

    Codice PHP:

    function isBot()
    {

    $ip = $_SERVER['REMOTE_ADDR'];
    $agent = $_SERVER["HTTP_USER_AGENT"];

    $bot = array(
    "googlebot",
    "yahoo",
    "192.66.1."
    );

    foreach (
    $bot as $item)
    {
    if (
    stripos($agent, $item) > -1 )
    {
    return
    TRUE;
    }
    if (
    stripos($ip, $item) > -1 )
    {
    return
    TRUE;
    }
    }
    return
    FALSE;
    }
    // fine funzione


    if ( !isBot() )
    {
    // conta visite
    }

    oppure

    Codice PHP:

    function isBot()
    {

    $ip = $_SERVER['REMOTE_ADDR'];
    $agent = $_SERVER["HTTP_USER_AGENT"];

    $bot = array(
    "googlebot",
    "yahoo",
    "192.66.1."
    );

    foreach (
    $bot as $item)
    {
    if (
    stripos($agent, $item) > -1 )
    {
    return
    TRUE;
    }
    if (
    stripos($ip, $item) > -1 )
    {
    return
    TRUE;
    }
    }
    return
    FALSE;
    }
    // fine funzione


    if ( isBot() )
    {
    die();
    }
    else
    {
    // conta visite
    }
    Ultima modifica di FormularioDiDrakensang : 21-10-2014 alle ore 14.36.52

  17. #17
    Guest

    Predefinito

    pagina per testare

    Codice PHP:
    function isBot()
    {

    $ip = $_SERVER['REMOTE_ADDR'];
    $agent = "googlebot version 66";

    $bot = array(
    "googlebot",
    "yahoo",
    "192.66.1."
    );

    foreach (
    $bot as $item)
    {
    if (
    stripos($agent, $item) > -1 )
    {
    return
    TRUE;
    }
    if (
    stripos($ip, $item) > -1 )
    {
    return
    TRUE;
    }
    }
    return
    FALSE;
    }
    // fine funzione


    if ( isBot() )
    {
    die(
    "è un bot!");
    }
    else
    {
    // conta visite
    print "visite +1";
    }

  18. #18
    Guest

    Predefinito

    Ho messo il primo, questi sono per la prova o posso toglierli?

    $ip = $_SERVER['REMOTE_ADDR'];
    $agent = $_SERVER["HTTP_USER_AGENT"];

  19. #19
    Guest

    Predefinito

    questi sono per la versione definitiva

    per comprendere al meglio la logica dello script fai riferimento a http://forum.it.altervista.org/php-m...ml#post1173359

  20. #20
    Guest

    Predefinito

    Ok, ho messo questo del test, mi da ancore l'errore al mio else (l'ultimo)

    Codice:
    function isBot()
    {
    
    $ip = $_SERVER['REMOTE_ADDR'];
    $agent = "googlebot version 66";
    
        $bot = array(
        "googlebot",
        "yahoo",
        "192.66.1."
    );
    
    foreach ($bot as $item)
    {
        if ( stripos($agent, $item) > -1 )
        {
            return TRUE;
        }
        if ( stripos($ip, $item) > -1 )
        {
            return TRUE;
        }
    }
    return FALSE;
    }// fine funzione   
    
    
    if ( isBot() )
    {
      die("è un bot!");
    }
    else
    {
    // conta visite
    print "visite +1";
    }  
    
    else { 
    if ($continua) { 
    …

  21. #21
    Guest

    Predefinito

    else
    {
    // conta visite
    print "visite +1";
    }

    else {
    if ($continua) {


    diventa

    else
    {
    if ($continua) {

    }
    }

  22. #22
    Guest

    Predefinito

    Così non da errore, ma non stampa niente. Scusa ma, ti posto la pag. che è corta così gli dai un occhio
    Codice PHP:
    <?php
    //Mette i dati nel DB e aumenta il contatore ad ogni visita
    function contatore($pagina) {
    //RICORDA di memorizzare l'url cookie.php +invio IN TUTTI I BROWSERs
    if (empty($_COOKIE["contavisite"])) { //Richiama il cookie che c'è in cookie.php
    $continua = false;
    if (isset(
    $_SERVER['HTTP_REFERER']) != "") {
    $from = parse_url($_SERVER['HTTP_REFERER']);
    $from = $from['host'];
    }
    else {
    $from = "";
    }
    $whitelist = array(
    /*Qui scrivi l'url del mio sito in modo che quando l'utente vi arriva DA TERZI, anche se digita url +pagine, il contatore non sale.
    Se poi è nel mio sito e ci clicca su, ovviamente il contatore nel db sale*/
    "www.gruppoalveo.it", //Scrivi gli url senza http://
    "gruppoalveo.it",
    "www.gruppoalveo.altervista.org",
    "gruppoalveo.altervista.org"
    );
    foreach (
    $whitelist as $sito) {
    if (
    $from == $sito) $continua = true;
    }

    function
    isBot()
    {

    $ip = $_SERVER['REMOTE_ADDR'];
    $agent = "googlebot version 66";

    $bot = array(
    "googlebot",
    "yahoo",
    "192.66.1."
    );

    foreach (
    $bot as $item)
    {
    if (
    stripos($agent, $item) > -1 )
    {
    return
    TRUE;
    }
    if (
    stripos($ip, $item) > -1 )
    {
    return
    TRUE;
    }
    }
    return
    FALSE;
    }
    // fine funzione


    if ( isBot() )
    {
    die(
    "è un bot!");
    }

    else {
    if (
    $continua) {
    $data_localeS=time();
    $mysqli = new mysqli("localhost", "gruppoalveo", "root", "my_gruppoalveo");
    $giorno=array('Dom','Lun','Mar','Mer','Gio','Ven','Sab');
    $mese=array('gen','feb','mar','apr','mag','giu','lug','ago','set','ott','nov','dic');
    $dataGmtS=$giorno[date('w')].' '.date('d').' '.$mese[date('m')-1].' '.date('Y - H:i:s');
    $ip = $_SERVER['REMOTE_ADDR'];
    $url = $_SERVER['PHP_SELF'];
    $esiste = $mysqli->query ("SELECT * FROM visitate WHERE url='$url'");
    if (
    $esiste->num_rows == 0) {
    $visite = 1;
    $mysqli->query ("INSERT INTO visitate(data_localeS, dataGmtS, pagina, url, visite, ip)
    VALUES ('
    $data_localeS', '$dataGmtS', '$pagina', '$url', '$visite', '$ip')");
    }
    else {
    $old = $esiste->fetch_array(MYSQLI_ASSOC);
    $visite = $old['visite'] + 1;
    $mysqli->query("UPDATE visitate SET data_localeS='$data_localeS', dataGmtS='$dataGmtS', pagina='$pagina', visite='$visite', ip='$ip' WHERE url='$url'");
    }
    }
    }
    }
    }
    //Estrae i dati dal DB e crea la sequenza delle pagine più viste
    $mysqli = new mysqli("localhost", "gruppoalveo", "root", "my_gruppoalveo");
    $pag_viste = $mysqli->query("SELECT * FROM visitate ORDER BY visite DESC LIMIT 0,8"); //Visualizza il numero di items
    if ($pag_viste->num_rows > 0) {
    echo
    "<div class=\"menuVisti\">";
    while (
    $link = $pag_viste->fetch_array(MYSQLI_ASSOC)) {
    echo
    "<div class=\"numeroVisite\">".$link["visite"]." volte</div>";
    echo
    "<a class=\"visti\" href='".$link['url']."'>&bull;&nbsp;&nbsp;&nbsp;".$link['pagina']."</a>";
    }
    echo
    "</div>";
    }

    error_reporting (E_ALL);
    ?>

  23. #23
    Guest

    Predefinito

    $agent = $_SERVER["HTTP_USER_AGENT"];

    altrimenti sei un bot :)

    e se la pagina deve comunque fare qualcosa anche se isBot

    cancella die("è un bot!");

    infine occhio a $continua
    Ultima modifica di FormularioDiDrakensang : 21-10-2014 alle ore 16.17.28

  24. #24
    Guest

    Predefinito

    Così non da errore, ma come faccio a sapere se funziona?

    Cosa intendi con infine occhio a $continua

    function isBot()
    {

    $ip = $_SERVER['REMOTE_ADDR'];
    $agent = $_SERVER["HTTP_USER_AGENT"];

    $bot = array(
    "googlebot",
    "yahoo",
    "192.66.1."
    );

    foreach ($bot as $item)
    {
    if ( stripos($agent, $item) > -1 )
    {
    return TRUE;
    }
    if ( stripos($ip, $item) > -1 )
    {
    return TRUE;
    }
    }
    return FALSE;
    }// fine funzione


    if ( isBot() )
    {
    }

    else {
    if ($continua) {

  25. #25
    Guest

    Predefinito

    Codice PHP:
    <?php

    function isBot()
    {

    $ip = $_SERVER['REMOTE_ADDR'];
    $agent = $_SERVER["HTTP_USER_AGENT"];
    $agent = "googlebot version 66"; // RICORDATI DI CANCELLARMI

    $bot = array(
    "googlebot",
    "yahoo",
    "192.66.1."
    );

    foreach (
    $bot as $item)
    {
    if (
    stripos($agent, $item) > -1 )
    {
    return
    TRUE;
    }
    if (
    stripos($ip, $item) > -1 )
    {
    return
    TRUE;
    }
    }
    return
    FALSE;
    }
    // fine funzione isBot


    //Mette i dati nel DB e aumenta il contatore ad ogni visita
    function contatore($pagina) {
    //RICORDA di memorizzare l'url cookie.php +invio IN TUTTI I BROWSERs
    if (empty($_COOKIE["contavisite"])) { //Richiama il cookie che c'è in cookie.php
    $continua = false;
    if (isset(
    $_SERVER['HTTP_REFERER']) != "") {
    $from = parse_url($_SERVER['HTTP_REFERER']);
    $from = $from['host'];
    }
    else {
    $from = "";
    }
    $whitelist = array(
    /*Qui scrivi l'url del mio sito in modo che quando l'utente vi arriva DA TERZI, anche se digita url +pagine, il contatore non sale.
    Se poi è nel mio sito e ci clicca su, ovviamente il contatore nel db sale*/
    "www.gruppoalveo.it", //Scrivi gli url senza http://
    "gruppoalveo.it",
    "www.gruppoalveo.altervista.org",
    "gruppoalveo.altervista.org"
    );
    foreach (
    $whitelist as $sito) {
    if (
    $from == $sito) $continua = true;
    }

    if (
    isBot() )
    {
    print (
    "<script>alert('è un bot - e il filtro sta funzionando');</script>"); // RICORDATI DI CANCELLARMI
    }

    else {
    if (
    $continua) {
    $data_localeS=time();
    $mysqli = new mysqli("localhost", "gruppoalveo", "root", "my_gruppoalveo");
    $giorno=array('Dom','Lun','Mar','Mer','Gio','Ven','Sab');
    $mese=array('gen','feb','mar','apr','mag','giu','lug','ago','set','ott','nov','dic');
    $dataGmtS=$giorno[date('w')].' '.date('d').' '.$mese[date('m')-1].' '.date('Y - H:i:s');
    $ip = $_SERVER['REMOTE_ADDR'];
    $url = $_SERVER['PHP_SELF'];
    $esiste = $mysqli->query ("SELECT * FROM visitate WHERE url='$url'");
    if (
    $esiste->num_rows == 0) {
    $visite = 1;
    $mysqli->query ("INSERT INTO visitate(data_localeS, dataGmtS, pagina, url, visite, ip)
    VALUES ('
    $data_localeS', '$dataGmtS', '$pagina', '$url', '$visite', '$ip')");
    }
    else {
    $old = $esiste->fetch_array(MYSQLI_ASSOC);
    $visite = $old['visite'] + 1;
    $mysqli->query("UPDATE visitate SET data_localeS='$data_localeS', dataGmtS='$dataGmtS', pagina='$pagina', visite='$visite', ip='$ip' WHERE url='$url'");
    }
    }
    }
    }
    }
    //Estrae i dati dal DB e crea la sequenza delle pagine più viste
    $mysqli = new mysqli("localhost", "gruppoalveo", "root", "my_gruppoalveo");
    $pag_viste = $mysqli->query("SELECT * FROM visitate ORDER BY visite DESC LIMIT 0,8"); //Visualizza il numero di items
    if ($pag_viste->num_rows > 0) {
    echo
    "<div class=\"menuVisti\">";
    while (
    $link = $pag_viste->fetch_array(MYSQLI_ASSOC)) {
    echo
    "<div class=\"numeroVisite\">".$link["visite"]." volte</div>";
    echo
    "<a class=\"visti\" href='".$link['url']."'>&bull;&nbsp;&nbsp;&nbsp;".$link['pagina']."</a>";
    }
    echo
    "</div>";
    }

    error_reporting (E_ALL);
    ?>
    Ultima modifica di FormularioDiDrakensang : 21-10-2014 alle ore 16.43.11

  26. #26
    Guest

    Predefinito

    Ho sostituito tutta la pagina, ma non stampa niente

  27. #27
    Guest

    Predefinito

    nessuno chiama contatore() ergo continua = undef che è quanto facevo notare prima
    Ultima modifica di FormularioDiDrakensang : 21-10-2014 alle ore 17.06.12

  28. #28
    Guest

    Predefinito

    Citazione Originalmente inviato da FormularioDiDrakensang Visualizza messaggio
    nessuno chiama contatore() ergo continua = undef che è quanto facevo notare prima
    Che intendi, non capisco...

  29. #29
    Guest

    Predefinito

    se la funzione contatore() non viene richiamata da qualche altro script o da questa stessa pagina
    è del tutto normale che non 'stampi' niente

    allo stesso modo se qualcosa nel codice di contatore() va male e non setta $continua = true
    non vedi niente

  30. #30
    Guest

    Predefinito

    E' forse perché ho il cookie? Prova tu www.gruppoalveo.it

Pagina 1 di 2 12 UltimoUltimo

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •