Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
sniffles — Sniffles: 用于IDS和正则表达式评估的数据包捕获生成器 | Kitploit
工具/GitHubGitHub/petabi/sniffles
数据包嗅探与分析IDS/IPS规避模糊测试网络安全渗透测试入侵检测
GitHubpetabi/sniffles

sniffles

Sniffles: 用于IDS和正则表达式评估的数据包捕获生成器

查看仓库
6525577年前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

Sniffles--用于IDS和正则表达式评估的数据包捕获生成器

Sniffles 是一款用于创建数据包捕获的工具,可测试使用固定模式或正则表达式检测可疑行为的 IDS。Sniffles 的工作原理非常简单。它接受一组正则表达式或规则,随机选择其中一个正则表达式或规则,然后基于该规则或正则表达式生成内容。对于固定字符串,这意味着将字符串直接添加到数据中(可能带有偏移量或其他选项,如 Snort 规则)。对于正则表达式,过程稍显复杂。正则表达式被转换为 NFA,并从中选择一条随机路径(从开始到结束)。生成的数据将匹配该正则表达式。最后,Sniffles 可设置为完全匹配或部分匹配。在完全匹配模式下,数据包数据将绝对匹配至少一条规则或正则表达式(但某些 Snort 选项并未完全考虑)。部分匹配则会从匹配的字符序列中删除最后一个字符,变为不应匹配的序列(但也可能匹配另一条规则)。匹配规则应给 IDS 带来最大负担。因此,可以确定 IDS 在处理最坏情况流量时的表现。部分匹配流量带来的负担几乎与匹配流量相当。最后,Sniffles 还可以生成完全随机的数据流量。这种随机数据提供了最佳情况场景,因为随机数据几乎不可能匹配任何规则,从而可以以最大速度处理。因此,Sniffles 允许创建用于 IDS 深度数据包检测的最佳和最坏情况操作的数据包捕获。

除上述功能外,Sniffles 还能创建评估数据包捕获。评估数据包捕获有两种类型。第一种评估数据包捕获会按顺序为每条规则或正则表达式创建一个数据包。因此可以测试并验证每条规则是否按预期匹配。完整评估更进一步,为正则表达式中的每个可能分支创建一个数据包。单个正则表达式可能有数千个可能的分支。这用于测试正则表达式的所有分支是否都得到正确处理。评估数据包捕获应匹配所有数据包。任何未匹配的数据包很可能代表 IDS 存在失败,需要进一步调查。当然,Sniffles 也有可能没有为特定 IDS 创建正确的数据包,或者未能识别规则的某个特定选项。请查看支持的规则功能以获取更多信息。

最后,Sniffles 在生成随机网络流量方面也有很多功能。默认情况下,随机流量是 TCP、UDP 或 ICMP 且为单向。但它也可以生成包含 ACK、握手和拆除的 TCP 流量。它将生成正确的序列号和校验和。此外,MAC 地址可根据所需分布进行设置,IP 网络地址可由内部和外部地址空间定义。此外,还可以在流量捕获中模拟扫描。

安装

要求:Python 3.3+ 和 SortedContainers 模块

Sniffles 包含以下文件:

  • rulereader.py:规则解析器。
  • ruletrafficgenerator.py:用于生成内容流的工具。
  • sniffles.py:管理流程的主程序。
  • sniffles_config.py:处理 Sniffles 的命令行输入和选项。
  • traffic_writer.py:将数据包写入 pcap 兼容文件。不需要 libpcap。
  • vendor_mac_list.py:包含用于生成半真实 MAC 地址(而非随机拼接的八位组)的 MAC 组织唯一标识符。
  • examples/vendor_mac_definition.txt:用于定义部分或完整 MAC 地址分布的可选文件。
  • pcre 文件(pcre_chartables.c pcre_compile.c pcre_globals.c pcre_internal.h pcre_newline.c pcre_tables.c pcre.h pcrecomp.c pcreconf.py ucp.h)。
  • nfa.py:用于遍历 NFA。
  • regex_generator.py:用于生成随机正则表达式的代码。
  • rand_rule_gen.py、feature.py 和 rule_formats.py:用于生成随机规则集的模块。

