Siege:开源的 HTTP/FTP 压力测试与基准评估工具!全参数详细教程!Kali Linux教程!

发布于:2025-05-28 ⋅ 阅读:(17) ⋅ 点赞:(0)

简介

Siege 是一款回归测试和基准测试实用程序。它可以使用用户定义的模拟用户数量对单个 URL 进行压力测试,也可以将多个 URL 读入内存并同时对其进行压力测试。程序会报告记录的总点击次数、传输的字节数、响应时间、并发性和返回状态。Siege 支持 HTTP/1.0 和 1.1 协议、GET 和 POST 指令、Cookie、事务日志和基本身份验证。其功能可根据每个用户进行配置。

注意:此软件包包含已启用 HTTPS 支持的 siege,因此它现已取代 siege-ssl 软件包。

Siege 是一款开源回归测试和基准测试实用程序。它可以使用用户定义的模拟用户数量对单个 URL 进行压力测试,也可以将多个 URL 读入内存并同时对其进行压力测试。程序会报告记录的总点击次数、传输的字节数、响应时间、并发性和返回状态。Siege 支持 HTTP/1.0 和 1.1 协议、GET 和 POST 指令、Cookie、事务日志和基本身份验证。其功能可根据每个用户进行配置。

大多数功能都可以通过命令行选项进行配置,这些选项还包含默认值,以最大限度地降低程序调用的复杂性。Siege 允许您使用 n 个用户对 Web 服务器进行 t 次压力测试,其中 n 和 t 由用户定义。它会记录测试的持续时间以及每个事务的持续时间。它报告事务数量、耗时、传输字节数、响应时间、事务速率、并发性以及服务器响应 OK(即状态码 200)的次数。

Siege 由 Jeffrey Fulmer 在担任 Armstrong World Industries 网站管理员期间设计和实现。它部分模仿了 Lincoln Stein 的 torture.pl,其数据报告方式也几乎完全相同。但 torture.pl 不允许同时对多个 URL 进行压力测试;因此,siege 应运而生……

当 HTTP 服务器受到该程序的攻击时,它会被描述为“under siege”。

我为什么需要它?

Siege 是为 Web 开发人员和 Web 系统管理员编写的。它允许这些人在压力下测试他们的程序和系统。作为一名 Web 专业人员,您有责任确保产品的完整性,但您无法控制谁会访问它。流量高峰随时可能出现。您如何知道自己是否做好了准备?

Siege 允许您将这些程序置于压力之下,以便您更好地了解它们能够承受的负载。如果您的网站目前峰值为 250 个并发事务,那么知道您的网站能够承受 400 个并发事务的负载,您就会更加安心。

事务的特征是服务器为客户端打开套接字、处理请求、通过线路提供数据并在完成后关闭套接字。需要注意的是,人类互联网用户需要时间来消化返回的数据。而 Siege 用户则不需要。在实践中,我发现 400 个并发 Siege 用户相当于实际互联网会话中该数量的至少五倍。这就是为什么 siege 允许你设置延迟( --delay=NUM )的原因。设置后,每个 siege 用户会休眠 1 到 NUM 之间的随机秒数。通过服务器日志,你应该能够获取用户在单个页面上的平均停留时间。建议你在模拟互联网活动时使用该数值作为延迟时间。

安装

源码安装

通过以下命令来进行克隆项目,建议请先提前挂好代理进行克隆。

git clone https://github.com/JoeDog/siege.git

进入目录并查看。

cd siege/
ls

生成 configure 文件,之后通过 ls 命令可以查看到已经生成成功了。

autoreconf -i

配置编译参数

./configure

编译

make

安装

sudo make install

创建配置文件

siege.config

运行以下命令,如果出现这个界面的话,就说明安装成功了。

siege -h

压缩包安装

运行以下命令来下载压缩包。建议请先提前挂好代理。

wget http://download.joedog.org/siege/siege-latest.tar.gz

解压压缩包

tar -zxvf siege-latest.tar.gz

进入目录并查看。

cd siege-4.1.7/
ls

配置编译参数

./configure

编译

make

安装

sudo make install

创建配置文件

siege.config

输入以下命令,如果出现这个界面,就说明安装成功了。

