久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

互聯(lián)網(wǎng)反爬蟲(chóng)實(shí)踐 php實(shí)現(xiàn)篇

 -飛龍?jiān)谔? 2012-01-02

ban_ip_with_memcached_flood這篇文章根據(jù) 互聯(lián)網(wǎng)網(wǎng)站的反爬蟲(chóng)策略淺析 使用php實(shí)現(xiàn)
假設(shè)現(xiàn)有一phpwind搭建論壇,,在global.php文件內(nèi)require_once(‘ban_ip_with_memcached_flood.php’)

ban_ip_with_memcached_flood.php文件

01 <?php
02 /* begin iptable with memcache for ban the flood ip*/
03  
04 //memcache 連接
05 $memcache_obj = new Memcache;
06 $memcache_host = "127.0.0.1";
07 $memcache_obj->connect($memcache_host, 11211) or die ("Could not connect memcached at localserver");
08  
09 //獲取客戶端ip
10 function getIp()
11 {
12 //php獲取ip的算法
13 if ($HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"])
14 {
15 $ip = $HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"];
16 }
17 elseif ($HTTP_SERVER_VARS["HTTP_CLIENT_IP"])
18 {
19 $ip = $HTTP_SERVER_VARS["HTTP_CLIENT_IP"];
20 }
21 elseif ($HTTP_SERVER_VARS["REMOTE_ADDR"])
22 {
23 $ip = $HTTP_SERVER_VARS["REMOTE_ADDR"];
24 }
25 elseif (getenv("HTTP_X_FORWARDED_FOR"))
26 {
27 $ip = getenv("HTTP_X_FORWARDED_FOR");
28 }
29 elseif (getenv("HTTP_CLIENT_IP"))
30 {
31 $ip = getenv("HTTP_CLIENT_IP");
32 }
33 elseif (getenv("REMOTE_ADDR"))
34 {
35 $ip = getenv("REMOTE_ADDR");
36 }
37 else
38 {
39 $ip = "Unknown";
40 }
41 echo "你的IP:".$ip ;
42 return $ip;
43 }
44  
45 $client_ip = getIp();
46 //防火墻攔截語(yǔ)句 可惜開(kāi)了 php.ini的safe_mode為on才可使用,并且需要相應(yīng)權(quán)限才能讓php重新加載php配置文件
47 $iptable_statement= "iptables -A INPUT -i eth0 -j DROP -p tcp --dport 80 -s $client_ip";
48 #echo($iptable_statement);
49 $ip_counter = $memcache_obj->increment($client_ip);
50 #var_dump($ip_counter);
51 if (!$ip_counter) {
52    $memcache_obj->set($client_ip,1, 0, 60);
53 }elseif ($ip_counter>300) {
54    $crawler_counter = $memcache_obj->increment("crawler/$client_ip");
55    if (!$crawler_counter) {
56         $memcache_obj->set("crawler/$client_ip",1, 0, 60);
57    }
58    elseif ($crawler_counter>50){
59         #BlackList.add(ip_sec)
60         //執(zhí)行iptable 防火墻指令
61         #echo exec($iptable_statement);
62         echo exec("echo 'deny $client_ip;\n'>>/d/nginx/conf/ip_ban.conf");
63         #注意nginx 配置文件路徑
64         #echo exec("nginx -s reload");
65         header('HTTP/1.1 403 Forbidden');
66         die("Unauthorized access forbidden! 爬蟲(chóng)再見(jiàn)");
67    }
68    #var_dump($crawler_counter);
69  
70    header('HTTP/1.0 401 Unauthorized');
71    die("Unauthorized access forbidden! 未認(rèn)證授權(quán)");
72    #render :template => 'test', :status => 401 and return false
73 }
74  
75 /* end iptable with memcache for ban the flood ip*/
76 ?>

這里的 ip_ban.conf 是nginx的 httpaccess module 加載配置文件,,利用它和crontab來(lái)實(shí)現(xiàn)每2秒重新reload
nginx配置文件禁止ip訪問(wèn),,從0.8版本開(kāi)始nginx的reload方法 /d/env/nginx/sbin/nginx -s reload

01 mkdir -p /d/env/crontab
02 #創(chuàng)建cron執(zhí)行的shell文件
03 nano /d/env/crontab/nginx_ban_ip.sh
04  
05 #!/bin/env sh
06 #每2分鐘重載nginx配置
07 /d/nginx/sbin/nginx -t
08 /d/nginx/sbin/nginx -s reload
09  
10 #shell文件需要x權(quán)限
11 chmod +x /d/env/crontab/nginx_ban_ip.sh
12  
13 #給ip_ban加上www執(zhí)行權(quán)限,由于我的nginx和php都是www用戶執(zhí)行
14 chmod 777 /d/nginx/conf/ip_ban.conf
15 chown www:www /d/nginx/conf/ip_ban.conf
16 ll /d/nginx/conf/ip_ban.conf
17  
18 #crontab -e 添加2分鐘執(zhí)行shell的語(yǔ)句
19 */2 *  *  *  *  /d/env/crontab/nginx_ban_ip.sh

找到一款不錯(cuò)的網(wǎng)站壓力測(cè)試工具webbench[原創(chuàng)]

使用該壓力測(cè)試對(duì)nginx服務(wù)器進(jìn)行虐待,,測(cè)試以上反爬蟲(chóng)效果,,注意linux系統(tǒng)專用
webbench -c 200 -t 30 http://www./

30秒內(nèi)開(kāi)啟瀏覽器訪問(wèn)網(wǎng)址吧 ,應(yīng)該會(huì)顯示“爬蟲(chóng)再見(jiàn)”,2分鐘之后nginx就會(huì)重讀配置文件,,之后返回403,,ip地址被禁止訪問(wèn)了。
(403頁(yè)面可以自定義)

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多