[ Index ] |
PHP Cross Reference of Unnamed Project |
[Summary view] [Print] [Text view]
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' /> \n"; 139 echo "<input type='submit' name='valid' value='Importer' /></p>\n"; 140 echo "</form>\n"; 141 142 echo "<p>(*) pour par exemple réserver la première classe C aux serveurs, imprimantes sur ip, vidéoprojecteurs sur ip,...<br />Les 15 premières adresses sont de toutes façons réservé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=' '; 346 document.getElementById('t_'+num+'_0').value=''; 347 document.getElementById('td_'+num+'_1').innerHTML=' '; 348 document.getElementById('t_'+num+'_1').value=''; 349 document.getElementById('td_'+num+'_2').innerHTML=' '; 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é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 à ré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'> "."</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'> "."</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'> "."</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;'> </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>
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Tue Mar 17 22:47:18 2015 | Cross-referenced by PHPXref 0.7.1 |