- Home
- Categorie
- Coding e Sistemistica
- Coding
- Accesso a range
- 
							
							
							
							
							
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 
 
- 
							
							
							
							
							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: Il metodo ipInNetwork() dovrebbe fare al caso tuo. 
 
- 
							
							
							
							
							
Ma nessuno riesce a buttarmi giù un codice che faccia al caso mio???:( 
 
- 
							
							
							
							
							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] 
 
- 
							
							
							
							
							
 
 Io ne avevo fatto uno opposto per bloccare dei range.
 Ora lo voglio ammettere solo quelli della lista, e inserivo il codice10...* 
 151...*e quelli che iniziavano cosi venivano bloccati...nel tuo non capisco perchè metti tutti quei numeri  
 
- 
							
							
							
							
							@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]
 
- 
							
							
							
							
							
E per mettere una pagina di errore in php integrata se il range è compreso?? tipo: NON TI è PERMESSO ACCEDERE! Come lo faccio???:S 
 
- 
							
							
							
							
							
La variabile block nel codice di prima dov'era???:o 
 
- 
							
							
							
							
							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] 
 
- 
							
							
							
							
							
mmm...se non disponibile che apra la pagina notaccess.php in automatico e se disponibile la normale homepage???:D 
 
- 
							
							
							
							
							
