今天我开发了下面的代码,算是大功初成,一天拦截了15个IP,服务器负载正常。 <div class="codetitle"><a style="CURSOR: pointer" data="18787" class="copybut" id="copybut18787" onclick="doCopy('code18787')"> 代码如下:<div class="codebody" id="code18787"> <?php //查询禁止IP $ip =$_SERVER['REMOTE_ADDR']; $fileht=".htaccess2"; if(!file_exists($fileht))file_put_contents($fileht,""); $filehtarr=@file($fileht); if(in_array($ip."rn",$filehtarr))die("Warning:"." "."Your IP address are forbided by some reason,IF you have any question Pls emill to shop@mydalle.com!"); //加入禁止IP $time=time(); $fileforbid="log/forbidchk.dat"; if(file_exists($fileforbid)) { if($time-filemtime($fileforbid)>60)unlink($fileforbid); else{ $fileforbidarr=@file($fileforbid); if($ip==substr($fileforbidarr[0],strlen($ip))) { if($time-substr($fileforbidarr[1],strlen($time))>600)unlink($fileforbid); elseif($fileforbidarr[2]>600){file_put_contents($fileht,$ip."rn",FILE_APPEND);unlink($fileforbid);} else{$fileforbidarr[2]++;file_put_contents($fileforbid,$fileforbidarr);} } } } //防刷新 $str=""; $file="log/ipdate.dat"; if(!file_exists("log")&&!is_dir("log"))mkdir("log",0777); if(!file_exists($file))file_put_contents($file,""); $allowTime = 120;//防刷新时间 $allowNum=10;//防刷新次数 $uri=$_SERVER['REQUEST_URI']; $checkip=md5($ip); $checkuri=md5($uri); $yesno=true; $ipdate=@file($file); foreach($ipdate as $k=>$v) { $iptem=substr($v,32); $uritem=substr($v,32,32); $timetem=substr($v,64,10); $numtem=substr($v,74); if($time-$timetem<$allowTime){ if($iptem!=$checkip)$str.=$v; else{ $yesno=false; if($uritem!=$checkuri)$str.=$iptem.$checkuri.$time."1rn"; elseif($numtem<$allowNum)$str.=$iptem.$uritem.$timetem.($numtem+1)."rn"; else { if(!file_exists($fileforbid)){$addforbidarr=array($ip."rn",time()."rn",1);file_put_contents($fileforbid,$addforbidarr);} file_put_contents("log/forbided_ip.log",$ip."--".date("Y-m-d H:i:s",time())."--".$uri."rn",FILE_APPEND); $timepass=$timetem+$allowTime-$time; die("Warning:"." "."Sorry,you are forbided by refreshing frequently too much,Pls wait for ".$timepass." seconds to continue!"); } } } } if($yesno) $str.=$checkip.$checkuri.$time."1rn"; file_put_contents($file,$str); ?> 把程序include进要进行的php文件头部。 程序首先判断IP是否在禁止列表,如果在则退出; 否则,如果IP在监控列表,10分钟内点击超过600次则加入禁止列表。 如果没有超过时间和次数则次数加1,同时,监控IP是否对同一页面频繁操作。 由于是机器刷频,所以程序不用session判断。 还有就是更新的时候,不能用独占处理文件。 使用伪静态存储IP也会出错。 这个程序还有变化和改进的余地的,大家也可以参考QQ农场里的降级原理,基本上农场也是按照这个原理开发的吧。 (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|