Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2006
    Messaggi
    327

    Sequenza di ip da un range

    Salve a tutti,

    conoscete una classe in php che dato un range di ip, mi trova l'intera sequenza dall'ip di partenza a quello di arrivo??

    ad esempio, alla classe php passo questi valori

    192.168.0.1 - ip start
    192.168.0.120 - ip end

    lui mi deve trovare e stampare tutti gli ip tra il primo e il secondo ip... questo naturalmente è un esempio semplice.... ma mi servirebbe anche il caso di combinazioni più complesse come

    nel caso specifico di una netmask di classe b

    192.168.0.1 - ip start
    192.168.20.120 - ip end

    oppure una netmask di classe a

    192.0.0.1 - ip start
    192.168.20.120 - ip end

    spero che mi sia spiegato bene

  2. #2
    Utente di HTML.it L'avatar di Leo15
    Registrato dal
    Sep 2005
    Messaggi
    307
    Non l'ho testato, ma prova questo:
    Codice PHP:
    $start_ip "192.168.0.1";
    $end_ip "192.168.1.120";

    $start_ip explode("."$start_ip);
    $end_ip explode("."$end_ip);

    $last false;
    while(
    $start_ip[0] <= $end_ip[0]) {
        echo 
    "{$start_ip[0]}.{$start_ip[1]}.{$start_ip[2]}.{$start_ip[3]}\n";
        if(
    $start_ip[0] == $end_ip[0] && $start_ip[1] == $end_ip[1] && $start_ip[2] == $end_ip[2] && $start_ip[3] == $end_ip[3]) break;
        
    $start_ip[3]++;
        if(
    $start_ip[3] > 255) {
            
    $start_ip[3] = 0;
            
    $start_ip[2]++;
            if(
    $start_ip[2] > 255) {
                
    $start_ip[2] = 0;
                
    $start_ip[1]++;
            }
        }

    In questo script stampo i risultati, ovviamente tu modifica come ti serve

    Edit: ho corretto alcuni bug
    La disumanità del computer sta nel fatto che, una volta programmato e messo in funzione, si comporta in maniera perfettamente onesta.
    Isaac Asimov

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2006
    Messaggi
    327
    grazie mille, è una buona base di partenza

  4. #4
    Utente di HTML.it L'avatar di Leo15
    Registrato dal
    Sep 2005
    Messaggi
    307
    Originariamente inviato da hackerdm
    grazie mille, è una buona base di partenza
    Ho corretto alcuni bug palesi, cambiando proprio sistema :P
    La disumanità del computer sta nel fatto che, una volta programmato e messo in funzione, si comporta in maniera perfettamente onesta.
    Isaac Asimov

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2006
    Messaggi
    327
    bug del tipo che se si immettono valori superiori a 255 lui continuava a lavorare??
    e poi anche che non stampava tutte le combinazioni

    a che serve la variabile $last??
    e poi resta il fatto che se metto valori superiori a 255, il processo se ne va in loop infinito

  6. #6
    Utente di HTML.it L'avatar di Leo15
    Registrato dal
    Sep 2005
    Messaggi
    307
    Originariamente inviato da hackerdm
    bug del tipo che se si immettono valori superiori a 255 lui continuava a lavorare??
    e poi anche che non stampava tutte le combinazioni

    a che serve la variabile $last??
    e poi resta il fatto che se metto valori superiori a 255, il processo se ne va in loop infinito
    Valori superiori a 255 non ce ne dovrebbero stare in un ip

    la variabile $last non serve a nulla, è un rimasuglio di un tentativo precedente
    La disumanità del computer sta nel fatto che, una volta programmato e messo in funzione, si comporta in maniera perfettamente onesta.
    Isaac Asimov

  7. #7
    Utente di HTML.it L'avatar di dottwatson
    Registrato dal
    Feb 2007
    Messaggi
    3,012
    testat e funzionante, l' importante è che la partenza sia SEMPRE minore dell' arrivo



    Codice PHP:

    function iprange($start,$stop)
      {
      
    $out=array();
      list(
    $start_1,$start_2,$start_3,$start_4)=explode(".",$start);
      list(
    $stop_1,$stop_2,$stop_3,$stop_4)=explode(".",$stop);
      
      for (
    $a=$start_1$a <= $stop_1$a++)
        for (
    $b=$start_2$b <= $stop_2$b++)
          for (
    $c=$start_3$c <= $stop_3$c++)
            for (
    $d=$start_4$d <= $stop_4$d++)
              {
              
    $out[]=$a.".".$b.".".$c.".".$d;
              }
      return 
    $out;
      }


    echo 
    "<pre>";
    $res=iprange('192.168.0.5','192.168.100.229');
    print_r($res); 
    Non sempre essere l'ultimo è un male... almeno non devi guardarti le spalle

    il mio profilo su PHPClasses e il mio blog laboweb

  8. #8
    Utente di HTML.it L'avatar di dottwatson
    Registrato dal
    Feb 2007
    Messaggi
    3,012
    evolutiontime!!

    anche con incrementale

    Codice PHP:
    <?php


    function iprange($start,$stop,$step=1)
      {
      
      
      
    $out=array();
      list(
    $start_1,$start_2,$start_3,$start_4)=explode(".",$start);
      list(
    $stop_1,$stop_2,$stop_3,$stop_4)=explode(".",$stop);
      
      for (
    $a=$start_1$a <= $stop_1$a+=$step)
        for (
    $b=$start_2$b <= $stop_2$b+=$step)
          for (
    $c=$start_3$c <= $stop_3$c+=$step)
            for (
    $d=$start_4$d <= $stop_4$d+=$step)
              {
              
    $out[]=$a.".".$b.".".$c.".".$d;
              }
      return 
    $out;
      }


    echo 
    "<pre>";
    $res=iprange('192.168.0.5','192.168.100.229',10);
    print_r($res);

    ?>
    Non sempre essere l'ultimo è un male... almeno non devi guardarti le spalle

    il mio profilo su PHPClasses e il mio blog laboweb

  9. #9
    Utente di HTML.it L'avatar di Leo15
    Registrato dal
    Sep 2005
    Messaggi
    307
    Avevo postato anche io questa soluzione (che poi ho modificato), ma in questo modo (e guardando attentamente l'esempio che tu stesso hai postato puoi verificarlo) tagli fuori alcuni IP.
    Ad esempio con il range 10.0.0.120 - 10.0.2.121 calcola solo 6 ip, non tutto il range.
    Ed anche con 10.0.0.120 - 10.0.2.119 non va, non stampa nulla.

    A meno che non sia un "effetto" voluto

    La disumanità del computer sta nel fatto che, una volta programmato e messo in funzione, si comporta in maniera perfettamente onesta.
    Isaac Asimov

  10. #10
    Utente di HTML.it L'avatar di dottwatson
    Registrato dal
    Feb 2007
    Messaggi
    3,012
    non è voluto l' effetto

    ecco il codice completo
    Codice PHP:
    function iprange($start,$stop,$range=1)
      {
      
    $reverse=false;
      
    $out=array();
      
      if (
    intval(str_replace(".","",$stop)) < 
          
    intval(str_replace(".","",$start))) 
        {
        
    $tmp=$start;
        
    $start=$stop;
        
    $stop=$tmp;
        
    $reversetrue;
        }

      list(
    $start_1,$start_2,$start_3,$start_4)=explode(".",$start);
      
    //list($stop_1,$stop_2,$stop_3,$stop_4)=explode(".",$stop);
      
      
    for ($a=$start_1$a <= 255$a+=$range)
        for (
    $b=$start_2$b <= 255$b+=$range)
          for (
    $c=$start_3$c <= 255$c+=$range)
            for (
    $d=$start_4$d <= 255$d+=$range)
              {
              
    $str="$a.$b.$c.$d";
              
    $out[]=$str;
              if (
    $str == $stop)
                {
                if (
    $reverse==truearray_reverse($out);
                return 
    $out;
                }
              }
      return 
    $out;
      }


    echo 
    "<pre>";
    $res=iprange('10.0.2.121','10.0.0.120');
    print_r($res); 
    Non sempre essere l'ultimo è un male... almeno non devi guardarti le spalle

    il mio profilo su PHPClasses e il mio blog laboweb

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.