siege -h

APT包管理器安装

Kali Linux 默认已经安装好 siege 工具了,如果还未安装的话,也可以通过以下命令来进行安装。

sudo apt install siege

使用

siege

HTTP/FTP 负载测试器和基准测试实用程序。

默认配置文件为 $HOME/.siege/siege.conf。如果您没有 $HOME/.siege 目录以及 siege.conf 和 cookies.txt 文件,siege 运行时将生成一个新的配置目录。您可以使用以下命令生成配置目录:

siege.config

选项语法

siege 支持长选项和短选项。短选项如下所示:

-c 25
-c25

长选项如下所示:

--concurrent=25

1. -h, --help

打印描述 siege 命令行选项的帮助信息。

siege --help

2. -V, --version

显示 siege 的发行版本和版权信息。

siege --version

3. -C, --config

打印当前所有已配置选项的详细摘要,其中大部分选项位于 $HOME/.siege/siege.conf 文件中。

siege --config

4. -v, --verbose

此指令将 siege 置于详细模式,这实际上是默认设置。当配置文件设置为“verbose = false”时,此命令行选项非常有用,因为它允许您覆盖该设置。

默认情况下,siege 的详细输出以颜色编码的样式显示。
* HTTP 2xx 编码为蓝色
* HTTP 3xx 编码为青色
* HTTP 4xx 编码为洋红色
* HTTP 5xx 编码为红色
* HTTP 缓存编码为黑色

注意:您可以在 siege.conf 中像这样关闭颜色:'color = off'

默认是不会停止的,可以通过按 ctrl + c 键停止运行。

siege --verbose https://example.com

5. -q, --quiet

此指令用于静默 siege。它主要用于脚本编写,并且经常与 -g/--get 结合使用。您可以通过其退出代码来检测运行是否成功。

siege --quiet -g www.joedog.org
if [ $? -eq 0 ] ; then
        echo "成功"
else
        echo "失败"
fi

siege --quiet -g https://www.joedog.org

6. -g URL, --get=URL

此选项允许您请求 URL 并监控标头事务。有一个相应的配置文件指令允许您设置这些请求的请求方法:
gmethod = HEAD|GET

$ siege -g "https://www.joedog.org/"
HEAD / HTTP/1.0
Host: www.joedog.org
Accept: */*
User-Agent: Mozilla/5.0 (unknown-x86_64-linux-gnu) Siege/4.0.0-beta5
Connection: close

HTTP/1.1 200 OK
Server: cloudflare-nginx
Date: Tue, 09 Feb 2016 18:18:41 GMT
Content-Type: text/html; charset=UTF-8
Connection: close
Last-Modified: Wed, 25 Nov 2015 18:46:08 GMT
Cache-Control: max-age=3, must-revalidate
Expires: Tue, 09 Feb 2016 18:18:44 GMT
Vary: Accept-Encoding,Cookie
CF-RAY: 27219407eeff084a-IAD

注意:从命令行将 URL 传递给 siege 时,最好使用引号。

siege -g "https://www.joedog.org"

7. -p URL, --print=URL

此选项类似于 -g / --get,但它会打印从服务器收到的页面。

$ siege -p http://www.joedog.org/
GET / HTTP/1.0
Host: www.joedog.org
Accept: */*
User-Agent: Mozilla/5.0 (unknown-x86_64-linux-gnu) Siege/4.0.3rc1
Connection: close

HTTP/1.1 301 Moved Permanently
Date: Wed, 19 Oct 2016 16:58:13 GMT
Content-Type: text/html; charset=iso-8859-1
Location: https://www.joedog.org/
Server: cloudflare-nginx
Connection: close

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>301 Moved Permanently</title>
</head><body>
<h1>Moved Permanently</h1>
<p>The document has moved <a href="https://www.joedog.org/">here</a>.</p>
<hr>
<address>Apache/2.2.31 (Amazon) Server at www.joedog.org Port 80</address>
</body></html>

siege -p https://www.joedog.org

8. -c NUM, --concurrent=NUM

CONCURRENT 用户数,默认值为 10

此选项允许您设置并发用户数。从技术上讲,总用户数受限于您的计算机资源。

