Python3+slowloris安装使用教程
一、说明
今天提到slowloris,这东西看着很眼熟,应该是以前局方打算用来刷竞赛积分的工具。我总觉得DoS没什么意思,但记不得怎么用了所以还是研究一下。
二、安装
slowloris就是一个python库直接用pip安装就可以了。但要使用slowloris命令注意要么切换到当前python环境的Scripts目录,要么将该目录加入到环境变量。
pip install slowloris

三、使用
最简单的,直接slowloris后加ip或域名即可,如:
slowloris 192.168.1.1
但是默认是150个连接效果可能不明显,可以使用-s参数指定连接数,如1000。具体参数说明如下:
(pytest) C:\Users\ls>slowloris -h
usage: slowloris.exe [-h] [-p PORT] [-s SOCKETS] [-v] [-ua] [-x]
[--proxy-host PROXY_HOST] [--proxy-port PROXY_PORT]
[--https]
[host] Slowloris, low bandwidth stress test tool for websites positional arguments:
host Host to perform stress test on optional arguments:
-h, --help show this help message and exit
-p PORT, --port PORT Port of webserver, usually 80
-s SOCKETS, --sockets SOCKETS
Number of sockets to use in the test
-v, --verbose Increases logging
-ua, --randuseragents
Randomizes user-agents with each request
-x, --useproxy Use a SOCKS5 proxy for connecting
--proxy-host PROXY_HOST
SOCKS5 proxy host
--proxy-port PROXY_PORT
SOCKS5 proxy port
--https Use HTTPS for the requests
四、原理探究
4.1 DoS原理说明
slowloris本质就只是一个简短的python程序,要弄清原理直接看源代码即可。
代码地址:https://github.com/gkbrk/slowloris/blob/master/slowloris.py
首先是随便请求一个不存在的url建立socket连接:

然后最关键的是如下片段:向所有建立好的socket发送一个”X-a:“的消息,保证socket不被服务器因空闲超时而关闭;有多少个socket不可用就重新创多少个socket;每15秒执行一轮。

很多文章说slowloris原理是发一个很长的body然后半天没给服务器发完,通过这种形式占用服务器连接。但从代码上看并非如此,slowloris就只是一个tcp全连接的DoS(除非上边的代码不是所说的slowloris)

而且测试中发现,slowloris试图通过”X-a:“存活链接的愿望并没有实现,服务器在响应完之后直接把端口给关闭了。(不知是否取决于所用web服务器)
如下图是上图数据流对应的数据包,当slowloris试图向服务端发送”X-a:“时,服务端直接表示RST。

虽然存活不成功,但slowloris还是能DoS的,因为有”有多少个socket不可用就重新创多少个socket“的机制,slowloris仍能占用服务器资源。
(整个分析过程应该是没问题的,但如果是这样slowloris和tcp全连接DoS有什么区别呢,为什么很多人都夸他这不应该啊,不懂哪里出了问题)
4.2 slowloris能建立的连接很少浏览器却能成功访问、仿佛DoS失效问题探究
昨天同事反映说建立不了连接,自己看了一下连接还是可以建的,但是一直都是几个;这边建不了更多连接数据包发送很少很慢,但浏览器却可以访问页面,这就很神奇了。

直接下载源代码进行调试,源代码:https://github.com/gkbrk/slowloris/blob/master/slowloris.py
开始一直以为是目标网站启用了https,而该工具对ssl连接建立处理有问题。但一方面从代码上看不出有什么问题,另一方面从wireshark抓取到的数据包看,http内容是成功发送了的,即上图中的3个6个连接是成功建立了的。没理由同样的代码,一些连接ssl处理有问题一些没有问题,即问题不应该与是http还是https有关系。
继续调试发现在循环建立几个连接之后就抛出异常,抛出异常之后就break,break之后就sleep。抛出异常的原因是SSL连接建立过程中被服务器RST掉了,建立一部分连接后就不允许新建,这种现像明显是服务器端设置了连接个数限制。问题分析到这就比较明白了。
建立连接的个数很少的原因是:循环建立连接过程中,只要出现异常,就不会继续建了。
出现工具建不了新连接浏览器却可以访问的原因是:sleep时间段内工具建立的连接悉数被关闭,就腾出了连接使得浏览器能够成功访问;具体内言浏览器在工具出现except时间前后也是不能访问的,只有在sleep一段时间后(连接被腾出后)浏览器才能成功访问。
总而言之,“DoS失效”这个问题有两个成因,一是服务端做了连接个数限制,二是默认sleep 15秒太长了;前者我们做为客户端无能为力,但可通过后者缩短休眼时间来解决(新版的有--sleeptime参数可直接配置休眼时间,旧版的没有)。