安装方法:

  1. 进入顶层目录。
  2. 执行 python3.x setup.py install。
  3. 这将把应用程序安装到您的系统中。

安装说明:

  1. 未在 Windows 上测试,也未在 Linux 上测试。已在 FreeBSD 和 Mac OS X 上测试。
  2. 使用 python3.x setup.py build 进行本地构建,然后进入库目录,找到 lib 并使用 python3.4 -c "from sniffles import sniffles; sniffles.main()" 本地运行。

支持格式:

  • Snort:Snort 告警规则(规则应以 Alert 指令开头)。内容标签被识别并正确解析。PCRE 标签同样被正确解析。HTTP 标签会连续处理,因此可能无法生成所需的数据包。内容(以及 PCRE 或 HTTP 内容)可通过 distance、within 和 offset 进行修改。规则可能使用流控制选项,但仅从中导出数据方向。nocase 选项被忽略,使用提供的字母大小写。所有其他选项被忽略。解析头部值,并生成符合这些值的数据包。如果使用了内部和外部网络地址空间,则相应的 $HOME_NET 和 $EXTERNAL_NET 变量将使用正确的地址空间。示例:

    alert tcp $EXTERNAL_NET any -> $HOME_NET 8080 (msg:"SERVER-APACHE Apache Tomcat UNIX platform directory traversal"; flow:to_server; content:"/..|5C|/"; content:"/..|5C|/"; http_raw_uri;

  • 正则表达式:每行一个原始正则表达式,写为 abc 或 /abc/i 形式。当前支持选项 i、s 和 m。其他选项被忽略。示例:

    /ab*c(d|e)f/i

  • 下文描述的 Sniffles 规则格式。

命令行选项:

  • -a TCP Ack:为每个发送的数据包发送一个 TCP 确认。默认关闭。默认情况下确认包没有数据。

  • -b 双向数据:数据将在 TCP 流的两个方向上生成。ACK 将被开启。此功能默认关闭。

  • -B [后台流量协议:百分比]:设置至少一个协议,值为 1 到 100,以生成后台流量。该值表示占总流量的百分比。可用协议:FTP、HTTP、IMAP、POP 和 SMTP。例如:"http:20,ftp:30,smtp:10"。仅输入一个数字作为参数值则生成随机流量。例如:"80"。

  • -c 计数:要创建的流数量。每个流至少包含 1 个数据包。数据包将在规则定义或随机选择的两个端点之间发送。tcp_handshake、tcp_teardown 和 packets_per_stream 会增加每个流的数据包数量。当前,流中的数据仅朝一个方向流动。如果使用 -b 选项,数据应朝两个方向流动。此外,Sniffles 规则可以指定数据朝两个方向流动。

  • -C 并发流:一次打开的流数量。尽力而为:如果流数量少于指定的并发流数量,则使用所有当前流。例如,如果只剩下 1000 个流,但并发流设置为 10000,则仍只能写出 1000 个流。默认值为 1000。如果与 duration 一起使用,则 -C 流将在整个持续时间内保持,最终会忽略 -c 的任何输入。注意,目的是创建多样化的 pcap,使同一流的数包分散排放而非紧邻,并模拟许多并发流。在我们的测试中,在内存成为问题之前,我们成功管理了 200-300 万个并发流。另外,流之间的不同延迟可能导致某些流提前终止。

  • -d 规则目录:包含规则文件的目录路径。将读取目录中所有规则文件中的所有已启用规则。假设所有规则文件以 .rules 扩展名结尾。使用此选项或 -f,但不同时使用。# 符号用于停用(即注释掉)规则。

  • -D 持续时间:基于持续时间而非计数生成。持续时间以秒为单位。请记住,数据包之间的默认延迟平均为 1-200 微秒。对于低延迟,较大的持续时间可能导致数百万个数据包,构建时间可能很长。此外,持续时间是尽力而为。本质上,达到持续时间后不会创建新的流,但可能有一些流尚未完成。这些流仍会被写出,因此实际持续时间可能比指定的更长,但不应更短。最后,如果您希望在生成期间创建更少的流,请设置较大的延迟。

  • -e 评估:为规则集中的每条规则仅创建一个数据包。忽略除 -f 之外的所有其他输入。每个数据包的内容将匹配所选规则。

  • -E 完整评估:为规则集中 pcre 规则的每个可行路径创建一个数据包。换句话说,ab(c|d)e 将创建两个数据包:abce 和 abde。忽略除 -f 之外的所有其他输入。

  • -f 规则文件:根据提供的路径和文件名读取单个规则文件。

  • -F 配置文件:为 Sniffles 选项指定配置文件。配置文件是固定 Sniffles 运行参数的一种方式。

  • -g 时间戳:设置 pcap 时间戳的开始时间。自 1969 年 12 月 31 日以来的秒数。默认为当前时间。

  • -h IP 内部前缀:内部 IP 网络前缀列表。来自内部地址的 IP 地址将使用这些前缀。前缀可以指定完整的 4 字节 IPv4 地址的 xxx.xxx 格式。例如:"10.192.168,172.16"。

  • -H IPv6 内部前缀:与 IPv4 内部前缀相同,只是用于 IPv6。值得注意的是,分隔符是冒号,冒号之间表示两个字节。

  • -i IPv6 百分比:将此值设为 1 到 100 以生成带 IPv6 的数据包。这将决定 IPv6 流所占的百分比。

  • -I 扫描攻击强度(即每秒数据包数)。

  • -l 内容长度:将内容长度固定为指定的字节数。小于 1 则将长度设置为 NFA 生成的内容长度,或如果头部也是随机的,则为 10 到 1410 之间的随机数。将根据需要截断或填充数据包。

  • -L 延迟:平均延迟,以微秒为单位。如果未设置,则每个流确定一个 1 到 200 微秒之间的随机平均延迟。因此,给定流的数包之间将具有平均延迟时间。

  • -M 允许使用 MAC 分布来为流量设置自定义 MAC 地址。默认情况下,MAC 地址是随机生成的。有关 MAC 定义文件的更多信息,请参见 examples/mac_definition_file.txt。注意:您可以指定最多两个 MAC 定义文件,以便根据源 MAC 或目的 MAC 设置不同的值。如果只指定一个文件,则用于两个方向。如果使用以下表示法,您可以指定特定方向。例如:'path1:path2'。path1 是源 MAC 的 MAC 定义文件,path2 是目的 MAC 的 MAC 定义文件。您也可以使用问号 (?) 表示其中一个为随机,例如:'?:path2' 表示源 MAC 随机但使用文件作为目的。

  • -n 不完全匹配。将规则生成的内容设置为不完全匹配(即自动截断最后几个字符)。默认行为是完全匹配规则内容。

  • -o 输出文件:指定输出文件的名称。默认情况下,文件名为:sniffles.pcap。

  • -O 偏移量:扫描攻击开始前的偏移量。也用于在流量中插入多次扫描。这是扫描开始前的秒数。如果与 -R 一起使用,则成为开始前的平均秒数。

  • -p 每流数据包数:指定单个流中包含内容的数据包数量。如果参数为正整数 x,则每个流恰好包含 x 个包含内容的数据包。如果 x 为负数,则每个流包含随机数量的数据包(从 1 到 abs(x))。默认情况下,此值为 1。

  • -P 目标端口列表:用于扫描攻击。提供逗号分隔的端口列表,或单个起始端口。否则端口将被随机扫描。如果提供了单个起始端口,则从该端口开始按顺序扫描到 65535,然后回绕到起始点。如果提供了列表,则列表中的端口将以轮询方式扫描。

  • -r 随机:生成随机内容而非来自规则的内容。如果仍提供规则,则规则用于生成头部。注意:规则中的许多功能可能会覆盖随机生成的某些方面。

  • -R 随机扫描攻击:将使用偏移量在流量中创建扫描攻击,但仅将偏移量作为中位数使用。偏移量用于确定扫描完成与新扫描开始之间的时间量。

  • -s 扫描攻击:后跟逗号分隔的 IPv4 地址列表,指示要攻击的目标 IP 地址。每个 IP 范围将创建一个扫描攻击。范围应如下:192.168.1.1 将精确针对该 IP 地址,而 192.168.1 将针对 192.168.1.0 到 192.168.1.255 之间的随机 IP 地址。

  • -S 扫描类型:1==Syn 扫描(默认)2 == 连接扫描。

  • -t TCP 握手:在所有 TCP 流中包含 TCP 握手。默认关闭。

  • -T TCP 拆除:在所有 TCP 流中包含 TCP 拆除。默认关闭。

  • -v 详细模式:增加输出消息的级别。

  • -w 写入内容:将内容字符串写入名为 'all.re' 的文件。

  • -W 窗口:扫描攻击的窗口或持续时间(以秒为单位)。

  • -Z 回复概率:扫描得到回复的概率。换句话说,目标端口开放的概率(默认为 20%)。

示例:

注意:所有示例均假设您已安装 sniffles 包。

从包含正则表达式的单个文件生成 pcap,其中 10 个流且每个数据包匹配规则:

sniffles -c 10 -f myre.re -m

从单个 Snort 规则文件生成 pcap,其中每个数据包几乎匹配规则:

sniffles -c 10 -f myrules.rules

从单个目录中的多个 Snort 规则文件生成 pcap,其中每个数据包匹配规则:

sniffles -c 10 -d myrulesdir -m

生成与上述相同的 pcap,使用相同的规则,但内容为随机(内容是随机的,头部仍遵循规则——不适用于正则表达式或 Sniffles 规则):

sniffles -c 10 -d myrulesdir -r

生成包含 10 个流(每个流 1 个数据包)且数据为随机的 pcap:

sniffles -c 10

生成包含 10 个流的 pcap,其中 50% 的流为后台流量,其余流包含匹配规则的数据包:

sniffles -c 10 -B 50 myrules.rules

生成包含 10 个流的 pcap,每个流有 5 个数据包,包含 ACK、握手和拆除,以及每个数据包数据部分固定长度为 50:

sniffles -c 10 -p 5 -l 50 -t -T -a

生成包含 20 个随机流的 pcap,内部网络为 192.168.1-2.x:

sniffles -c 20 -h 192.168.1,192.168.2

生成包含 20 个随机流的 pcap,IPv4 内部网络为 192.168.1.x,IPv6 内部网络为 2001:8888:8888,且 50% 流量为 IPv6:

sniffles -c 20 -h 192.168.1 -H 2001:8888:8888 -i 50

生成一个 5 秒的数据包捕获,包含随机数据包,数据包之间平均间隔为 100 微秒:

sniffles -D 5 -L 100

生成 pcap,依次为规则文件(或正则表达式文件)中的每条规则创建一个匹配数据包:

sniffles -f myrules.rules -e

生成 pcap,为正则表达式集中的每个正则表达式的每个可能分支创建一个数据包,并将文件保存为 everything.pcap。但此功能可能在正则表达式具有大量最小-最大计数的指数时间内运行,因此可能需要很长时间。此外,除下方所示的两个选项外,所有其他选项均被忽略:

sniffles -f myrules.rules -o everything.pcap -E

生成随机流量,其中扫描攻击在 2 秒后开始并持续 2 秒,每秒 1000 个扫描数据包,整个捕获持续时间为 5 秒,间隔时间为 50us,起始端口为 80(从端口 80 开始顺序搜索):

sniffles -D 5 -O 2 -W 2 -I 1000 -L 50 -s 192.168.1.2 -P 80

与上述类似,但会创建多次扫描攻击,每次持续 1 秒,攻击间平均偏移量为 2 秒。此外,仅扫描指定端口。同时随机攻击 192.168.1.0-255 范围内的 IP 地址:

sniffles -D 8 -O 2 -W 1 -I 10 -L 50 -s 192.168.1 -P 80,8080,8000,8001

Sniffles 规则格式:

Sniffles 支持多种规则格式。首先,Sniffles 可以解析 Snort 规则和正则表达式(每行一个)。除此之外,Sniffles 还有自己的规则格式,可用于明确控制流量。这是通过使用描述流量的 xml 文件来实现的。使用此格式时,Sniffles 的其他选项可能不相关。示例规则文件可以在 examples 目录中找到。这些规则文件只需通过 -f 选项指定规则文件即可使用(即 sniffles -f rules.xml)

下载工具