<?php
class
block_ip {
var
$Block_ip
=
array
(
"192.168.1.1"
,
"210.10.2.1-20"
,
"222.34.4.*"
);
function
construct(){
}
function
destruct(){
}
private
function
makePregIP(
$str
){
if
(
strstr
(
$str
,
"-"
)) {
$aIP
=
explode
(
"."
,
$str
);
foreach
(
$aIP
as
$k
=>
$v
) {
if
(!
strstr
(
$v
,
"-"
)) {
$preg_limit
.= makePregIP(
$v
);
}
else
{
$aipNum
=
explode
(
"-"
,
$v
);
for
(
$i
=
$aipNum
[0];
$i
<=
$aipNum
[1];
$i
++){
$preg
.=
$preg
?
"|"
.
$i
:
"["
.
$i
;
}
$preg_limit
.=
strrpos
(
$preg_limit
,
"."
,1)==(
strlen
(
$preg_limit
)-1)?
$preg
.
"]"
:
"."
.
$preg
.
"]"
;
}
}
}
else
{
$preg_limit
.=
$str
.
"."
;
}
return
$preg_limit
;
}
private
function
getAllBlockIP(){
if
(
$this
->Block_ip) {
foreach
(
$this
->Block_ip
as
$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
;
}
}
return
$ip_list
;
}
public
function
checkIP() {
$iptable
=
$this
->getAllBlockIP();
$IsJoined
= true;
$Ip
=
$this
->get_client_ip();
$Ip
= trim(
$Ip
);
if
(
$iptable
) {
foreach
(
$iptable
as
$value
) {
if
(preg_match(
"{$value}"
,
$Ip
)) {
$IsJoined
= false;
break
;
}
}
}
if
( !
$IsJoined
){
echo
"IP Error"
;
exit
;
}
}
private
function
get_client_ip(){
if
(
getenv
(
"HTTP_CLIENT_IP"
) &&
strcasecmp
(
getenv
(
"HTTP_CLIENT_IP"
),
"unknown"
))
$ip
=
getenv
(
"HTTP_CLIENT_IP"
);
else
if
(
getenv
(
"HTTP_X_FORWARDED_FOR"
) &&
strcasecmp
(
getenv
(
"HTTP_X_FORWARDED_FOR"
),
"unknown"
))
$ip
=
getenv
(
"HTTP_X_FORWARDED_FOR"
);
else
if
(
getenv
(
"REMOTE_ADDR"
) &&
strcasecmp
(
getenv
(
"REMOTE_ADDR"
),
"unknown"
))
$ip
=
getenv
(
"REMOTE_ADDR"
);
else
if
(isset(
$_SERVER
['REMOTE_ADDR']) &&
$_SERVER
['REMOTE_ADDR'] &&
strcasecmp
(
$_SERVER
['REMOTE_ADDR'],
"unknown"
))
$ip
=
$_SERVER
['REMOTE_ADDR'];
else
$ip
=
"unknown"
;
return
(
$ip
);
}
}
?>