参考:
https://github.com/gkbrk/slowloris
Python3+slowloris安装使用教程的更多相关文章
- 2018超详细sublime text3+python3.x安装配置教程(附常用插件安装教程)
导读 本文是关于2018年7月最新版sublime text3+pythin3.x下载及安装配置教程,sublime text3版本为3176,python版本为3.7,安装环境是基于windows1 ...
- Python3+Flask安装使用教程
一.环境配置 当前我的开发环境是Miniconda3+PyCharm.开发环境其实无所谓,自己使用Python3+Nodepad都可以.安装Flask库: pip install Flask 二.第一 ...
- Python3+Appium安装使用教程
一.安装 我们知道selenium是桌面浏览器自动化操作工具(Web Browser Automation) appium是继承selenium自动化思想旨在使手机app操作也能自动化的工具(Mobi ...
- Python3+mitmproxy安装使用教程(Windows)
一.安装 1.1 安装mitmproxy 直接使用pip安装即可 pip install mitmproxy pip本质上会一是安装mitmproxy库的相关代码,二是安装mitmproxy.exe/ ...
- Python3+Scapy安装使用教程
一.说明 之前写DoS程序的时候(见"拒绝服务(DoS)理解.防御与实现"),数据包完全是自己构造的,这其中的难处一是要清楚各层协议的字段.字段长度.字段是数值还是字符.大头还是小 ...
- Python3+mitmproxy安装使用教程(Windows)(转载)
mitmproxy 是用于MITM的proxy,MITM中间人攻击.说白了就是服务器和客户机中间通讯多增加了一层.跟Fiddler和Charles最大的不同就是,mitmproxy可以进行二次开发,尤 ...
- Python3 turtle安装和使用教程
Python3 turtle安装和使用教程 Turtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x.纵轴为y的坐标系原点,(0,0)位置开始,它根据一组函数 ...
- Python3.x安装教程及环境变量配置
python3.x安装 1.直接到官网https://www.python.org/下载,安装就可以了. 2.安装比较简单,点exe文件一直下一步就可以了(注意:安装的时候有个选择是否添加环境变量,这 ...
- [No00004B]Windows 下面为Python3.5安装NoteBook
python3.5安装NoteBook,网上搜了一下教程,几乎很多转帖,或者是2.x版本的,很少有直接可以用的.自己琢磨了一下午,终于搞定了,现在贴出来.希望大家以后转帖什么的都先测试一下,互联网时代 ...
随机推荐
- js let
<script> var a; // 变量提升 js中的作用域只有在函数中 {} 才称为作用域 if/for循环都不是 都会产生变量提升 console.log(a); { a = 2; ...
- C# Thread.Jion()
什么是进程? 当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源. 而一个进程又是由多个线程所组成的. 什么是线程? 线程是程序中的一个执行流,每个线程都有自己的 ...
- [转载]ISO 8601规则
1.每年有52周或者53周2.周一至周日为一个完整周.3.每周的周一是该周的第1天.周日是该周的第7天4.每年的第一周 为 每年的第一个周四所在的周.比如 2017年1月5日为当年的第一个周四,那么 ...
- 克服"水土不服",融云助攻小象直播杀破"出海重围"
2016年是直播行业被资本疯狂追逐的一年,可至今却经历着“浪潮”褪去,洗刷的不止是中小型直播平台,就连熊猫TV等有资本加持的大平台都纷纷遭遇倒闭危机.然而,直播行业作为泛娱乐的模式之一,其实本身“未死 ...
- 2.2JAVA基础复习——JAVA语言的基础组成运算符和语句
JAVA语言的基础组成有: 1.关键字:被赋予特殊含义的单词. 2.标识符:用来标识的符号. 3.注释:用来注释说明程序的文字. 4.常量和变量:内存存储区域的表示. 5.运算符:程序中用来运算的符号 ...
- linux awk用法
awk是一个强大的文本分析工具,在对数据进行分析并生成报告时显得尤为强大. 使用方法:awk [options] 'BEGIN{ commands } pattern{ commands } END ...
- Vue PC后台系统组件大全
1.https://vue.ant.design/ 2.http://element-cn.eleme.io/#/zh-CN 3.https://www.iviewui.com/ 4.https:// ...
- Laravel用post提交表单常见的两个错误
最近在自学Laravel,测试用post方法提交表单时碰到两个错误: 1.获取传入的值时,报错如下图所示: 在stackFlow找答案时各种解释都有,但认真读一下报错信息,意思大概是:获取Http传入 ...
- Codeforces Round #503 (by SIS, Div. 2)
连接:http://codeforces.com/contest/1020 C.Elections 题型:你们说水题就水题吧...我没有做出来...get到了新的思路,不虚.好像还有用三分做的? KN ...
- java.io.IOException: Attempted read from closed stream
前言: 代码如下,执行的时候提示"java.io.IOException: Attempted read from closed stream." public static JS ...