来一个可能防止恶意采集和爬虫的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/shtime_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_countshell_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[@]}"; doif [ `expr $i \% 2` -eq 0 ] ;thenif [ ${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 DROPfifi
done
复制代码

这个IP好过分哟

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/294234.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++的复习

C++的复习 1、命名空间 C++语言引入命名空间(Namespace)这一概念主要是为了避免命名冲突,其关键字为namespace。 科技发展到如今,一个系统通常都不会仅由一个人来开发完成,不同的人开发同一个系统,不可避免地会出现变量或函数的命名冲突,当所有人的代码测试通过,没有…

面对焦虑,我们能做什么?

全世界只有3.14 % 的人关注了爆炸吧知识你在犹豫&#xff0c;你在抱怨&#xff0c;你埋怨这个社会的不公平&#xff1b;你埋怨自己的运气不好&#xff0c;你埋怨付出了得不到结果。其实你只是还不够努力。从此刻起开始改变自己一切还来得及。从现在开始&#xff0c;你有多努力就…

mysql主从日志的定期清理

mysql主从的binlog定时删除是很重要的&#xff0c;一般是通过expire_logs_days 10来设置binlog保留的天数&#xff08;mysql5.0一下版本不支持&#xff09;&#xff0c;但有时这还不够&#xff0c;假如有几天的日志量非常大&#xff0c;硬盘可能会满&#xff0c;所以不但要设置…

验证规则构建神器 FluentValidation.md

上一篇文章《MediatR在.NET应用中的实践》中&#xff0c;我们在讲MediatR的管线内容时&#xff0c;提到过可以在管线中增加 Command/Query 的验证。今天我来带领大家了解一个.NET技术领域中很「流行」的强类型验证规则构建库&#xff1a;FluentValidation。FluentValidation 简…

C++复习(二)

C++新增数据类型: C++仍然在使用C语言的 char、int、long 等基本数据类型,它们在现代操作系统(Windows XP、Win7、Win10 等)中的长度如下表所示: 说 明 字符型 短整型 整型 长整型 64位长整型 单精度浮点型 双精度浮点型 数据类型 char short int long …

oracle 函数 if 判断,oracle 判断中文函数

create or replace function func_chinese(p_str in varchar2, -- 输入的字符串p_code in varchar2, -- dump(字符串)p_chinese in pls_integer -- 1, 提取汉字, 非1, 提取非汉字) return varchar2asv_code varchar2(32767) : substr(p_code,instr(p_…

Fiddler进行模拟Post提交json数据,总为null解决方式

Request Headers: User-Agent: FiddlerHost: localhost:3248Content-Type: application/json; charsetutf-8 Content-Length: 63 要加上Content-Type: application/json; charsetutf-8&#xff0c;要不是JSON没效 Request Body {"UserID":4,"UserName":&q…

基本排序算法一

一 选择排序 原理&#xff1a;选择排序很简单&#xff0c;他的步骤如下&#xff1a; 从左至右遍历&#xff0c;找到最小(大)的元素&#xff0c;然后与第一个元素交换。从剩余未排序元素中继续寻找最小&#xff08;大&#xff09;元素&#xff0c;然后与第二个元素进行交换。以此…

老大爷的手法一看就不一般!

1 超市门口的双枪老大爷▼2 小朋友&#xff1a;谢邀&#xff0c;人在机场&#xff0c;刚下飞船▼3 向你保证这真的是一副刺绣作品▼4 外国最新挑战【我打我自己接力】▼5 疫情期间在家隔离的健身人士们快要被逼疯了▼6 给大家表演一个大变活人吧▼7 家有神兽的家长最近一…

Gamebryo实例学习之二BackgroundLoad

2019独角兽企业重金招聘Python工程师标准>>> 一、简介 后台加载允许应用程序以一个优先级低于主线程的后台线程来加载NIF文件。这个程序演示了如何使用BackgroundLoad后台加载。 二、解析 程序继承了实例基类NiSample。 CallbackStream继…

oracle创建public链接,如何在oracle直接使用地址来创建database link

在2个oracle之间手工同步数据时&#xff0c;DBlink是最快捷的手段之一吧。建dblink的时候需要知道待读取数据库的ip地址&#xff0c;ssid以及数据库用户名和密码。前提&#xff1a;创建dblink的用户有对应的数据库权限create public database link 或者create database link可以…

C++复习(三)

C++函数重载 实际开发中,有时我们要实现的是同一类的功能,只是有些细节不同。例如希望从3个数中找出其中的最大者,而每次求最大数时数据的类型不同,可能是3个整数、3个双精度数或3个长整数。在C语言中,程序员往往需要分别设计出3个不同名的函数,其函数原型与下面类似: i…

WPF 实现圣诞树

WPF开发者QQ群&#xff1a; 340500857 | 微信群 -> 进入公众号主页 加入组织由于微信群人数太多入群请添加小编微信号&#xff08;yanjinhuawechat&#xff09;或&#xff08;W_Feng_aiQ&#xff09;邀请入群&#xff08;需备注WPF开发者&#xff09;PS&#xff1a;有更好的…

sdut2784cf 126b Good Luck!(next数组)

链接 next数组的巧妙应用 学弟出给学弟的学弟的题。。 求最长的 是前缀也是后缀同时也是中缀的串 next的数组求的就是最长的前后缀 但是却不能求得中缀 所以这里 就把尾部去掉之后再求 这样就可以保证是中缀了 先把所有既是前缀也是后缀的长度的求出来标记 然后再去掉尾部 求…

Android文件Apk下载变ZIP压缩包解决方案

[root conf]# pwd /alidata/server/nginx/conf [root conf]# vi mime.typesapplication/vnd.android.package-archive apk; #增加加这一条位置大概&#xff1a; application/x-redhat-package-manager rpm;application/x-sea sea;application/x-shockwave…

聊一聊基于Nacos的metadata完成服务间的AB测试

背景 在很多时候&#xff0c;产品同学或其他 boss 会有一些想法&#xff0c;或好或坏&#xff0c;都会想放到线上环境去验证&#xff0c;看看能不能带来更好的效果。这其实就是一个提出假设和验证假设的过程&#xff0c;而 AB 测试&#xff0c;是验证假设的好方法。对于服务之间…

豆瓣评分9分+,每一部看完不禁感慨!这里是神州大地!

全世界只有3.14 % 的人关注了爆炸吧知识纪录片的一大重要意义&#xff0c;就在于它能将我们的视野和脚步&#xff0c;引向我们无法企及的地方和领域&#xff0c;又能让那些我们曾经到过的地方、经历过的人事&#xff0c;变得更有深意。今天&#xff0c;就给大家分享7部顶级纪录…

旅游社交网站 游范儿

为什么80%的码农都做不了架构师&#xff1f;>>> 应用名称&#xff1a;旅游社交网站 游范儿 应用URL地址&#xff1a;http://tumi.cloudfoundry.com/ 应用说明及使用场景&#xff1a; 用于爱好旅游的人士&#xff0c;发游记&#xff0c;以及所见所闻&#xff0c;…

C++复习(四)

C++引用(Reference) 引用(Reference)是C++相对于C语言的又一个扩充。引用类似于指针,只是在声明的时候用 & 取代了 *。引用可以看做是被引用对象的一个别名,在声明引用时,必须同时对其进行初始化。引用的声明方法如下: 类型标识符 &引用名 = 被引用对象 [例1]C…

jquery获取文档高度和窗口高度的例子

jquery获取文档高度和窗口高度&#xff0c;$(document).height()、$(window).height() $(document).height()&#xff1a;整个网页的文档高度 $(window).height()&#xff1a;浏览器可视窗口的高度 $(window).scrollTop()&#xff1a;浏览器可视窗口顶端距离网页顶端的高度&…