[ Index ]

PHP Cross Reference of Unnamed Project

title

Body

[close]

/se3-dhcp/sources/www/ -> readressage_ip.php (source)

   1  <?php
   2  
   3  /**
   4  
   5     * Page destinee a effectuer un readressage IP d'apres un CSV de l'adressage actuel
   6     * @Version $Id: readressage_ip.php 8593 2015-03-16 07:22:44Z plouf $
   7  
   8     * @Projet LCS / SambaEdu
   9  
  10     * @auteurs Stephane Boireau
  11  
  12  
  13     * @note
  14  
  15     * @Licence Distribue sous la licence GPL
  16  
  17  */
  18  
  19  /**
  20     * @Repertoire: dhcp
  21  
  22     * file: readressage_ip.php
  23  */
  24  
  25  // HTMLPurifier
  26  require_once  ("traitement_data.inc.php");
  27  
  28      $step=isset($_POST['step']) ? $_POST['step'] : NULL;
  29      //$tri_nom_netbios=isset($_POST['tri_nom_netbios']) ? $_POST['tri_nom_netbios'] : "n";
  30      $tri_machines=isset($_POST['tri_machines']) ? $_POST['tri_machines'] : "";
  31  
  32      if($step==2) {
  33          $ip=isset($_POST['ip']) ? $_POST['ip'] : array();
  34          $t_0=isset($_POST['t_0']) ? $_POST['t_0'] : array();
  35          $t_1=isset($_POST['t_1']) ? $_POST['t_1'] : array();
  36          $t_2=isset($_POST['t_2']) ? $_POST['t_2'] : array();
  37  
  38          $nom_fic="se3_dhcp_".preg_replace("/ /","_",time());
  39          $nom_fic.=".csv";
  40  
  41          $now=gmdate('D, d M Y H:i:s').' GMT';
  42          header('Content-Type: text/x-csv');
  43          header('Expires: ' . $now);
  44          // lem9 & loic1: IE need specific headers
  45          if(preg_match('/MSIE/', $_SERVER['HTTP_USER_AGENT'])) {
  46              header('Content-Disposition: inline; filename="'.$nom_fic.'"');
  47              header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
  48              header('Pragma: public');
  49          }
  50          else {
  51              header('Content-Disposition: attachment; filename="'.$nom_fic.'"');
  52              header('Pragma: no-cache');
  53          }
  54  
  55          // Initialisation du contenu du fichier:
  56          $fd='';
  57  
  58          for($i=0;$i<count($ip);$i++) {
  59              if($t_0[$i]!="") {
  60                  $fd.=$ip[$i].";".$t_0[$i].";".$t_2[$i]."\n";
  61              }
  62          }
  63  
  64          // On renvoye le fichier vers le navigateur:
  65          echo $fd;
  66          die();
  67      }
  68  
  69      // Pour avoir la barre bleu en haut
  70      include  "entete.inc.php";
  71  ?>
  72  
  73  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  74  <html>
  75  <head>
  76      <title>Re-adressage IP</title>
  77      <style type="text/css">
  78          table.my_table {
  79              border-style: solid;
  80              border-width: 1px;
  81              border-color: black;
  82              border-collapse: collapse;
  83          }
  84  
  85          .my_table th {
  86              border-style: solid;
  87              border-width: 1px;
  88              border-color: black;
  89              background-color: khaki;
  90              font-weight:bold;
  91              text-align:center;
  92              vertical-align: middle;
  93          }
  94  
  95          .my_table td {
  96              text-align:center;
  97              vertical-align: middle;
  98              border-style: solid;
  99              border-width: 1px;
 100              border-color: black;
 101          }
 102  
 103          .my_table .lig1 {
 104              background-color: #C8FFC8;
 105          }
 106          .my_table .lig-1 {
 107              background-color: #FFE6AA;
 108          }
 109  
 110          .my_table tr:hover {
 111              background-color:white;
 112          }
 113  
 114          div#fixe   {
 115              position: fixed;
 116              bottom: 5%;
 117              right: 5%;
 118          }
 119  
 120      </style>
 121  </head>
 122  <body>
 123      <h1>Re-adressage IP</h1>
 124  
 125      <?php
 126  
 127          if(!isset($step)) {
 128              echo "<form name='import_fichier' action='".$_SERVER['PHP_SELF']."#premiere_ip' enctype='multipart/form-data' method='post'>\n";
 129              echo "<p>Adresse reseau: <input type='text' name='ip' value='172.21.1.0' /><br />\n";
 130              echo "Nombre de classes de 256 machines: <input type='text' name='nb_classes' value='4' /><br />\n";
 131              echo "Laisser <input type='text' name='nb_ip_libres' value='241' /> IP libres en debut de liste (*)<br />\n";
 132              //echo "Trier les machines ordre alphabetique: <input type='checkbox' name='tri_nom_netbios' value='y' />\n";
 133              echo "<input type='radio' name='tri_machines' value='' id='pas_de_tri_machines' checked /><label for='pas_de_tri_machines'> Ne pas trier les machines  (<i>prendre l'ordre du fichier fourni</i>),</label><br />\n";
 134              echo "<input type='radio' name='tri_machines' id='tri_machines_netbios' value='netbios' /><label for='tri_machines_netbios'> Trier les machines ordre alphab�tique,</label><br />\n";
 135              echo "<input type='radio' name='tri_machines' id='tri_machines_ip' value='ip' /><label for='tri_machines_ip'> Trier les machines selon les adresses IP actuelles.</label><br />\n";
 136              echo "<input type='hidden' name='step' value='1' /></p>\n";
 137              echo "<p>Veuillez fournir le fichier CSV des noms de machines et adresses MAC:<br />\n";
 138              echo "<input type='file' name='file_name' />&nbsp;\n";
 139              echo "<input type='submit' name='valid' value='Importer' /></p>\n";
 140              echo "</form>\n";
 141  
 142              echo "<p>(*) pour par exemple r&eacute;server la premi&egrave;re classe C aux serveurs, imprimantes sur ip, vid&eacute;oprojecteurs sur ip,...<br />Les 15 premi&egrave;res adresses sont de toutes fa&ccedil;ons r&eacute;serv&eacute;es.</p>\n";
 143          }
 144          elseif($step==1) {
 145              $csv_file = isset($_FILES["file_name"]) ? $_FILES["file_name"] : NULL;
 146  
 147              if(!is_uploaded_file($csv_file['tmp_name'])) {
 148                  echo "<p>Erreur 1</p>\n";
 149              }
 150              else {
 151                  $source_file=$csv_file['tmp_name'];
 152                  $dest_file=$source_file;
 153  
 154                  $fp=fopen($dest_file,"r");
 155                  if(!$fp){
 156                      echo "<p>Erreur 2</p>\n";
 157                  }
 158                  else {
 159                      $nb_ip_libres=isset($_POST['nb_ip_libres']) ? $_POST['nb_ip_libres'] : 0;
 160  
 161                      $tab=array();
 162                      if($tri_machines=='') {
 163                          $cpt=$nb_ip_libres;
 164                          while(!feof($fp)){
 165                              $ligne=trim(fgets($fp,4096));
 166                              if($ligne!="") {
 167                                  $tab_tmp=explode(";", $ligne);
 168  
 169                                  // On modifie l'ordre des champs pour trier par la suite sur le premier champ: NOM_NETBIOS
 170                                  $tab[$cpt][0]=strtoupper($tab_tmp[1]);
 171                                  $tab[$cpt][1]=$tab_tmp[0];
 172                                  $tab[$cpt][2]=$tab_tmp[2];
 173                                  $cpt++;
 174                              }
 175                          }
 176                          $tab2=array();
 177                          $tab2=$tab;
 178                      }
 179                      elseif($tri_machines=='netbios') {
 180                          $cpt=0;
 181                          while(!feof($fp)){
 182                              $ligne=trim(fgets($fp,4096));
 183                              if($ligne!="") {
 184                                  $tab_tmp=explode(";", $ligne);
 185  
 186                                  // On modifie l'ordre des champs pour trier par la suite sur le premier champ: NOM_NETBIOS
 187                                  $tab[$cpt][0]=strtoupper($tab_tmp[1]);
 188                                  $tab[$cpt][1]=$tab_tmp[0];
 189                                  $tab[$cpt][2]=$tab_tmp[2];
 190                                  $cpt++;
 191                              }
 192                          }
 193  
 194                          // On trie par nom de machine
 195                          /*
 196                          $tab2=array();
 197                          $tab2=$tab;
 198                          sort($tab2);
 199                          */
 200                          sort($tab);
 201                          $tab2=array();
 202                          for($loop=0;$loop<$nb_ip_libres;$loop++) {$tab2[]="";}
 203                          for($loop=0;$loop<count($tab);$loop++) {$tab2[]=$tab[$loop];}
 204  
 205                      }
 206                      elseif($tri_machines=='ip') {
 207                          $cpt=0;
 208                          $tab_num=array();
 209                          while(!feof($fp)){
 210                              $ligne=trim(fgets($fp,4096));
 211                              if($ligne!="") {
 212                                  $tab_tmp=explode(";", $ligne);
 213  
 214                                  $tab_tmp2=explode(".", $tab_tmp[0]);
 215  
 216                                  $tab_num[$cpt]=$tab_tmp2[0]*256*256*256+$tab_tmp2[1]*256*256+$tab_tmp2[2]*256+$tab_tmp2[3];
 217  
 218                                  $tab[$cpt][0]=$tab_tmp2[0]*256*256*256+$tab_tmp2[1]*256*256+$tab_tmp2[2]*256+$tab_tmp2[3];
 219                                  $tab[$cpt][1]=strtoupper($tab_tmp[1]);
 220                                  $tab[$cpt][2]=$tab_tmp[2];
 221                                  $tab[$cpt][3]=$tab_tmp[0];
 222  
 223                                  /*
 224                                  echo "<p>";
 225                                  echo "\$tab[$cpt][0]=".$tab[$cpt][0]."<br />";
 226                                  echo "\$tab[$cpt][1]=".$tab[$cpt][1]."<br />";
 227                                  echo "\$tab[$cpt][2]=".$tab[$cpt][2]."<br />";
 228                                  echo "\$tab[$cpt][3]=".$tab[$cpt][3]."</p>";
 229                                  */
 230  
 231                                  $cpt++;
 232                              }
 233                          }
 234  
 235                          // On trie par adresse IP
 236                          //natsort($tab);
 237  
 238                          /*
 239                          echo "<table><tr><td>";
 240                          foreach($tab_num as $key => $value) {
 241                              echo "\$tab_num[$key]=".$value."<br />";
 242                          }
 243                          echo "</td><td>";
 244                          */
 245  
 246                          $tab_num2=$tab_num;
 247                          sort($tab_num2);
 248                          /*
 249                          foreach($tab_num2 as $key => $value) {
 250                              echo "\$tab_num2[$key]=".$value."<br />";
 251                          }
 252                          echo "</td></tr></table>";
 253                          */
 254  
 255                          $tab_num3=array_flip($tab_num);
 256                          /*
 257                          foreach($tab_num3 as $key => $value) {
 258                              echo "\$tab_num3[$key]=".$value."<br />";
 259                          }
 260                          */
 261  
 262                          $tab2=array();
 263                          for($loop=0;$loop<$nb_ip_libres;$loop++) {$tab2[]="";}
 264                          $cpt=$nb_ip_libres;
 265                          foreach($tab_num2 as $key => $value) {
 266                              $tab2[$cpt]=array();
 267                              $tab2[$cpt][0]=$tab[$tab_num3[$value]][1];
 268                              $tab2[$cpt][1]=$tab[$tab_num3[$value]][3];
 269                              $tab2[$cpt][2]=$tab[$tab_num3[$value]][2];
 270  
 271                              /*
 272                              echo "<p>";
 273                              echo "\$tab2[$cpt][0]=".$tab2[$cpt][0]."<br />";
 274                              echo "\$tab2[$cpt][1]=".$tab2[$cpt][1]."<br />";
 275                              echo "\$tab2[$cpt][2]=".$tab2[$cpt][2]."</p>";
 276                              */
 277  
 278                              $cpt++;
 279                          }
 280  
 281                      }
 282                  }
 283                  fclose($fp);
 284  
 285                  /*
 286                  echo "<table border='1'>\n";
 287                  for($i=0;$i<count($tab);$i++) {
 288                      echo "<tr><td>".$tab[$i][0]."</td><td>".$tab[$i][1]."</td><td>".$tab[$i][2]."</td></tr>\n";
 289                  }
 290                  echo "</table>\n";
 291                  echo "<p><br /></p>\n";
 292                  */
 293  
 294  
 295  				function tip($ip) {
 296                      $tab=explode(".",$ip);
 297                      $tip=256*256*256*$tab[0]+256*256*$tab[1]+256*$tab[2]+$tab[3];
 298                      return $tip;
 299                  }
 300  
 301                  function ip($tip) {
 302                      $ip1=floor($tip/(256*256*256));
 303                      $ip2=floor(($tip-$ip1*256*256*256)/(256*256));
 304                      $ip3=floor(($tip-$ip1*256*256*256-$ip2*256*256)/256);
 305                      $ip4=$tip-$ip1*256*256*256-$ip2*256*256-$ip3*256;
 306  
 307                      $ip="$ip1.$ip2.$ip3.$ip4";
 308                      return $ip;
 309                  }
 310  
 311  				function dernier_octet($ip) {
 312                      $tab=explode(".",$ip);
 313                      return $tab[3];
 314                  }
 315  
 316                  echo "<script type='text/javascript'>
 317  				function inserer(num,dernier){
 318  
 319                      //alert('document.getElementById(\'td_\'+'+num+'+\'_0\').innerHTML='+document.getElementById('td_'+num+'_0').innerHTML)
 320                      //alert('document.getElementById(\'t_\'+'+num+'+\'_0\').value='+document.getElementById('t_'+num+'_0').value)
 321  
 322                      temoin='n';
 323  
 324                      for(i=dernier-1;i>num;i--){
 325  
 326                          //document.getElementById('compteur').innerHTML=i;
 327  
 328                          j=i-1;
 329                          if(((document.getElementById('t_'+j+'_0'))&&(document.getElementById('t_'+j+'_0').value!=''))||(temoin=='y')) {
 330                              temoin='y';
 331                              if(document.getElementById('td_'+i+'_0')) {
 332                                  document.getElementById('td_'+i+'_0').innerHTML=document.getElementById('t_'+j+'_0').value;
 333                                  document.getElementById('t_'+i+'_0').value=document.getElementById('t_'+j+'_0').value;
 334  
 335                                  document.getElementById('td_'+i+'_1').innerHTML=document.getElementById('t_'+j+'_1').value;
 336                                  document.getElementById('t_'+i+'_1').value=document.getElementById('t_'+j+'_1').value;
 337  
 338                                  document.getElementById('td_'+i+'_2').innerHTML=document.getElementById('t_'+j+'_2').value;
 339                                  document.getElementById('t_'+i+'_2').value=document.getElementById('t_'+j+'_2').value;
 340                              }
 341                          }
 342                      }
 343  
 344                      if(document.getElementById('td_'+num+'_0')) {
 345                          document.getElementById('td_'+num+'_0').innerHTML='&nbsp;';
 346                          document.getElementById('t_'+num+'_0').value='';
 347                          document.getElementById('td_'+num+'_1').innerHTML='&nbsp;';
 348                          document.getElementById('t_'+num+'_1').value='';
 349                          document.getElementById('td_'+num+'_2').innerHTML='&nbsp;';
 350                          document.getElementById('t_'+num+'_2').value='';
 351                      }
 352  
 353                  }
 354  
 355  				function supprimer(num,dernier){
 356                      for(i=num;i<dernier-1;i++){
 357                          j=i+1;
 358  
 359                          document.getElementById('td_'+i+'_0').innerHTML=document.getElementById('t_'+j+'_0').value;
 360                          document.getElementById('t_'+i+'_0').value=document.getElementById('t_'+j+'_0').value;
 361  
 362                          document.getElementById('td_'+i+'_1').innerHTML=document.getElementById('t_'+j+'_1').value;
 363                          document.getElementById('t_'+i+'_1').value=document.getElementById('t_'+j+'_1').value;
 364  
 365                          document.getElementById('td_'+i+'_2').innerHTML=document.getElementById('t_'+j+'_2').value;
 366                          document.getElementById('t_'+i+'_2').value=document.getElementById('t_'+j+'_2').value;
 367                      }
 368                  }
 369  
 370                  </script>\n";
 371  
 372                  /*
 373                  // On trie par nom de machine
 374                  $tab2=$tab;
 375                  if($tri_nom_netbios=='y') {
 376                      sort($tab2);
 377                  }
 378                  */
 379  
 380                  $nb_classes=isset($_POST['nb_classes']) ? $_POST['nb_classes'] : 4;
 381                  if($nb_classes=="") {$nb_classes=4;}
 382                  elseif(strlen(preg_replace("/[0-9]/","",$nb_classes))!=0) {$nb_classes=4;}
 383                  elseif($nb_classes==0) {$nb_classes=4;}
 384  
 385                  // Nombre d'IP dispo... il faudra quand meme exclure la derniere en 255 qui correspond au broadcast
 386                  $total=$nb_classes*256-15;
 387  
 388                  $ip=isset($_POST['ip']) ? $_POST['ip'] : "172.16.1.0";
 389                  // On commence  a 15 pour garder de l'espace en debut de classe IP pour les serveurs
 390                  $ip=ip(tip($ip)+15);
 391                  $tip=tip($ip);
 392  
 393                  //echo "\$ip=$ip<br />";
 394                  //echo "\$tip=$tip<br />";
 395                  //die();
 396  
 397                  //echo "<div id='compteur' style='float:right; width:5em; height:1em; border: 1px solid black; text-align:center;'>\n";
 398                  //echo "</div>\n";
 399  
 400                  echo "<p>Effectuez le re-adressage en pr&eacute;voyant quelques IP libres entre les machines de differentes salles.</p>";
 401                  echo "<p><i>NOTE:</i> Les liens javascript d'insertion/suppression sont un peu longs &agrave; r&eacute;agir lors du premier clic.<br />Mais cela devient plus fluide pour les clics suivants.</p>\n";
 402  
 403                  echo "<div class='my_table'>\n";
 404                  echo "<form name='import_fichier' action='".$_SERVER['PHP_SELF']."' enctype='multipart/form-data' method='post'>\n";
 405                  echo "<input type='hidden' name='step' value='2' />\n";
 406  
 407                  echo "<table class='my_table'>\n";
 408                  echo "<tr><th>IP<br />future</th><th>Nom</th><th>IP<br />actuelle</th><th>MAC</th><th>Action</th></tr>\n";
 409                  //for($i=0;$i<count($tab2);$i++) {
 410                  $alt=1;
 411                  for($i=0;$i<$total;$i++) {
 412                      $alt=$alt*(-1);
 413                      echo "<tr class='lig$alt'>\n";
 414  
 415                      echo "<td>\n";
 416                      if($i==$nb_ip_libres) {echo "<a name='premiere_ip'></a>";}
 417                      echo $ip;
 418                      echo "<input type='hidden' id='ip_".$i."' name='ip[".$i."]' value='".$ip."' />\n";
 419                      echo "</td>\n";
 420  
 421                      if(isset($tab2[$i][0])) {
 422                          echo "<td>"."<span id='td_".$i."_0'>".$tab2[$i][0]."</span>\n";
 423                          echo "<input type='hidden' id='t_".$i."_0' name='t_0[".$i."]' value='".$tab2[$i][0]."' />\n";
 424                          echo "</td>\n";
 425                          echo "<td>"."<span id='td_".$i."_1'>".$tab2[$i][1]."</span>\n";
 426                          echo "<input type='hidden' id='t_".$i."_1' name='t_1[".$i."]' value='".$tab2[$i][1]."' />\n";
 427                          echo "</td>\n";
 428                          echo "<td>"."<span id='td_".$i."_2'>".$tab2[$i][2]."</span>\n";
 429                          echo "<input type='hidden' id='t_".$i."_2' name='t_2[".$i."]' value='".$tab2[$i][2]."' />\n";
 430                          echo "</td>\n";
 431                      }
 432                      else {
 433                          echo "<td>"."<span id='td_".$i."_0'>&nbsp;"."</span>\n";
 434                          echo "<input type='hidden' id='t_".$i."_0' name='t_0[".$i."]' value='' />\n";
 435                          echo "</td>\n";
 436                          echo "<td>"."<span id='td_".$i."_1'>&nbsp;"."</span>\n";
 437                          echo "<input type='hidden' id='t_".$i."_1' name='t_1[".$i."]' value='' />\n";
 438                          echo "</td>\n";
 439                          echo "<td>"."<span id='td_".$i."_2'>&nbsp;"."</span>\n";
 440                          echo "<input type='hidden' id='t_".$i."_2' name='t_2[".$i."]' value='' />\n";
 441                          echo "</td>\n";
 442                      }
 443  
 444                      echo "<td>\n";
 445                      echo "<a href='#' onClick='inserer($i,$total) ;return false;'>Inserer</a> / <a href='#' onClick='supprimer($i,$total) ;return false;'>Supprimer</a>";
 446                      echo "</td>\n";
 447  
 448                      echo "</tr>\n";
 449  
 450                      $ip=ip(tip($ip)+1);
 451                      if(dernier_octet($ip)==0) {
 452                          echo "<tr><td colspan='5' style='background-color:grey;'>&nbsp;</td></tr>\n";
 453                      }
 454                  }
 455                  echo "</table>\n";
 456  
 457                  echo "<input type='submit' name='export' value='Exporter' />\n";
 458  
 459                  echo "<div id='fixe'>\n";
 460                  echo "<input type='submit' name='export2' value='Exporter' />\n";
 461                  echo "</div>\n";
 462  
 463                  echo "</form>\n";
 464                  echo "</div>\n";
 465  
 466              }
 467  
 468          }
 469          elseif($step==2) {
 470  
 471          }
 472  
 473      ?>
 474  
 475  </body>
 476  </html>


Generated: Tue Mar 17 22:47:18 2015 Cross-referenced by PHPXref 0.7.1