Visualizzazione risultati 1 fino 11 di 11

Discussione: Verificare la presenza di un indirizzo IP in un range

  1. #1
    L'avatar di foreach
    foreach non è connesso Altervistiano Junior
    Data registrazione
    11-06-2008
    Residenza
    3 metri sotto terra
    Messaggi
    501

    Predefinito Verificare la presenza di un indirizzo IP in un range

    Ciao a tutti,

    ho cercato qui su AV ma non c'è niente riguardo ciò che mi serve.

    Vorrei creare una funzione con php che dato come parametro un indirizzo ip, verifichi se questo ip sia contenuto all'interno di un range (es '192.168.0.0/16'). Ho scritto qualcosa già, ma non so come continuare.
    Codice PHP:
    function rangeip($ip) {
    $range = array(
    '5.2.0.0/16',
    '18.0.0.0/8',
    '200.45.230.0/24',
    # ecc...
    );

    if(
    condizione) {
    return(
    true);
    } else {
    return(
    false);
    }

    }
    Io non so come impostare la condizione, dato che vorrei verificare se l'indirizzo ip nella variabile $ip sia contenuto in almeno un range tra quelli nell'array $range.

    Mi aiutate?

    Grazie,
    foreach
    Codice PHP:
    foreach($vettore as $chiave => $valore) {
    echo 
    "Ciao";


  2. #2
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,306

    Predefinito

    Sono stringhe, comparale pezzo per pezzo (explode magari?). Oppure scrivi i range come espressioni regolari e controlla con preg_match (occhio ai "." però). Oppure ancora puoi inventarti qualcosa basato su fnmatch()

  3. #3
    L'avatar di foreach
    foreach non è connesso Altervistiano Junior
    Data registrazione
    11-06-2008
    Residenza
    3 metri sotto terra
    Messaggi
    501

    Predefinito

    Usando explode(), una volta che separo ogni singolo byte dell'indirizzo IP (intendo il singolo numeretto) come tiro in gioco il blocco /16 o /24?

    Di queste cose sono a secco, mi potresti dare una mano?



    Grazie,
    foreach
    Codice PHP:
    foreach($vettore as $chiave => $valore) {
    echo 
    "Ciao";


  4. #4
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,685

    Predefinito

    Codice PHP:
    substr($ip,strrpos($ip,'.')+1);

    /*
    edit:
    non avevo letto bene. Ma è uguale:
    */
    substr($ip,strrpos($ip,'/')+1);
    Con explode, ti restituisce un array, quindi devi prendere l'ultimo elemento...

    Ciao!
    Ultima modifica di alemoppo : 14-09-2012 alle ore 23.53.24

  5. #5
    L'avatar di foreach
    foreach non è connesso Altervistiano Junior
    Data registrazione
    11-06-2008
    Residenza
    3 metri sotto terra
    Messaggi
    501

    Predefinito

    E come imposto il blocco? E se il CIDR non è 8, 16, o 24?



    Grazie,
    foreach
    Codice PHP:
    foreach($vettore as $chiave => $valore) {
    echo 
    "Ciao";


  6. #6
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,306

    Predefinito

    Guarda il secondo esempio qua magari:
    http://stackoverflow.com/questions/2...869931#2869931

    Ti basta explodere l'ip ed il range che lo segue, e sei a posto. Il range nel 90% dei casi è 8, 16, o 24, altrimenti l'amministratore di rete è molto, molto malvagio.

  7. #7
    L'avatar di foreach
    foreach non è connesso Altervistiano Junior
    Data registrazione
    11-06-2008
    Residenza
    3 metri sotto terra
    Messaggi
    501

    Predefinito

    E purtroppo il blocco non è sempre classe A, B o C, ma io devo mettere nell'array $range i blocchi elencati qui http://www.programva.com/en/ip-addre...pEvent=country che indica tutti i blocchi ip italiani, per questo mi serve lo script. Poi lo vorrei fare anche con altri blocchi.

    Se il blocco era semplice, credo che ci sarei riuscito da solo, ma non c'è qualcosa magari già provato da voi o più semplice, perché a me serve solo la condizione, e magari le vie per arrivare a quella.


    Grazie,
    foreach
    Codice PHP:
    foreach($vettore as $chiave => $valore) {
    echo 
    "Ciao";


  8. #8
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,306

    Predefinito

    Beh, allora non hai range del tipo aaa.bbb.ccc.ddd/nn, ma aaa.bbb.ccc.ddd < X < aaa.bbb.ccc.ddd + nnnnn. Potevi dirlo prima

    Converti gli ip in interi con ip2long come suggerito nell'esempio, e poi controlli se sono fra X e X+N, dove N è il numero nella colonna range della tabella.

    Se quello non funziona, la tabella non ti sta dando sufficienti informazioni.
    Ultima modifica di dreadnaut : 15-09-2012 alle ore 00.20.21

  9. #9
    L'avatar di foreach
    foreach non è connesso Altervistiano Junior
    Data registrazione
    11-06-2008
    Residenza
    3 metri sotto terra
    Messaggi
    501

    Predefinito

    Benissimo dreadnaut, ho visto ip2long() e la sua reciproca long2ip(). Ma non ho capito che hai scritto nel primo rigo, io comunque ho un range tipo aaa.bbb.ccc.ddd/nn perché da quella tabella io copio il primo indirizzo ip e converto la quantità di indirizzi nel numero nn.

    Posso impostare la condizione cosi?
    Codice PHP:
    if(ip2long($ip) >= ip2long($range[$i]) && ip2long($ip) <= ip2long($range[$i])+pow(2, 32-$nn))
    Ovvio questo dovrà stare all'interno di un ciclo for(), e poi devo usare substr o explode per separare aaa.bbb.ccc.ddd da nn.



    Grazie,
    foreach
    Ultima modifica di foreach : 16-09-2012 alle ore 09.02.35 Motivo: Piccolo dettaglio
    Codice PHP:
    foreach($vettore as $chiave => $valore) {
    echo 
    "Ciao";


  10. #10
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,306

    Predefinito

    Boh, mi sembrava un doppio lavoro convertire i numeri della tabella in maschere di bit /nn, e poi riconvertirli indietro. Mi preoccupano anche eventuali errori di conversione

    Partendo dai numeri della tabella facevi compia incolla e via.

  11. #11
    L'avatar di foreach
    foreach non è connesso Altervistiano Junior
    Data registrazione
    11-06-2008
    Residenza
    3 metri sotto terra
    Messaggi
    501

    Predefinito

    Ho cambiato qualcosa, ho copiato e incollato da quella tabella su un file di testo i range in questo formato:
    aaa.bbb.ccc.ddd*nnnn
    dove nnn è il numero di ip (che indica in tabella), non la maschera.
    Ora per creare l'array $range è facile, uso file(), e poi con explode() separo il primo ip dal numero degli ip.

    Ora chiedo, sarebbe giusto così?
    Codice PHP:
    $primoip = $numip = array();
    $range = file('rangeitalia.txt');
    for(
    $i=0;$i<count($range);$i++) {
    $var = explode('*', $range[$i]);
    $primoip[] = $var[0];
    $numip[] = $var[1];
    }
    In modo da creare due array in parallelo dove per ogni indice uguale c'è il primo ip e il numero degli ip. E ora come continuo?


    Grazie,
    foreach
    Ultima modifica di foreach : 16-09-2012 alle ore 14.31.16
    Codice PHP:
    foreach($vettore as $chiave => $valore) {
    echo 
    "Ciao";


Regole di scrittura

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