下面我将详细解释 slowhttptest 的各种参数,并提供一个实用的示例。

核心参数分类
slowhttptest 的参数可以分为以下几大类:
- 基本参数:定义测试的核心信息,如 URL、测试类型、并发连接数等。
- 攻击参数:精确控制攻击行为,如延迟时间、数据传输速率、攻击持续时间等。
- 输出参数:指定测试结果的保存位置和格式。
- 高级/辅助参数:用于更复杂的场景,如认证、自定义数据、版本信息等。
详细参数说明
基本参数
| 参数 | 全称/说明 | 示例 | 备注 |
|---|---|---|---|
-u |
--url |
-u http://test.com/login.php |
必需参数,指定要测试的目标 URL。 |
-a |
--attackType |
-a 3 |
必需参数,指定攻击类型。 |
| 类型代码: | |||
1: Slowloris (慢速发送头部) |
|||
2: Slowloris (慢速发送数据,在 POST 请求中) |
|||
3: Slow Read (慢速读取响应) |
|||
4: Slow Post (慢速发送 POST 数据) |
|||
5: Range Header (发送带有超大 Range 的请求) |
|||
6: Cookie (在 Cookie 中注入大量数据) |
|||
7: Header (在 HTTP 头中注入大量数据) |
|||
-c |
--concurrency |
-c 50 |
必需参数,并发连接的总数。 |
-r |
--rate |
-r 10 |
每秒创建的连接数,如果为 0,则所有连接瞬间创建。 |
-x |
--contentLength |
-x 2048 |
仅用于攻击类型 2 和 4,POST 请求的总数据长度(字节)。 |
-p |
--pipeline |
-p 1 |
每个连接中包含的请求数,用于 Slowloris 攻击,保持连接持续发送数据。 |
-l |
--duration |
-l 300 |
必需参数,测试的持续时间(秒)。 |
-m |
--maxSecondsWait |
-m 20 |
仅用于攻击类型 3 (Slow Read),读取每个响应块后等待的最大秒数。 |
-H |
--header |
-H "X-Test: value" |
自定义 HTTP 请求头,可以多次使用 -H 来添加多个头。 |
攻击参数
| 参数 | 全称/说明 | 示例 | 备注 |
|---|---|---|---|
-g |
--http-method |
-g POST |
仅用于攻击类型 4 (Slow Post),指定 HTTP 方法,通常是 POST。 |
-d |
--data |
-d "username=admin&password=" |
仅用于攻击类型 4 (Slow Post),POST 请求的初始数据。 |
-e |
--data-file |
-e post_data.txt |
仅用于攻击类型 4 (Slow Post),从文件中读取 POST 数据。 |
-n |
--data-size |
-n 1024 |
仅用于攻击类型 4 (Slow Post),每次发送的数据块大小(字节)。 |
-t |
--data-interval |
-t 10 |
仅用于攻击类型 4 (Slow Post),每次发送数据块之间的间隔(毫秒)。 |
-i |
--read-interval |
-i 10 |
仅用于攻击类型 3 (Slow Read),每次读取响应数据块之间的间隔(毫秒)。 |
-s |
--content-size |
-s 1024 |
仅用于攻击类型 3 (Slow Read),期望的响应内容大小(字节),如果响应比这大,攻击效果更好。 |
输出参数
| 参数 | 全称/说明 | 示例 | 备注 |
|---|---|---|---|
-o |
--output |
-o results.txt |
必需参数,测试结果的输出文件路径。 |
-v |
--verbose |
-v 2 |
详细级别,0: 静默, 1: 正常, 2: 详细, 3: 调试。 |
高级/辅助参数
| 参数 | 全称/说明 | 示例 | 备注 |
|---|---|---|---|
-C |
--connections |
-C 100 |
每个并发连接中包含的请求数(与 -p 类似,但语义不同)。 |
-k |
--keep-alive |
-k 1 |
使用 HTTP Keep-Alive 连接,1 为开启,0 为关闭。 |
-b |
--body |
-b "some body data" |
请求体的初始内容。 |
-f |
--file |
-f headers.txt |
从文件中读取自定义 HTTP 头。 |
-S |
--status-code |
-S 200 |
仅用于攻击类型 3 (Slow Read),期望的 HTTP 状态码。 |
-V |
--version |
-V |
显示版本信息并退出。 |
-h |
--help |
-h |
显示帮助信息并退出。 |
常用攻击场景示例
场景 1:Slowloris 攻击 (模拟慢速发送头部,耗尽服务器连接)
这是最常见的攻击类型,通过不完整地发送 HTTP 头,保持大量连接打开,耗尽服务器的连接池资源。
slowhttptest \ -u http://test.com/ \ -a 1 \ # 攻击类型 1: Slowloris -c 200 \ # 200 个并发连接 -r 20 \ # 每秒创建 20 个连接 -p 1 \ # 每个连接只发送 1 个不完整的请求 -l 300 \ # 持续 300 秒 -v 2 \ # 详细输出 -o slowloris_results.txt
攻击原理:这个命令会向 test.com 发起 200 个并发连接,每个连接会发送一个不完整的 HTTP 头(只发送 GET / HTTP/1.1 和部分 Host、User-Agent 头,但不发送最后的 \r\n\r\n 来结束请求),从而将连接卡住,占用服务器资源。
场景 2:Slow Post 攻击 (模拟慢速发送 POST 数据)
这种攻击针对需要处理表单提交的页面,通过极慢的速度发送 POST 数据,使服务器的请求处理线程长时间被占用。
slowhttptest \ -u http://test.com/login.php \ -a 4 \ # 攻击类型 4: Slow Post -c 100 \ # 100 个并发连接 -r 10 \ # 每秒创建 10 个连接 -x 10240 \ # POST 数据总长度为 10KB -n 100 \ # 每次发送 100 字节的数据块 -t 1000 \ # 每次发送数据块后等待 1000 毫秒 (1秒) -d "username=admin&password=" \ # POST 的初始数据 -l 300 \ # 持续 300 秒 -v 2 \ -o slowpost_results.txt
攻击原理:该命令会向 login.php 发起 100 个并发 POST 请求,每个请求会发送一个初始的 username=admin&password=,然后以每秒 100 字节的速度,花费 100 秒才能发送完 10KB 的数据,这使得服务器的每个请求处理线程都被长时间占用。
场景 3:Slow Read 攻击 (模拟慢速读取响应)
这种攻击针对服务器返回大量数据的页面,客户端正常发送请求,但在读取服务器响应时故意放慢速度,导致服务器的输出缓冲区被占满,无法处理其他请求。
slowhttptest \ -u http://test.com/largefile.html \ -a 3 \ # 攻击类型 3: Slow Read -c 150 \ # 150 个并发连接 -r 15 \ # 每秒创建 15 个连接 -s 1048576 \ # 期望响应大小为 1MB -m 10 \ # 读取响应块后最多等待 10 秒 -i 1000 \ # 每次读取数据块后等待 1000 毫秒 (1秒) -l 300 \ # 持续 300 秒 -v 2 \ -o slowread_results.txt
攻击原理:客户端向 largefile.html 发起请求,正常接收响应,但在读取响应内容时,每次只读一小部分,然后等待 1 秒,再读下一部分,这种慢速读取会占用服务器的输出缓冲区,可能导致服务器无法为新的客户端提供服务。
如何解读测试结果
测试结束后,slowhttptest 会生成一个结果文件(如 slowloris_results.txt),这个文件是 CSV 格式的,你可以用 Excel 或任何文本编辑器打开。
关键指标包括:
total_connections: 成功创建的总连接数。error_connections: 因服务器错误(如连接超时、重置)而失败的连接数。- **`time_to_first_byte``: 收到服务器第一个字节响应的平均时间。
time_to_last_byte: 收到服务器最后一个字节响应的平均时间。
分析要点:
- 成功连接数高:说明服务器可能没有对慢速攻击进行有效防御,大量连接被建立并保持。
- 错误连接数高:说明服务器可能在检测到攻击后主动重置了连接,这是一个积极的信号。
- 响应时间异常:如果攻击有效,服务器的响应时间会显著增加,甚至超时。
通过分析这些数据,你可以评估服务器在慢速攻击下的表现,并据此调整服务器配置(如调整 KeepAlive 超时、限制单IP连接数、启用Web应用防火墙规则等)或优化应用程序代码。