您配置的用户数不应超过 Web 服务器的处理能力。例如,默认的 Apache 配置限制为 255 个线程。如果您使用 -c 1024 运行 siege,则将有 769 个 siege 用户等待 Apache 处理程序。

因此,默认的 siege 配置限制为255 个用户。您可以在 siege.conf 中增加该数量,但如果您造成了混乱,请不要向我们投诉。

siege --verbose --concurrent=255 http://example.com

9. -r NUM, --reps=NUM|once

此选项告知每个 siege 用户应运行多少次。该值通常应为大于零的数字,但也可以是关键字“once”。

siege --reps=10 http://example.com

siege --reps=once http://example.com

10. -t NUMm, --time=NUMm

此选项与 --reps 类似,但它不是指定每个用户应运行的次数,而是指定每个用户应运行的时间。

值的格式为“NUMm”,其中“NUM”表示时间量,“m”修饰符可以是 S、M 或 H,分别表示秒、分钟和小时。要运行 siege 一小时,您可以选择以下任意组合:-t3600S、-t60M、-t1H。修饰符不区分大小写,但数字与其本身之间不需要空格。

siege --time=60M http://example.com

11. -d NUM, --delay=NUM

此选项指示 siege 每次页面请求之间的延迟时间。NUM 值表示每次请求之间的秒数。该数字可以是小数。实际上,默认值为半秒 (--delay=0.5)。

延迟请求之间的时间不计入事务时间。如果两个 0.1 秒的事务之间有 2 秒的延迟,则它们的平均事务时间为 0.1 秒。该时间将计入总耗时。在这种情况下,耗时为 2.2 秒。

注意:启用解析器后(参见:-p/--parser),页面与其元素(例如样式表、JavaScript 等)之间没有延迟。延迟仅发生在页面请求之间。

siege --delay=0.5 http://example.com

12. -b, --benchmark

此指令指示 siege 进入基准测试模式。这意味着迭代之间没有延迟。

siege --benchmark http://example.com

13. -i, --internet

此选项将 siege 设置为我们所说的互联网模式。它会以随机顺序从 urls.txt 文件(参见:-f <file> / --file=<file>)发出请求。

siege --internet http://example.com

14. -f FILE, --file=FILE

此选项指示 siege 使用文本文件中的 URL 列表。这些 URL 每行列出一个。与作为命令行参数传递的 URL 不同,此文件中的 URL不应使用引号。

siege 的 urls.txt 解析器支持注释和变量。

siege -c 10 -r 2 --file=file.txt

15. -R FILE, --rc=FILE

此指令允许您设置备用资源文件。默认情况下,siegerc 文件为 $HOME/.siege/siege.conf。使用此指令,您可以覆盖默认文件并使用备用文件。

siege -c 10 -r 10 --rc .siege/siege.conf http://example.com

16. -L FILE, --log=FILE

默认日志文件为 $prefix/var/log/siege.log。此指令允许您指定备用日志记录文件。

siege -c 10 -r 10 --log=logfile http://example.com

17. -m "string", --mark="string"

此选项允许您在将统计信息写入日志文件之前将一条消息记录到日志文件中。它通常用于识别正在进行的运行。例如,您可以使用命令行参数标记文件,以便了解哪些配置生成了以下数据。

siege -c 10 -r 10 --mark=text http://example.com

18. -H "header: value", --header="Header: value"

此选项允许您在请求中设置自定义标头。一般来说,此标头会覆盖现有的标头。Cookie 标头是一个特殊情况。如果您设置了 -H "Cookie: value",siege 除了发送其他 Cookie 之外,还会发送该 Cookie。

siege -c 10 -r 10 --header="Authorization: Bearer token" http://example.com

19. -A "string", --user-agent="string"

此选项允许您使用自定义 User-Agent 覆盖默认 User-Agent。

siege --agent="JoeDog Jr. in da hizzle"

将设置以下标头:

User-agent: JoeDog Jr. in da hizzle

或者,您可以使用上面的 -H/--header 选项设置 User-Agent。

siege --user-agent="JoeDog Jr. in da hizzle" http://example.com

20. -T "text", --content-type="text"

