安装

要成功安装katana,需要Go 1.18。要安装,只需运行下面的命令或从发布页面下载预编译二进制文件。

安装/运行katana的更多选项-

Docker

安装/更新docker到最新标签 -

使用docker以标准模式运行katana -

使用docker以无头模式运行katana -

Ubuntu

推荐安装以下先决条件 -

安装katana -

用法

这将显示工具的帮助信息。下面是它支持的所有开关。

运行Katana

Katana的输入

katana需要urlendpoint来进行爬行,并接受单个或多个输入。

可以使用-u选项提供输入URL,并使用逗号分隔的输入提供多个值,同样,还支持使用-list选项提供文件输入,并且还支持管道输入(stdin)。

URL输入

多个URL输入(逗号分隔)

列表输入

STDIN(管道)输入

运行katana的示例 -

爬行模式

标准模式

标准爬行模式使用标准的go http库来处理HTTP请求/响应。该模式速度更快,因为它没有浏览器开销。但是,它以原始响应体的形式分析HTTP响应,而不考虑任何JavaScript或DOM渲染,这可能会导致错过后DOM渲染的端点或异步端点调用,这可能发生在复杂的Web应用程序中,这些应用程序依赖于特定于浏览器的事件。

无头模式

无头模式将内部无头调用挂钩到浏览器上下文中,以处理HTTP请求/响应。这样做有两个优点:

无头爬行是可选的,可以使用-headless选项启用。

以下是其他无头CLI选项 -

-no-sandbox

以无沙箱模式运行无头chrome浏览器,当以root用户身份运行时非常有用。

-no-incognito

以无痕模式启动无头chrome浏览器,当使用本地浏览器时非常有用。

-headless-options

在无头模式下爬行时,可以使用-headless-options指定附加的chrome选项,例如 -

范围控制

如果不进行范围控制,很容易被封锁/禁止,katana提供了多种选项来调整爬行速度。

-field-scope

最方便的定义范围的选项是使用预定义字段名的-fs选项,其中rdn是字段范围的默认选项。

-crawl-scope

对于高级范围控制,可以使用-cs选项,该选项支持正则表达式输入。

对于多个范围规则,可以使用多行字符串/正则表达式的文件输入。

-crawl-out-scope

用于定义不要爬行的范围的-cos选项也支持正则表达式输入。

-no-scope

Katana默认为范围*.domain,要禁用此功能,可以使用-ns选项,也可以爬行互联网。

-display-out-scope

默认情况下,当使用范围选项时,它也适用于要显示的链接,因此外部URL默认排除,要覆盖此行为,可以使用-do选项来显示在目标范围URL / Endpoint 中存在的所有外部URL。

以下是与范围控制相关的所有CLI选项 -

爬虫配置

Katana提供了多种选项来配置和控制爬行,以满足我们的需求。

-depth

定义爬行的最大深度的选项,深度越大,爬行的端点数量越多+爬行的时间越长。

-js-crawl

启用JavaScript文件解析+爬行在JavaScript文件中发现的端点,默认情况下禁用。

-crawl-duration

预定义爬行持续时间的选项,默认禁用。

-known-files

启用爬行robots.txtsitemap.xml文件的选项,默认禁用。

-automatic-form-fill

启用已知/未知字段的自动表单填充的选项,已知字段值可以根据需要进行自定义,通过更新位于$HOME/.config/katana/form-config.yaml的表单配置文件。

自动表单填充是实验性功能。

身份验证爬行

身份验证爬行涉及在HTTP请求中包含自定义标头或cookie以访问受保护的资源。这些标头提供身份验证或授权信息,允许您爬行经过身份验证的内容/端点。您可以直接在命令行中指定标头,也可以将它们作为文件提供给katana以执行身份验证爬行。

注意:用户需要手动执行身份验证并将会话cookie/标头导出到文件,以便与katana一起使用。

-headers

在请求中添加自定义标头或cookie的选项。

标头在HTTP规范中的语法

以下是将cookie添加到请求中的示例:

也可以将标头或cookie作为文件提供。例如:

在需要时,可以进行更多配置,以下是所有与配置相关的CLI选项 -

连接到活动浏览器会话

Katana还可以连接到用户已登录和经过身份验证的活动浏览器会话。唯一的要求是启动具有远程调试功能的浏览器。

以下是启动启用了远程调试功能的chrome浏览器的示例,并使用它连接到katana的活动浏览器会话进行爬行 -

步骤1)首先找到chrome可执行文件的路径

