Originalmente, se escribieron varias funciones y la lista negra de IP se registró en la biblioteca. Para facilitar la comprensión, se cambió a una clase para escribir la lista negra de IP.
192.168.1.1 IP única
192.168.1.* Este proxy 192.168.1.1-192.168.1-255
192.158.1.2-20 significa 192.158.1.2-192.158.1.20
También puedes escribir 192.168.1.[1|2|3]
Jeje~ No sé si la idea es completa o no, así que la plantearé para discusión y usaré las siguientes citas:
$oBlock_ip = nuevo block_ip();
$oBlock_ip->checkIP();
El siguiente es un fragmento citado:
<?php
clase block_ip {
var $Block_ip = array("192.168.1.1","210.10.2.1-20","222.34.4.*");
función __construct(){
}
función __destruir(){
}
función privada makePregIP($str){
si (cadena($cadena,"-")) {
$aIP = explotar(".",$cadena);
foreach ($aIP como $k=>$v) {
si (!strstr($v,"-")) {
$preg_limit .= makePregIP($v);
} demás{
$aipNum = explotar("-",$v);
para($i=$aipNum[0];$i<=$aipNum[1];$i++){
$preg .=$preg?"|".$i:"[".$i;
}
$preg_limit .=strrpos($preg_limit,".",1)==(strlen($preg_limit)-1)?$preg."]":".".$preg."]";
}
}
}demás{
$preg_limit .= $cadena."";
}
devolver $preg_limit;
}
función privada getAllBlockIP(){
si ($this->Block_ip) {
foreach ($this->Block_ip como $k=>$v) {
$ipaddres = $this->makePregIP($v->start_ip);
$ip = str_ireplace(".",".",$ipaddres);
$ip = str_replace("*","[0-9]{1,3}",$ip);
$ipaddres = "/".$ip."/";
$ip_list[] = $ipaddres;
}
}
devolver $lista_ip;
}
función pública checkIP() {
$iptable = $this->getAllBlockIP();
$IsJoined = verdadero;
//Obtener ip de usuario
$IP = $this->get_client_ip();
$Ip = recortar($Ip);
//Eliminar segmentos de IP de la lista negra
si ($iptable) {
foreach($iptable como $valor) {
si (preg_match("{$valor}",$Ip)) {
$EstáUnido = falso;
romper;
}
}
}
//Si está en la lista negra de IP, realiza las siguientes operaciones
si(!$EstáUnido){
eco "Error de IP";
salida;
}
}
función privada get_client_ip(){
if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "desconocido"))
$ip = getenv("HTTP_CLIENT_IP");
else if (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "desconocido"))
$ip = getenv("HTTP_X_FORWARDED_FOR");
else if (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "desconocido"))
$ip = getenv("REMOTE_ADDR");
else if (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "desconocido"))
$ip = $_SERVER['REMOTE_ADDR'];
demás
$ip = "desconocido";
retorno($ip);
}
}
?>