来一个可能防止恶意采集和爬虫的SH-阿里云开发者社区

开发者社区> 开发与运维> 正文
登录阅读全文

来一个可能防止恶意采集和爬虫的SH

简介:

没办法,公司的要求,还有,一些山寨爬虫完全不够我们运维人员的感觉,

一天爬虫搞个三四十万的LOG,那我只好干了。。

人家GOOGLE,BAIDU,一天大约也就五六千吧。。

有一个小的SSH技巧,是判断SSH命令执行成功与否,是否有返回值,不用IF,而直接用||和&&。

~~~~~~~~~~~~~~~~~~~~~

$?变量会被赋值为0,反之,赋值为-1。通过判断$?变量的方式确实可以满足我们的要求,但是需要用if判断,要写脚本,比较繁琐,有没有比较方便的命令呢。哈,肯定有的噻。

shell中还提供了快捷操作符: && 和 ||

// 此时存在/tmp/xxxx文件,执行了&&后面的命令
# ls /tmp/xxxx && echo '/tmp/xxxx exits'
/tmp/xxxx
/tmp/xxxx exits

// 此时存在/tmp/xxxx文件,不执行 || 后面的命令
# ls /tmp/xxxx || echo '/tmp/xxxx exits'
/tmp/xxxx

我们对上例可以这么分析,&& 签名的命令执行成功就执行后面的命令,|| 前面的命令执行失败才执行后面的命令。

~~~~~~~~~~

复制代码
#/bin/sh

time_inter_minute=50000
alert_count=85000000
head_count=20
log_path="/xxx/xxx/log.log"
last_time=`date "-d -${time_inter_minute} minute" '+%d/%b/%G:%H:%M:%S'`

now_time=`date '+%d/%b/%G:%H:%M:%S'`
now_time_str="[${now_time}"
last_time_str="[${last_time}"
echo "start time: " $last_time
echo "end time: " $now_time
echo "alert_count: " $alert_count

shell_out=`awk -v a=$last_time_str -v b=$now_time_str '$4 > a && $4 < b' $log_path|awk '{print $1}'|sort |uniq -c | sort -nr|head -10`
arra=($shell_out)
echo ${arra[@]}

for i in "${!arra[@]}"; do
    if [ `expr $i \% 2` -eq 0 ] ;then
    if [ ${arra[$i]} -gt $alert_count ] && [ ${arra[$i+1]} != "xx.xx.xx.xx" ] ; then
        /sbin/iptables -vnL|grep ${arra[$i+1]} && echo ${arra[$i+1]} "have added"
        /sbin/iptables -vnL|grep ${arra[$i+1]} || /sbin/iptables -I INPUT -s ${arra[$i+1]} -j DROP
    fi
    fi
done
复制代码

这个IP好过分哟

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享: