python实现的防DDoS脚本


Posted in Python onFebruary 08, 2011

这篇博可以说连开场白都可以省掉了,之所以被DDoS,并不是因为惹了疯狗被追着咬,而是因为VC悲剧之后流量全到simplecd来了。
不仅如此,一些笨蛋们在抓站,一些笨蛋们在用迅雷下载,100Mbps的端口居然已经满负荷运作十几个小时了,这是什么概念?100Mbps满负荷1天,流量就是1000G,这样下去不用多久,我就可以等着上百刀的罚单了,泪飙。
此外,100Mbps的速度使得硬盘都快转不动了,严重拖累网站的响应速度,卡得我欲仙欲死啊真是。想当年VC挂了一天,被抓站的家伙们搞得一个礼拜半残废状态(其中那些家伙包括我在内,汗)。simplecd就更支撑不了了。
事实上这种人肉DDoS比正常的DDoS更加难以区分和预防,不过也就只能尽人事,听天命了,参考一些文章写了个python的防止DDoS的脚本,加入cron每分钟执行即可。
实现原理是,查询netstat的连接数,同IP超过一定连接的用iptables封禁一定时间,自动封禁,自动解封。

from subprocess import Popen,PIPE 
import re 
import time 
import sqlite3 
CONCURRENCY_ALLOWED = 30 
OUTDATE_TIME = 86400 
# initializing database 
db = sqlite3.connect("/tmp/ddos.db3") 
c = db.cursor() 
try: 
c.execute("create table ddos (ip text unique,date integer);") 
except: 
print "database exists" 
# blocking ips has more than CONCURRENCY_ALLOWED connections 
pipe = Popen("netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n > /tmp/ddos.txt",shell=True,bufsize=1024,stdout=PIPE).stdout 
#ddos = pipe.read() 
ddos = open("/tmp/ddos.txt").read() 
ct = re.compile(r"(\S+)\s+(\S+).*\n").findall(ddos) 
for count,ip in ct: 
if int(count)>CONCURRENCY_ALLOWED and (ip != "127.0.0.1") and (not ip.startswith("192.168")): 
out = Popen("iptables -I INPUT -s %s -j DROP"%ip,shell=True,bufsize=1024,stdout=PIPE).stdout 
print "blocking %s for %s visits" % (ip,count) 
c.execute('replace into ddos values (?,?)',(ip,int(time.time()))) 
time.sleep(0.1) 
db.commit() 
# unblocking outdated blockings 
c.execute("select * from ddos") 
ddos = c.fetchall() 
for ip,date in ddos: 
if date + OUTDATE_TIME < time.time(): 
c.execute("delete from ddos where ip=?",(ip,)) 
print "unblocking %s" % ip 
out = Popen("iptables -D INPUT -s %s -j DROP"%ip,shell=True,bufsize=1024,stdout=PIPE).stdout 
time.sleep(0.1) 
db.commit()

目前来说这个脚本的效果是0,封了500多号人了,但是还是满速,真是可怕。
24日 更新:
同时用这个脚本,外加转移桌面版的站点到一个10M unlimited的地方以后,似乎天下太平了(吗?)
python实现的防DDoS脚本
Python 相关文章推荐
Python、Javascript中的闭包比较
Feb 04 Python
详解K-means算法在Python中的实现
Dec 05 Python
Sanic框架路由用法实例分析
Jul 16 Python
Python完成毫秒级抢淘宝大单功能
Jun 06 Python
Python GUI学习之登录系统界面篇
Aug 21 Python
Python对称的二叉树多种思路实现方法
Feb 28 Python
Django用户身份验证完成示例代码
Apr 03 Python
python实现小程序推送页面收录脚本
Apr 20 Python
Keras - GPU ID 和显存占用设定步骤
Jun 22 Python
Python实现定时监测网站运行状态的示例代码
Sep 30 Python
Jupyter Notebook 远程访问配置详解
Jan 11 Python
利用Python函数实现一个万历表完整示例
Jan 23 Python
Python牛刀小试密码爆破
Feb 03 #Python
初学python数组的处理代码
Jan 04 #Python
让python json encode datetime类型
Dec 28 #Python
让python的Cookie.py模块支持冒号做key的方法
Dec 28 #Python
python封装对象实现时间效果
Apr 23 #Python
python下函数参数的传递(参数带星号的说明)
Sep 19 #Python
Python 元类使用说明
Dec 18 #Python
You might like
星际争霸 Starcraft 游戏介绍
2020/03/14 星际争霸
js控制框架刷新
2008/08/01 Javascript
jQuery解决iframe高度自适应代码
2009/12/20 Javascript
javascript 数据类型转换(parseInt,parseFloat)
2010/07/20 Javascript
javascript开发技术大全-第1章javascript概述
2011/07/03 Javascript
JQuery选择器特辑 详细小结
2012/05/14 Javascript
js使用数组判断提交数据是否存在相同数据
2013/11/27 Javascript
jquery实现效果比较好的table选中行颜色
2014/03/25 Javascript
JSONP跨域GET请求解决Ajax跨域访问问题
2014/12/31 Javascript
每天一篇javascript学习小结(Array数组)
2015/11/11 Javascript
AngularJs验证重复密码的方法(两种)
2016/11/25 Javascript
AngularJS+Bootstrap3多级导航菜单的实现代码
2017/08/16 Javascript
JavaScript创建对象的七种方式全面总结
2017/08/21 Javascript
EasyUI实现下拉框多选功能
2017/11/07 Javascript
Angular ui-roter 和AngularJS 通过 ocLazyLoad 实现动态(懒)加载模块和依赖
2018/11/25 Javascript
更强大的vue ssr实现预取数据的方式
2019/07/19 Javascript
详解Vue.js和layui日期控件冲突问题解决办法
2019/07/25 Javascript
js实现转动骰子模型
2019/10/24 Javascript
解决Vue打包上线之后部分CSS不生效的问题
2019/11/12 Javascript
在微信小程序中使用mqtt服务的方法
2019/12/13 Javascript
Node.js中的异步生成器与异步迭代详解
2021/01/31 Javascript
[45:14]Optic vs VP 2018国际邀请赛淘汰赛BO3 第二场 8.24
2018/08/25 DOTA
Linux下通过python访问MySQL、Oracle、SQL Server数据库的方法
2016/04/23 Python
Python设计模式之抽象工厂模式
2016/08/25 Python
python使用Plotly绘图工具绘制柱状图
2019/04/01 Python
python3 pygame实现接小球游戏
2019/05/14 Python
如何将你的应用迁移到Python3的三个步骤
2019/12/22 Python
python 将html转换为pdf的几种方法
2020/12/29 Python
pandas 按日期范围筛选数据的实现
2021/02/20 Python
个性与发展自我评价
2014/02/11 职场文书
大型会议接待方案
2014/03/01 职场文书
网络管理员岗位职责
2014/03/17 职场文书
应届生求职信范文
2014/05/26 职场文书
小学教师求职信范文
2015/03/20 职场文书
MySQL 不等于的三种使用及区别
2021/06/03 MySQL
自动在Windows中运行Python脚本并定时触发功能实现
2021/09/04 Python