免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1446 | 回复: 3
打印 上一主题 下一主题

大伙来找错吧... [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-01-05 13:41 |只看该作者 |倒序浏览
一段封爬虫的脚本,但是结果总是不对,gray_ip_list 里的IP总是重复出现,大伙帮忙查查哪里的问题?
#!/bin/bash
ACCESS_LOG="./access_r.log"
PROG_DIR=$(pwd)
PORT=10000
ANA_SCRIPT="ngx-access.py"
cd $PROG_DIR
[ -e log_tmp ] && rm -f log_tmp
[ ! -e spider_ip_list ] && touch spider_ip_list
[ -e gray_ip_list ] ||  touch gray_ip_list
[ -e warn_ip_list ] && rm -f warn_ip_list && touch warn_ip_list || touch warn_ip_list
[ ! -e test_url_list ] && touch test_url_list
[ ! -e access_log_data ] && touch access_log_data

tail -n 15000 $ACCESS_LOG > access_log_data
awk -v port=$PORT -v ana_script=$ANA_SCRIPT '
        function drop_ip(ip,port){
                print "/sbin/iptables -A INPUT -s "ip" -p tcp -dport "port" -j DROP"
                system("/sbin/iptables -A INPUT -s "ip" -p tcp --dport "port" -j DROP")
                }
        BEGIN{
                spider_ip_file="spider_ip_list"
                gray_ip_file="gray_ip_list"
                test_url_file="test_url_list"
                access_log_file="access_log_data"
                log_tmp_file="log_tmp"
                warn_ip_file="warn_ip_list"
                ip_warn_value=50
                url_warn_value=10
                spider_ip_arr[0]=""
                gray_ip_arr[0]=""
                test_url_arr[0]=""
                iptable_arr[0]=""
                warn_ip_arr[0]=""
        }
        FILENAME==spider_ip_file{spider_ip_arr[$1]+=1}
        FILENAME==gray_ip_file {gray_ip_arr[$1]+=1}
        FILENAME==test_url_file{test_url_arr[$1]+=1}
        FILENAME==access_log_file{
                if( $0~/spider|bot|Yahoo|archiver|yodaoic/ && spider_ip_arr[$1]==0 ){
                        if (iptable_arr[$1]<1){
                                iptable_arr[$1]+=1
                                drop_ip($1,port)
                                print $1 >> spider_ip_file
                                #fflush(spider_ip_file)
                        }else{
                                iptable_arr[$1]+=1
                        }
                }else{
                        print $0 >> log_tmp_file
                        #fflush(log_tmp_file)
                }
        }END{
                command="/usr/bin/python "ana_script" G -gh "log_tmp_file" 2>&1"
                while( ( command |& getline )>0 ){
                        if (NF==3 && "-"!~$2 && $1>ip_warn_value && $0!~/Group Field/ && $3!~\
                                /192.168.*.*/){
                                        ip=$3
                                        gray_ip_arr_new[ip]+=1
                                        command2="/usr/bin/python "ana_script" FG -gr -h "ip" "log_tmp_file" 2>&1"
                                        while( ( command2 |& getline)>0 ){

                                                if (NF==3 && "-"!~$2 && $1>url_warn_value && $1!~/Filter/){
                                                        for(i in url_test_arr){
                                                                if($3~/i/){
                                                                        warn_ip_arr[ip]+=1
                                                                        break_tag=0
                                                                        break
                                                                }
                                                        }
                                                }
                                                if(break_tag==0){break}
                                        }
                                        if (ip in gray_ip_arr && warn_ip_arr[ip]>0){
                                                print "gray ip twice and url checked not pass:",ip >> warn_ip_file
                                                #fflush(warn_ip_file)
                                        }else{
                                                if(ip in gray_ip_arr){
                                                        print "gray ip twice:",ip >> warn_ip_file
                                                        #fflush(warn_ip_file)
                                                }
                                        }
                        }
                }

                print "0" > gray_ip_file
                fflush(gray_ip_file)
                for( i in gray_ip_arr_new ){
                        if (! i in gray_ip_arr){print i,"is not in !";print i >> gray_ip_file}
                }

        }' spider_ip_list gray_ip_list test_url_list access_log_data

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
2 [报告]
发表于 2010-01-05 15:34 |只看该作者
看着就晕

论坛徽章:
0
3 [报告]
发表于 2010-01-05 17:11 |只看该作者
我也看晕了,自己中间多查几个不同的echo 出来debug就好了。

论坛徽章:
0
4 [报告]
发表于 2010-01-06 11:40 |只看该作者

回复 #3 刘五十三 的帖子

ECHO 了N多个,没发现问题所在...大伙帮忙啊...怎么这么少人顶呢...
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP