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 相关文章推荐
不知道这5种下划线的含义,你就不算真的会Python!
Oct 09 Python
用uWSGI和Nginx部署Flask项目的方法示例
May 05 Python
PyQt5实现让QScrollArea支持鼠标拖动的操作方法
Jun 19 Python
PyTorch之图像和Tensor填充的实例
Aug 18 Python
Python os模块常用方法和属性总结
Feb 20 Python
Python编程快速上手——选择性拷贝操作案例分析
Feb 28 Python
文件上传服务器-jupyter 中python解压及压缩方式
Apr 22 Python
Python新手学习函数默认参数设置
Jun 03 Python
Python爬虫+Tkinter制作一个翻译软件的示例
Feb 20 Python
python 逐步回归算法
Apr 06 Python
Python实现打乒乓小游戏
Sep 25 Python
JAVA SpringMVC实现自定义拦截器
Mar 16 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
php Undefined index和Undefined variable的解决方法
2008/03/27 PHP
改变Apache端口等配置修改方法
2008/06/05 PHP
LotusPhp笔记之:Cookie组件的使用详解
2013/05/06 PHP
详解WordPress开发中get_header()获取头部函数的用法
2016/01/08 PHP
php resizeimage 部分jpg文件 生成缩略图失败的原因分析及解决办法
2016/03/23 PHP
基于jquery的15款幻灯片插件
2011/04/10 Javascript
js精度溢出解决方案
2012/12/02 Javascript
通过JavaScript使Div居中并随网页大小改变而改变
2013/06/24 Javascript
jQuery实现悬浮在右上角的网页客服效果代码
2015/10/24 Javascript
javascript 数组的正态分布排序的问题
2016/07/31 Javascript
AngularJS实践之使用NgModelController进行数据绑定
2016/10/08 Javascript
JavaScript实现水平进度条拖拽效果
2017/01/18 Javascript
jQuery排序插件tableSorter使用方法
2017/02/10 Javascript
TypeScript入门-基本数据类型
2017/03/28 Javascript
深入理解Node中的buffer模块
2017/06/03 Javascript
详解React 服务端渲染方案完美的解决方案
2018/12/14 Javascript
深入理解webpack process.env.NODE_ENV配置
2020/02/23 Javascript
js如何验证密码强度
2020/03/18 Javascript
JavaScript arguments.callee作用及替换方案详解
2020/09/02 Javascript
Python实现比较两个文件夹中代码变化的方法
2015/07/10 Python
Python二叉搜索树与双向链表转换实现方法
2016/04/29 Python
python3+PyQt5自定义视图详解
2018/04/24 Python
对python使用telnet实现弱密码登录的方法详解
2019/01/26 Python
对Python 多线程统计所有csv文件的行数方法详解
2019/02/12 Python
Python 存储字符串时节省空间的方法
2019/04/23 Python
基于python分析你的上网行为 看看你平时上网都在干嘛
2019/08/13 Python
Django 实现 Websocket 广播、点对点发送消息的代码
2020/06/03 Python
如何Tkinter模块编写Python图形界面
2020/10/14 Python
Python爬虫UA伪装爬取的实例讲解
2021/02/19 Python
世界排名第一的运动鞋市场:Flight Club
2020/01/03 全球购物
大学生毕业的自我评价分享
2014/01/02 职场文书
警察思想汇报
2014/01/04 职场文书
信息技术专业大学生职业生涯规划书
2014/01/24 职场文书
九年级物理教学反思
2014/01/29 职场文书
《只有一个地球》教学反思
2014/02/14 职场文书
学校副校长四风对照检查材料整改措施
2014/09/25 职场文书