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中实现定制类的特殊方法总结
Sep 28 Python
Python函数式编程指南(一):函数式编程概述
Jun 24 Python
Python设置Socket代理及实现远程摄像头控制的例子
Nov 13 Python
详解Python list 与 NumPy.ndarry 切片之间的对比
Jul 24 Python
Python基于回溯法子集树模板解决最佳作业调度问题示例
Sep 08 Python
Ubuntu下Python+Flask分分钟搭建自己的服务器教程
Nov 19 Python
使用PyTorch实现MNIST手写体识别代码
Jan 18 Python
Django-migrate报错问题解决方案
Apr 21 Python
Django分组聚合查询实例分享
Apr 29 Python
Python数据可视化实现漏斗图过程图解
Jul 20 Python
python归并排序算法过程实例讲解
Nov 04 Python
浅谈Selenium 控制浏览器的常用方法
Dec 04 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
NO3第三帝国留言簿制作过程
2006/10/09 PHP
在PHP中使用Sockets 从Usenet中获取文件
2008/01/10 PHP
深入PHP数据加密详解
2013/06/18 PHP
PHP中获取时间的下一周下个月的方法
2014/03/18 PHP
PHP动态生成javascript文件的2个例子
2014/04/11 PHP
php中unserialize返回false的解决方法
2014/09/22 PHP
详解PHP使用Redis存储session时的一个Warning定位
2017/07/05 PHP
javascript设计模式 接口介绍
2012/07/24 Javascript
js+html+css实现鼠标移动div实例
2013/01/30 Javascript
如何使用JS获取IE上传文件路径(IE7,8)
2013/07/08 Javascript
js jquery获取随机生成id的服务器控件的三种方法
2013/07/11 Javascript
node.js集成百度UE编辑器
2015/02/05 Javascript
JS实现鼠标点击展开或隐藏表格行的方法
2015/03/03 Javascript
javascript常用正则表达式汇总
2015/07/31 Javascript
jQuery插件开发汇总
2016/05/15 Javascript
JavaScript遍历求解数独问题的主要思路小结
2016/06/12 Javascript
BootStrap智能表单实战系列(九)表单图片上传的支持
2016/06/13 Javascript
详解vue 组件之间使用eventbus传值
2017/10/25 Javascript
vue单文件组件lint error自动fix与styleLint报错自动fix详解
2019/01/08 Javascript
jQuery事件绑定和解绑、事件冒泡与阻止事件冒泡及弹出应用示例
2019/05/13 jQuery
Vue基础学习之项目整合及优化
2019/06/02 Javascript
layer ui插件显示tips时,修改字体颜色的实现方法
2019/09/11 Javascript
Webpack的Loader和Plugin的区别
2020/11/09 Javascript
uniapp微信小程序:key失效的解决方法
2021/01/20 Javascript
[04:46]2018年度玩家喜爱的电竞媒体-完美盛典
2018/12/16 DOTA
机器学习python实战之决策树
2017/11/01 Python
Python2与python3中 for 循环语句基础与实例分析
2017/11/20 Python
Python实现将多个空格换为一个空格.md的方法
2018/12/20 Python
Python提取转移文件夹内所有.jpg文件并查看每一帧的方法
2019/06/27 Python
python不到50行代码完成了多张excel合并的实现示例
2020/05/28 Python
基于python实现可视化生成二维码工具
2020/07/08 Python
python实现图像随机裁剪的示例代码
2020/12/10 Python
意大利在线药房:Saninforma
2021/02/11 全球购物
环境工程求职简历的自我评价范文
2013/10/24 职场文书
小学六年级学生评语
2014/04/22 职场文书
党的群众路线教育实践活动对照检查材料(教师)
2014/09/24 职场文书