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字符和字符值(ASCII或Unicode码值)转换方法
May 21 Python
Python中二维列表如何获取子区域元素的组成
Jan 19 Python
Python中xrange与yield的用法实例分析
Dec 26 Python
对Python中9种生成新对象的方法总结
May 23 Python
安装好Pycharm后如何配置Python解释器简易教程
Jun 28 Python
Python 基于wxpy库实现微信添加好友功能(简洁)
Nov 29 Python
Python实现银行账户资金交易管理系统
Jan 03 Python
Python基于gevent实现高并发代码实例
May 15 Python
解决python图像处理图像赋值后变为白色的问题
Jun 04 Python
Java如何基于wsimport调用wcf接口
Jun 17 Python
使用jupyter notebook运行python和R的步骤
Aug 13 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中的时间处理
2006/10/09 PHP
PHP中的extract的作用分析
2008/04/09 PHP
用PHP将网址字符串转换成超链接(网址或email)
2010/05/25 PHP
php利用腾讯ip分享计划获取地理位置示例分享
2014/01/20 PHP
php外部执行命令函数用法小结
2016/10/11 PHP
dojo随手记 gird组件引用
2011/02/24 Javascript
JavaScript中函数声明优先于变量声明的实例分析
2012/03/01 Javascript
Javascript的&amp;&amp;和||的另类用法
2014/07/23 Javascript
jQuery的context属性用法实例
2014/12/27 Javascript
12个超实用的JQuery代码片段
2015/11/02 Javascript
全面了解js中的script标签
2016/07/04 Javascript
原生js实现tab选项卡切换
2020/03/23 Javascript
bootstrap下拉菜单使用方法解析
2017/01/13 Javascript
Vue.js如何优雅的进行form validation
2017/04/07 Javascript
vue中过滤器filter的讲解
2019/01/21 Javascript
vue-cli创建的项目中的gitHooks原理解析
2020/02/14 Javascript
vue 获取到数据但却渲染不到页面上的解决方法
2020/11/19 Vue.js
[02:35]DOTA2超级联赛专访XB 难忘一年九冠称王
2013/06/20 DOTA
[13:39]2014 DOTA2华西杯精英邀请赛 5 25 NewBee VS DK第一场
2014/05/26 DOTA
Python中的CURL PycURL使用例子
2014/06/01 Python
Python中文竖排显示的方法
2015/07/28 Python
利用标准库fractions模块让Python支持分数类型的方法详解
2017/08/11 Python
Python协程的用法和例子详解
2017/09/09 Python
Java与Python两大幸存者谁更胜一筹呢
2018/04/12 Python
Python pandas实现excel工作表合并功能详解
2019/08/29 Python
Python流程控制 if else实现解析
2019/09/02 Python
Pycharm中切换pytorch的环境和配置的教程详解
2020/03/13 Python
Python3爬虫中Selenium的用法详解
2020/07/10 Python
DRF使用simple JWT身份验证的实现
2021/01/14 Python
CSS3正方体旋转示例代码
2013/08/08 HTML / CSS
css3使网页、图片变成灰色兼容大多数浏览器
2014/07/02 HTML / CSS
细说CSS3中box属性中的overflow-x属性和overflow-y属性值的效果
2014/07/21 HTML / CSS
为什么需要版本控制?
2013/08/08 面试题
请说出以下代码输出什么
2013/08/30 面试题
初中校园之声广播稿
2014/01/15 职场文书
小学三八妇女节活动总结
2015/02/06 职场文书