操作系统Chromium可执行文件位置Google Chrome可执行文件位置
Windows(64位)C:\Program Files (x86)\Google\Chromium\Application\chrome.exeC:\Program Files (x86)\Google\Chrome\Application\chrome.exe
Windows(32位)C:\Program Files\Google\Chromium\Application\chrome.exeC:\Program Files\Google\Chrome\Application\chrome.exe
macOS/Applications/Chromium.app/Contents/MacOS/Chromium/Applications/Google Chrome.app/Contents/MacOS/Google Chrome
Linux/usr/bin/chromium/usr/bin/google-chrome

步骤2)启动启用了远程调试功能的chrome浏览器,并返回websocker URL。例如,在MacOS上,您可以使用以下命令启动启用了远程调试功能的chrome浏览器 -

现在登录到要爬行的网站,并保持浏览器打开。

步骤3)现在使用websocket URL与katana连接到活动浏览器会话并爬行网站

注意:您可以使用-cdd选项指定自定义chrome数据目录以存储浏览器数据和cookie,但是如果cookie设置为Session或在一定时间后过期,则不保存会话数据。

过滤器

-field

Katana提供了内置字段,可以用于根据所需的信息过滤输出,-f选项可用于指定任何可用字段。

以下是仅显示具有查询参数的所有URL的示例 -

自定义字段

您可以使用正则表达式规则创建自定义字段,以从页面响应中提取和存储特定信息。这些自定义字段使用YAML配置文件进行定义,并从默认位置`$HOME/.config/katana/field。 以下是一个示例自定义字段。

在定义自定义字段时,支持以下属性:

name属性的值将用作-field命令行选项的值。

自定义属性的类型,目前支持的选项为regex

从响应中提取信息的部分。默认值为response,包括标题和正文。其他可能的值为headerbody

您可以使用此属性选择正则表达式中的特定匹配组,例如:group: 1

使用自定义字段运行katana:

-store-field

为了补充field选项,该选项在运行时有助于过滤输出,还有-sf,-store-fields选项,其工作方式与field选项完全相同,只是不是过滤输出,而是将所有信息存储在磁盘上,存储在katana_field目录下,按目标URL排序。

-store-field选项可用于收集信息以构建用于各种目的的有针对性的字词表,包括但不限于:

Katana过滤器

-extension-match

可以使用-em选项轻松匹配特定扩展名的爬行输出,以确保仅显示包含给定扩展名的输出。

-extension-filter

可以使用-ef选项轻松过滤特定扩展名的爬行输出,以确保删除所有包含给定扩展名的URL。

-match-regex

-match-regex-mr标志允许您使用正则表达式过滤输出URL。使用此标志时,只有与指定的正则表达式匹配的URL将在输出中打印。

-filter-regex

-filter-regex-fr标志允许您使用正则表达式过滤输出URL。使用此标志时,将跳过与指定的正则表达式匹配的URL。

高级过滤

Katana支持基于DSL表达式的高级匹配和过滤功能:

DSL函数可以应用于jsonl输出中的任何键。有关可用的DSL函数的更多信息,请访问dsl项目

以下是其他过滤选项 -

速率限制

如果不遵循目标网站的限制,很容易在爬行时被阻止/禁止,katana提供了多个选项来调整爬行速度。

-delay

在爬行时,可以使用-delay选项在每个新请求之间引入延迟(以秒为单位),默认情况下禁用。

-concurrency

控制同时获取每个目标的URL数的选项。

-parallelism

定义同时从列表输入处理的目标数的选项。

-rate-limit

用于定义每秒可以发送的最大请求数的选项。

-rate-limit-minute

用于定义每分钟可以发送的最大请求数的选项。

以下是速率限制控制的所有长/短CLI选项 -

输出

Katana支持以纯文本格式和包含其他信息(如sourcetagattribute名称)的JSON格式的文件输出,以关联发现的端点。

-output

默认情况下,katana以纯文本格式输出爬行的端点。可以使用-output选项将结果写入文件。

-jsonl

-store-response

-store-response选项允许将所有爬行的端点请求和响应写入文本文件。使用此选项时,将会将包含请求和响应的文本文件写入katana_response目录。如果要指定自定义目录,可以使用-store-response-dir选项。

注意:

-store-response选项不支持-headless模式。

以下是与输出相关的其他CLI选项 -

Katana作为库

可以通过创建Option结构的实例并使用与通过CLI指定的相同选项填充它来将katana用作库。使用选项可以创建crawlerOptions,从而创建标准或混合crawler 应调用crawler.Crawl方法来爬行输入。