这是另一个设置标头的快捷方式。您可以使用此选项覆盖默认的 Content-type 请求标头。

siege --content-type="application/json" http://example.com

21. -j, --json-output

JSON 输出,将最终统计信息以 JSON 格式打印到标准输出

siege --json-output http://example.com

22. --no-parser

关闭 HTML 解析器。当 siege 下载页面时,它会解析其中的额外页面元素,例如样式表、JavaScript 和图片。它会对找到的任何元素发出额外请求。启用此选项后,siege 将在下载主页后停止。

siege --no-parser http://example.com

23. --no-follow

此指令指示 siege 不遵循 3xx 重定向。

siege --no-follow http://example.com

URL 格式

siege 支持 RFC 1738 URL 格式,但为了方便您使用,它特意实现了常用的快捷方式。除了 RFC 1738 格式外,siege 还引入了自己的 URL 格式来指示协议方法。

RFC 1738 URL 如下所示:

<scheme>://<username>:<password>@<hostname>:<port>/<path>;<params>?<query>#<frag>

带有方法指示符的 siege URL 如下所示:

<scheme>://<username>:<password>@<hostname>:<port>/<path> POST <query>

您还可以使用重定向字符发送文件内容,如下所示:

<scheme>://<username>:<password>@<hostname>:<port>/<path> POST </home/jeff/haha.txt

以下是两个带有 siege 方法指示符的示例:

http://www.joedog.org/ POST haha​​=papa&dada=mama
ftp://ftp.armstrong.com/ PUT </home/jdfulmer/etc/tests/bbc.jpg

注意:如果您在命令行中使用方法指示符设置 URL,那么您必须用引号括起来,否则您的 shell 会将其视为三个独立的参数。如果 URL 位于 urls.txt 文件中,则您不应使用引号。

如上所述,siege 竭尽全力允许使用您在大多数浏览器实现中习惯使用的常用快捷方式。它将 1738 URL 的许多部分视为可选。
在此示例中,括号中的部分是可选的:

