- 论坛徽章:
- 0
|
一段封爬虫的脚本,但是结果总是不对,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 |
|