


虎绿林防止cc的限速代码
主要功能代码
主要功能代码
<?php
# 防止CC攻击
hu60_cc_prevent();
function hu60_cc_prevent()
{
global $ENABLE_CC_BLOCKING,
$CC_DATA,
$CC_LIMIT, // 数组, $CC_LIMIT[0] 秒内最多访问 $CC_LIMIT[1] 次
$CC_USE_MEMCACHE,
$CC_BLOCK_LOG,
$CC_ACCESS_LOG,
$CC_IP_LIMIT,
$CC_REAL_IP;
// 记录数,决定记录文件的大小
$CC_RECORD_NUM = 256 * 256;
// 单个记录字节数
$CC_RECORD_SIZE = 6;
if (!$ENABLE_CC_BLOCKING) {
return;
}
if (empty($CC_REAL_IP)) {
$CC_REAL_IP = $_SERVER['REMOTE_ADDR'];
}
if (isset($CC_IP_LIMIT[$CC_REAL_IP])) {
$CC_LIMIT[1] = $CC_IP_LIMIT[$CC_REAL_IP];
}
// 当前时间,uint16
$currTime = unpack('v', pack('v', $_SERVER['REQUEST_TIME']));
$currTime = $currTime[1];
// IP hash,代表记录在文件中的位置
$ipHash = (hexdec(substr(md5($CC_REAL_IP), 0, 8)) % $CC_RECORD_NUM) * $CC_RECORD_SIZE;
if ($CC_USE_MEMCACHE) {
$key = "cc/$ipHash";
$record = cache::get($key);
} else {
if (!is_file($CC_DATA) || filesize($CC_DATA) < $CC_RECORD_NUM * $CC_RECORD_SIZE) {
file_put_contents($CC_DATA, str_repeat("