- Home
- Categorie
- Coding e Sistemistica
- PHP
- Accesso a range
-
Ciao hiwap3,
Puoi fare un explode, in modo da ottenre 4 variabili con le 4 parti dell'ip, e successivamente crearti le tue regole...
Altrimenti puoi usare le espressioni regolari.
-
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
-