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清除字符串里非数字字符的方法
Jul 02 Python
浅析Python的Django框架中的Memcached
Jul 23 Python
numpy的文件存储.npy .npz 文件详解
Jul 09 Python
只需7行Python代码玩转微信自动聊天
Jan 27 Python
python将类似json的数据存储到MySQL中的实例
Jul 12 Python
python调用接口的4种方式代码实例
Nov 19 Python
python 微信好友特征数据分析及可视化
Jan 07 Python
Pytorch自己加载单通道图片用作数据集训练的实例
Jan 18 Python
Python Tornado批量上传图片并显示功能
Mar 26 Python
详解基于Facecognition+Opencv快速搭建人脸识别及跟踪应用
Jan 21 Python
pytorch 带batch的tensor类型图像显示操作
May 20 Python
Python中递归以及递归遍历目录详解
Oct 24 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
分享10段PHP常用代码
2015/11/11 PHP
javascript与CSS复习(三)
2010/06/29 Javascript
JQuery选择器特辑 详细小结
2012/05/14 Javascript
js实现带搜索功能的下拉框实时搜索实时匹配
2013/11/05 Javascript
javascript和jquery修改a标签的href属性
2013/12/16 Javascript
js获取元素相对窗口位置的实现代码
2014/09/28 Javascript
js实现一个链接打开两个链接地址的方法
2015/05/12 Javascript
全面解析JavaScript中的valueOf与toString方法(推荐)
2016/06/14 Javascript
jQuery实现拼图小游戏(实例讲解)
2017/07/24 jQuery
js实现复制功能(多种方法集合)
2018/01/06 Javascript
Vue2 轮播图slide组件实例代码
2018/05/31 Javascript
在Vue项目中取消ESLint代码检测的步骤讲解
2019/01/27 Javascript
bootstrap tooltips在 angularJS中的使用方法
2019/04/10 Javascript
详解vue页面首次加载缓慢原因及解决方案
2019/11/06 Javascript
在antd Form表单中select设置初始值操作
2020/11/02 Javascript
python访问sqlserver示例
2014/02/10 Python
Python中的深拷贝和浅拷贝详解
2015/06/03 Python
Django1.7+python 2.78+pycharm配置mysql数据库
2016/10/09 Python
Python导入模块时遇到的错误分析
2017/08/30 Python
Python实现的维尼吉亚密码算法示例
2018/04/12 Python
Python读取本地文件并解析网页元素的方法
2018/05/21 Python
Python模拟自动存取款机的查询、存取款、修改密码等操作
2018/09/02 Python
Python3中关于cookie的创建与保存
2018/10/21 Python
python爬取音频下载的示例代码
2020/10/19 Python
pip/anaconda修改镜像源,加快python模块安装速度的操作
2021/03/04 Python
一款纯css3实现简单的checkbox复选框和radio单选框
2014/11/05 HTML / CSS
Famous Footwear加拿大:美国多品牌运动休闲鞋店
2018/12/05 全球购物
酒店总经理工作职责
2013/12/13 职场文书
班长自荐书范文
2014/02/11 职场文书
机电专业大学生职业规划书范文
2014/02/25 职场文书
2015个人半年总结范文
2015/03/09 职场文书
办公室年度工作总结2015
2015/05/21 职场文书
合理化建议书范文
2015/09/14 职场文书
读《工匠精神》有感:热爱工作,精益求精
2019/12/28 职场文书
浅谈Python 中的复数问题
2021/05/19 Python
手把手教你从零开始react+antd搭建项目
2021/06/03 Javascript