• User Attivo

    Praticamente vorrei un codice che rileva l'ip. Se l'ip è un range bloccato mi stampa una pagina di errore accesso..
    Ma il codice non so come crearlo 😞


  • User Attivo

    Ci sono principalmente due metodi:

    • Usare una accoppiata IP/Netmask (es. 192.168.1.0/255.255.255.0)
    • Usare una espressione regolare (es. 192.168.1.*)

    Per gli IP/Netmask puoi dare una occhiata alla classe Pear Net_IPv4:

    pear.php.net/package/Net_IPv4

    Il metodo ipInNetwork() dovrebbe fare al caso tuo.


  • User Attivo

    Ma nessuno riesce a buttarmi giù un codice che faccia al caso mio???:(


  • User Attivo

    Studiati questo codice:

    [php]<?php

    function ip2double($ip) {
    return (double)(sprintf("%u", ip2long($ip)));
    }

    function in_network($ip, $netip = '192.168.0.0', $netmask = '255.255.255.0') {

    $network = long2ip(ip2long($netip) & ip2long($netmask));
    $broadcast = long2ip(ip2long($netip) | (ip2long($netmask) ^ ip2long("255.255.255.255")));    
    
    $net = ip2double($network);
    $bcast = ip2double($broadcast);
    $ip = ip2double($ip);
    if ($ip >= $net && $ip <= $bcast) {
        return true;
    }
    return false;
    

    }

    var_dump(in_network('192.168.1.1', '192.168.1.0', '255.255.255.0'));
    var_dump(in_network('192.168.1.1', '192.168.2.0', '255.255.255.0'));
    var_dump(in_network('192.168.1.1', '192.168.0.0', '255.255.0.0'));
    var_dump(in_network('10.1.1.1', '10.2.0.0', '255.255.0.0'));

    ?>[/php]


  • User Attivo

    😮
    Io ne avevo fatto uno opposto per bloccare dei range.
    Ora lo voglio ammettere solo quelli della lista, e inserivo il codice

    10...*
    151...*

    e quelli che iniziavano cosi venivano bloccati...nel tuo non capisco perchè metti tutti quei numeri 😄


  • User Attivo

    @hiwap3 said:

    nel tuo non capisco perchè metti tutti quei numeri 😄
    Il primo parametro ($ip) è l'IP che desideri verificare.
    Il secondo parametro ($netip) è l'IP della rete (es. 10.0.0.0, 151.0.0.0, etc.).
    Il terzo parametro ($netmask) è la netmask, la maschera di rete utilizzata per "calcolare" il range di IP.

    Nel tuo caso avresti dovuto utilizzare un codice come questo:

    [php]$block = !in_network($_SERVER['REMOTE_ADDR'], '10.0.0.0', '255.0.0.0');
    // ...
    $block = !in_network($_SERVER['REMOTE_ADDR'], '151.0.0.0', '255.0.0.0');[/PHP]


  • User Attivo

    E per mettere una pagina di errore in php integrata se il range è compreso??

    tipo:

    NON TI è PERMESSO ACCEDERE!

    Come lo faccio???:S


  • User Attivo

    La variabile block nel codice di prima dov'era???:o


  • User Attivo

    Il codice di prima era dimostrativo. La chiamata a var_dump() serviva a visualizzare il valore restituito da in_network().

    Per aggiungere il controllo ti basta un ciclo (es. per ciclare su più coppie ip/netmask) ed una variabile. Ad esempio:

    [php]<?php

    function ip2double($ip) {
    return (double)(sprintf("%u", ip2long($ip)));
    }

    function in_network($ip, $netip = '192.168.0.0', $netmask = '255.255.255.0') {

    $network = long2ip(ip2long($netip) & ip2long($netmask));
    $broadcast = long2ip(ip2long($netip) | (ip2long($netmask) ^ ip2long("255.255.255.255")));    
    
    $net = ip2double($network);
    $bcast = ip2double($broadcast);
    $ip = ip2double($ip);
    if ($ip >= $net && $ip <= $bcast) {
        return true;
    }
    return false;
    

    }

    $ranges = array();
    $ranges[] = array('ip' => '10.0.0.0', 'netmask' => '255.0.0.0');
    $ranges[] = array('ip' => '151.0.0.0', 'netmask' => '255.0.0.0');

    $blocked = false;
    foreach ($ranges as $range) {
    $blocked = $blocked || in_network($_SERVER['REMOTE_ADDR'], $netip = '192.168.0.0', $netmask = '255.255.255.0');
    }

    if ($blocked) {
    die('NON TI è PERMESSO ACCEDERE!');
    }

    echo('Accesso consentito');

    ?> [/php]


  • User Attivo

    mmm...se non disponibile che apra la pagina notaccess.php in automatico e se disponibile la normale homepage???:D


  • User Attivo

    :mmm: