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访问纯真IP数据库脚本分享
Jun 29 Python
Python实时获取cmd的输出
Dec 13 Python
Linux下将Python的Django项目部署到Apache服务器
Dec 24 Python
Python爬虫实例_城市公交网络站点数据的爬取方法
Jan 10 Python
Python使用ConfigParser模块操作配置文件的方法
Jun 29 Python
如何用Python合并lmdb文件
Jul 02 Python
TensorFlow用expand_dim()来增加维度的方法
Jul 26 Python
Python中栈、队列与优先级队列的实现方法
Jun 30 Python
Django--权限Permissions的例子
Aug 28 Python
python+adb+monkey实现Rom稳定性测试详解
Apr 23 Python
Python datetime模块使用方法小结
Jun 18 Python
Python调用系统命令os.system()和os.popen()的实现
Dec 31 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
Codeigniter中mkdir创建目录遇到权限问题和解决方法
2014/07/25 PHP
PHP 网站修改默认访问文件的nginx配置
2017/05/27 PHP
详谈symfony window下的安装 安装时候出现的问题以及解决方法
2017/09/28 PHP
php中目录操作opendir()、readdir()及scandir()用法示例
2019/06/08 PHP
YII2.0框架行为(Behavior)深入详解
2019/07/26 PHP
一个简单的javascript类定义例子
2009/09/12 Javascript
JavaScript调用后台的三种方法实例
2013/10/17 Javascript
JS 实现BASE64_ENCODE和BASE64_DECODE(实例代码)
2013/11/13 Javascript
jQuery老黄历完整实现方法
2015/01/16 Javascript
实例解析JS布尔对象的toString()方法和valueOf()方法
2015/10/25 Javascript
深入学习JavaScript的AngularJS框架中指令的使用方法
2016/03/05 Javascript
jquery $.trim()去除字符串空格的实现方法【附图例】
2016/03/30 Javascript
js面向对象编程总结
2017/02/16 Javascript
详解Vue-cli 创建的项目如何跨域请求
2017/05/18 Javascript
深入理解基于vue-cli的vuex配置
2017/07/24 Javascript
实例详解vue.js浅度监听和深度监听及watch用法
2018/08/16 Javascript
通过实例学习React中事件节流防抖
2019/06/17 Javascript
js实现上下左右键盘控制div移动
2020/01/16 Javascript
JS代码优化的8点建议
2020/02/04 Javascript
Vue常用的全选/反选的示例代码
2020/02/19 Javascript
wepy--用vantUI 实现上弹列表并选择相应的值操作
2020/11/03 Javascript
Python中变量交换的例子
2014/08/25 Python
在Python下进行UDP网络编程的教程
2015/04/29 Python
Python中的os.path路径模块中的操作方法总结
2016/07/07 Python
Python使用sqlalchemy模块连接数据库操作示例
2019/03/13 Python
TensorFlow卷积神经网络之使用训练好的模型识别猫狗图片
2019/03/14 Python
解决Python计算矩阵乘向量,矩阵乘实数的一些小错误
2019/08/26 Python
eBay加拿大站:eBay.ca
2019/06/20 全球购物
美德好少年事迹材料
2014/01/19 职场文书
报社实习生自荐信
2014/01/24 职场文书
中专毕业生的自荐书
2014/07/01 职场文书
反对四风问题自我剖析材料
2014/09/29 职场文书
机关作风整顿个人整改措施思想汇报
2014/09/29 职场文书
2016年乡镇综治宣传月活动总结
2016/03/16 职场文书
2019军训心得体会
2019/06/27 职场文书
js前端图片加载异常兜底方案
2022/06/21 Javascript