[scheme://] host.domain.xxx [:port] [/path/file]

当 siege 收到主机名时,它会根据默认假设构建 URL。www.joedog.org 变为 http://www.joedog.org:80/

URLS.txt 文件

siege 可以接受 URL 作为参数。siege -c -r2 www.joedog.org 会请求两次 JoeDog 的索引页。但是,如果您想访问网站的大量内容,该怎么办?siege 允许您用 URL 填充文件,以便它可以遍历 URL 列表。

该文件的格式是每行一个 URL:

https://www.joedog.org/
https://www.joedog.org/haha/
https://www.joedog.org/haha/ POST homer=simpson&marge=doestoo

该文件还支持 UNIX 风格的注释:

# 注释如下所示
https://www.joedog.org/
https://www.joedog.org/haha/
https://www.joedog.org/haha/ POST homer=simpson&marge=doestoo

它支持 Shell 风格的变量声明和引用。如果您想在两个不同的层级或两个不同的方案上运行相同的测试,以下方法会非常方便:

SCHEME=https
HOST=bart.joedog.org
$(SCHEME)://$(HOST)/
$(SCHEME)://$(HOST)/haha/
$(SCHEME)://$(HOST)/haha/ POST homer=simpson&marge=doestoo

您可以使用 -f/--file 选项将此文件告知 siege:

siege -c1 -r50 -f /home/jeff/urls.txt

性能统计

运行完成后,siege 将从所有客户端收集性能数据,并在运行后进行汇总。(您也可以选择记录这些数据)。命令行输出模仿了 Lincoln Stein 的 torture.pl 脚本:

Transactions(事务数):                                   2000 hits
Availability(可用性):                                      100.00 %
Elapsed time(耗时):                                      58.57 secs
Data transferred(数据传输量):                         5.75 MB
Response time(响应时间):                           0.25 secs
Transaction rate(事务速率):                         34.15 trans/sec
Throughput(吞吐量):                                      0.10 MB/sec
Concurrency(并发量):                                   8.45
Successful transactions(成功事务数):        2000
Failed transactions(失败事务数):                0
Longest transaction(最长事务数):               4.62
Shortest transaction(最短事务数):              0.00

Transactions(事务数)

此数字表示 HTTP 请求的总数。在此示例中,我们运行了 25 个模拟用户 [-c25],每个用户运行了 10 次[-r10]。25 次 10 等于 250,那么为什么事务总数是 2000?这是因为 siege 会统计每个请求。本次运行包含一个 META 重定向、一个 301 重定向,并且它请求的页面包含多个已下载的元素。

Availability(可用性)

这是服务器成功处理的套接字连接的百分比。它是套接字失败次数(包括超时)除以所有连接尝试次数之和的结果。此数字不包括 400 和 500 级别的服务器错误,这些错误记录在下文所述的“Failed transactions(失败事务)”中。

Elapsed time(耗时)

整个 siege 测试的持续时间。这是从用户调用 siege 到最后一个模拟用户完成其事务的时间。如上所示,测试耗时 14.67 秒完成。

Data transferred(数据传输量)

传输给每个 Siege 模拟用户的数据总量。它包含标头信息和内容。由于包含标头信息,Siege 报告的数据量将大于服务器报告的数据量。在 Internet 模式下,即访问配置文件中的随机 URL,此数值预计每次运行都会有所不同。

Response time(响应时间)

响应每个模拟用户请求的平均时间。

Transaction rate(事务速率)

服务器每秒能够处理的平均事务数,简而言之:所有事务数除以耗时。

Throughput(吞吐量)

每秒从服务器传输到所有模拟用户的平均字节数。

Concurrency(并发量)

这是平均同时连接数。该指标的计算方式如下:所有事务时间总和除以耗时(Siege 的运行时长)。

Successful transactions(成功事务数)

服务器返回代码小于 400 的次数。

Failed transactions(失败事务数)

套接字事务失败的次数,包括套接字超时。

Longest transaction(最长事务数)

所有事务中单个事务耗时最长的事务。

Shortest transaction(最短事务数)

所有事务中单个事务耗时最短的事务。

bombardment

以不断增加的用户数量运行 siege

bombardment 是 siege 分发的一部分。它使用初始客户端数量调用 siege。运行完成后,它会立即再次使用初始客户端数量加上增量调用 siege。它会按照第四个参数指定的次数执行此操作。

帮助文档

bombardment

urlfile

包含一个或多个供 Siege 测试的 URL 的文件名称。

inital # of clients

首次运行时使用的初始客户端数量。

inc value

每次后续运行时要添加的客户端数量。

# of inc

运行 Siege 的次数。

delay

是每个客户端在两次请求之间等待的时间(以秒为单位)。Siege 的默认值会被 bombardment 覆盖。

常规使用

语法:bombardment [urlfile] [inital # of clients] [inc value] [# of inc] [delay]

bombardment urls.txt 5 10 20 1

siege.config

在用户的主目录中构建 siege.conf 模板。

siege 的默认设置存储在 $HOME/.siege/siege.conf 中。如果不存在 siege.conf 文件,此实用程序将创建一个新的。一般来说,您无需在 siege 4.0.0 或更高版本的版本中运行此命令。

启动时,siege 会检查 $HOME/.siege/siege.conf 文件。如果不存在,siege 将运行此命令创建一个新的文件,然后读取该文件进行配置。

调用 siege.config 的格式如下:

siege.config [no arguments]

siege.config

siege2csv

以不断增加的用户数量运行 siege

同 bombardment 工具一样,这里不再展开讨论。具体请常见 bombardment 的帮助页。

总结

通过对 Siege 工具的实测与功能分析,可以看出其在 Web 性能测试领域中的简洁高效与实用性。作为一款支持并发模拟、多协议测试及定制请求行为的压力测试工具,Siege 能帮助开发者快速发现性能瓶颈、评估系统抗压能力,并辅助完成接口验证与回归测试。无论是在开发调试阶段,还是部署前的容量规划中,Siege 都是一款值得掌握的轻量级负载测试利器。

在此特别强调,本教程仅在合法授权的情况下进行测试和研究,请勿用于其他用途。未经授权使用此类工具可能会侵犯他人隐私,触犯相关法律,任何因此引发的法律或利益纠纷与本人无关。

欢迎各位大佬,小白来找我交流。


网站公告

今日签到

点亮在社区的每一天
去签到