Katana

Reconnaissance v1.6.1 · 05.05.2026 активный

Современный высокопроизводительный веб-краулер от ProjectDiscovery. Поддерживает JavaScript-рендеринг, автоматическое заполнение форм и глубокий обход SPA-приложений. Возможности: - Режим headless (с Chromium) для JS-heavy сайтов - Обход форм, кнопок, динамических путей - Извлечение всех endpoint'ов, параметров, форм - Фильтрация по расширению, области, scope - Параллельный краулинг нескольких целей - Вывод в JSON, интеграция с другими PD-инструментами - Поддержка custom headers, cookies, proxy

v1.6.1
05.05.2026 current
Добавлен 19.06.2026 · Обновлён 24.07.2026 · Reconnaissance
Установка
# go install:
go install github.com/projectdiscovery/katana/cmd/katana@latest

# Для headless-режима установить Chrome:
sudo apt install -y chromium-browser

# Примеры:
# Базовый краулинг:
katana -u https://target.com

# Глубина 5, JavaScript-рендеринг:
katana -u https://target.com -d 5 -headless

# Краулинг списка целей + JSON:
katana -list urls.txt -o endpoints.json -jsonl

# Scope — только текущий домен:
katana -u https://target.com -cs target.com
переведено ИИ

katana

Фреймворк для краулинга и спидлинга нового поколения

ВозможностиУстановкаИспользованиеОбластьКонфигурацияФильтрыПрисоединяйтесь к Discord

Возможности

image

  • Быстрый и полностью настраиваемый веб-краулинг
  • Стандартный и Headless (безголовый) режим
  • Парсинг / краулинг JavaScript
  • Настраиваемая автоматическая заполнение форм
  • Управление областью - Предопределенные поля / регулярные выражения
  • База знаний - ML-классификация типов страниц / форм (автоматически загружаемая модель)
  • Настраиваемый вывод - Предопределенные поля
  • ВХОД - STDIN, URL и СПИСОК
  • ВЫХОД - STDOUT, ФАЙЛ и JSON

Установка

Для успешной установки katana требуется Go 1.26+. Если у вас возникли проблемы с установкой, мы рекомендуем попробовать с использованием последней доступной версии Go, так как минимально требуемая версия могла измениться. Выполните команду ниже или скачайте предварительно скомпилированный бинарный файл со страницы релизов.

CGO_ENABLED=1 go install github.com/projectdiscovery/katana/cmd/katana@latest

Больше вариантов установки / запуска katana-

Docker

Чтобы установить / обновить docker до последнего тега -

docker pull projectdiscovery/katana:latest

Чтобы запустить katana в стандартном режиме с использованием docker -

docker run projectdiscovery/katana:latest -u https://tesla.com

Чтобы запустить katana в headless (безголовом) режиме с использованием docker -

docker run projectdiscovery/katana:latest -u https://tesla.com -system-chrome -headless

Ubuntu

Рекомендуется установить следующие предварительные зависимости -

sudo apt update
sudo apt install zip curl wget git snapd
sudo snap refresh
sudo snap install golang --classic

sudo install -d -m 0755 /etc/apt/keyrings
curl -fsSL https://dl.google.com/linux/linux_signing_key.pub \

| sudo gpg --dearmor -o /etc/apt/keyrings/google-chrome.gpg

echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/google-chrome.gpg] \
http://dl.google.com/linux/chrome/deb/ stable main" \

| sudo tee /etc/apt/sources.list.d/google-chrome.list > /dev/null

sudo apt update
sudo apt install google-chrome-stable

установка katana -

go install github.com/projectdiscovery/katana/cmd/katana@latest

Использование

katana -h

Это покажет справку по инструменту. Вот все поддерживаемые ключи.

Katana is a fast crawler focused on execution in automation
pipelines offering both headless and non-headless crawling.

Usage:
  ./katana [flags]

Flags:
INPUT:
   -u, -list string[]     target url / list to crawl
   -resume string         resume scan using resume.cfg
   -e, -exclude string[]  exclude host matching specified filter ('cdn', 'private-ips', cidr, ip, regex)

CONFIGURATION:
   -r, -resolvers string[]       list of custom resolver (file or comma separated)
   -d, -depth int                maximum depth to crawl (default 3)
   -jc, -js-crawl                enable endpoint parsing / crawling in javascript file
   -jsl, -jsluice                enable jsluice parsing in javascript file (memory intensive)
   -ct, -crawl-duration value    maximum duration to crawl the target for (s, m, h, d) (default s)
   -kf, -known-files string      enable crawling of known files (all,robotstxt,sitemapxml), a minimum depth of 3 is required to ensure all known files are properly crawled.
   -mrs, -max-response-size int  maximum response size to read (default 4194304)
   -timeout int                  time to wait for request in seconds (default 10)
   -aff, -automatic-form-fill    enable automatic form filling (experimental)
   -fx, -form-extraction         extract form, input, textarea & select elements in jsonl output
   -retry int                    number of times to retry the request (default 1)
   -proxy string                 http/socks5 proxy to use
   -td, -tech-detect             enable technology detection
   -H, -headers string[]         custom header/cookie to include in all http request in header:value format (file)
   -config string                path to the katana configuration file
   -fc, -form-config string      path to custom form configuration file
   -flc, -field-config string    path to custom field configuration file
   -s, -strategy string          Visit strategy (depth-first, breadth-first) (default "depth-first")
   -iqp, -ignore-query-params    Ignore crawling same path with different query-param values
   -fsu, -filter-similar         filter crawling of similar looking URLs (e.g., /users/123 and /users/456)
   -fst, -filter-similar-threshold int  number of distinct values before a path position is treated as parameter (default 10)
   -tlsi, -tls-impersonate       enable experimental client hello (ja3) tls randomization
   -dr, -disable-redirects       disable following redirects (default false)
   -pcs, -page-content-similar   enable page content similarity filtering (simhash|tfidf|bm25)
   -pcsm, -page-content-similar-mode string  similarity mode: simhash, tfidf, or bm25 (default simhash)
   -pcsd, -page-content-similar-distance int  simhash max hamming distance (default 3)
   -pcst, -page-content-similar-threshold float  tfidf/bm25 min score 0-1 (default 0.85)
   -pcsn, -page-content-similar-budget int  pages to fully process per similarity cluster (default 1)
   -sdd, -similarity-deduplication  alias for -pcs
   -kb, -knowledge-base          enable knowledge base classification
   -kb-secrets                   enable secrets extractor in the knowledge base
   -kb-validate-secrets          validate detected secrets against their provider (sends live API calls)
   -kb-endpoints                 enable endpoints extractor (classifies REST/GraphQL/SOAP/XHR requests)
   -mdp, -max-domain-pages int   maximum number of pages to crawl per domain (default unlimited)

DEBUG:
   -health-check, -hc        run diagnostic check up
   -elog, -error-log string  file to write sent requests error log
   -pprof-server             enable pprof server

HEADLESS:
   -hl, -headless                    enable headless hybrid crawling (experimental)
   -sc, -system-chrome               use local installed chrome browser instead of katana installed
   -sb, -show-browser                show the browser on the screen with headless mode
   -ho, -headless-options string[]   start headless chrome with additional options
   -nos, -no-sandbox                 start headless chrome in --no-sandbox mode
   -cdd, -chrome-data-dir string     path to store chrome browser data
   -scp, -system-chrome-path string  use specified chrome browser for headless crawling
   -noi, -no-incognito               start headless chrome without incognito mode
   -cwu, -chrome-ws-url string       use chrome browser instance launched elsewhere with the debugger listening at this URL
   -xhr, -xhr-extraction             extract xhr request url,method in jsonl output
   -pls, -page-load-strategy string  page load strategy (heuristic, load, domcontentloaded, networkidle, none) (default "heuristic")
   -dwt, -dom-wait-time int          time in seconds to wait after page load when using domcontentloaded strategy (default 5)
   -csp, -captcha-solver-provider string  captcha solver provider (e.g. capsolver)
   -csk, -captcha-solver-key string       captcha solver provider api key

SCOPE:
   -cs, -crawl-scope string[]       in scope url regex to be followed by crawler
   -cos, -crawl-out-scope string[]  out of scope url regex to be excluded by crawler
   -fs, -field-scope string         pre-defined scope field (dn,rdn,fqdn) or custom regex (e.g., '(company-staging.io|company.com)') (default "rdn")
   -ns, -no-scope                   disables host based default scope
   -do, -display-out-scope          display external endpoint from scoped crawling

FILTER:
   -mr, -match-regex string[]             regex or list of regex to match on output url (cli, file)
   -fr, -filter-regex string[]            regex or list of regex to filter on output url (cli, file)
   -f, -field string                      field to display in output (url,path,fqdn,rdn,rurl,qurl,qpath,file,ufile,key,value,kv,dir,udir) (Deprecated: use -output-template instead)
   -sf, -store-field string               field to store in per-host output (url,path,fqdn,rdn,rurl,qurl,qpath,file,ufile,key,value,kv,dir,udir)
   -em, -extension-match string[]         match output for given extension (eg, -em php,html,js,none)
   -ef, -extension-filter string[]        filter output for given extension (eg, -ef png,css)
   -ndef, -no-default-ext-filter bool     remove default extensions from the filter list
   -mdc, -match-condition string          match response with dsl based condition
   -fdc, -filter-condition string         filter response with dsl based condition
   -duf, -disable-unique-filter           disable duplicate content filtering
   -filter-page-type string[]      filter response with page type (e.g. error,captcha,parked)

RATE-LIMIT:
   -c, -concurrency int          number of concurrent fetchers to use (default 10)
   -p, -parallelism int          number of concurrent inputs to process (default 10)
   -rd, -delay int               request delay between each request in seconds
   -rl, -rate-limit int          maximum requests to send per second (default 150)
   -rlm, -rate-limit-minute int  maximum number of requests to send per minute
   -hrl, -host-rate-limit int    maximum requests to send per second per host
   -hrlm, -host-rate-limit-minute int  maximum number of requests to send per minute per host

UPDATE:
   -up, -update                 update katana to latest version
   -duc, -disable-update-check  disable automatic katana update check

OUTPUT:
   -o, -output string                file to write output to
   -output-template string      custom output template
   -sr, -store-response              store http requests/responses
   -srd, -store-response-dir string  store http requests/responses to custom directory
   -ncb, -no-clobber                 do not overwrite output file
   -sfd, -store-field-dir string     store per-host field to custom directory
   -or, -omit-raw                    omit raw requests/responses from jsonl output
   -ob, -omit-body                   omit response body from jsonl output
   -lof, -list-output-fields         list available fields for jsonl output format
   -eof, -exclude-output-fields      exclude fields from jsonl output
   -j, -jsonl                        write output in jsonl format
   -nc, -no-color                    disable output content coloring (ANSI escape codes)
   -silent                           display output only
   -v, -verbose                      display verbose output
   -debug                            display debug output
   -version                          display project version

Запуск Katana

Входные данные для katana

katana требует url или конечную точку для краулинга и принимает один или несколько входных данных.

Входной URL можно предоставить с помощью опции -u, несколько значений можно указать через запятую, аналогично поддерживается ввод файла с помощью опции -list, а также ввод через конвейер (stdin).

Ввод URL

katana -u https://tesla.com

Ввод нескольких URL (через запятую)

katana -u https://tesla.com,https://google.com

Ввод из файла

$ cat url_list.txt

https://tesla.com
https://google.com
katana -list url_list.txt

Ввод через STDIN (конвейер)

echo https://tesla.com | katana
cat domains | httpx | katana

Сходство содержимого страниц

Опциональная фильтрация второго уровня после точного удаления дубликатов по MD5-хешу. Общий процесс нормализации HTML удаляет служебные элементы (nav/header/footer/скрипты), затем один из трех режимов определяет, достаточно ли похожа страница, чтобы пропустить дальнейший парсинг/очередь (бюджет кластера). Дедупликация по форме URL (-fsu) остается независимой.

Режим Флаг Лучше всего подходит для
simhash (по умолчанию) -pcsm simhash Почти дубликаты / шаблонные клонирование (расстояние Хэмминга через -pcsd)
tfidf -pcsm tfidf Косинусное сходство по тематике (-pcst)
bm25 -pcsm bm25 Тематическое сходство с нормализацией по длине (-pcst)
# Near-duplicate detection (default mode)
katana -u https://example.com -pcs

# TF-IDF topical filtering with higher budget
katana -u https://shop.example.com -pcs -pcsm tfidf -pcst 0.85 -pcsn 2

# BM25 mode
katana -u https://example.com -pcs -pcsm bm25

# Alias from older flag name
katana -u https://example.com -sdd -pcsm simhash

Пример статистики завершения:

[INF] Content similarity (simhash): 103 processed, 30 accepted, 73 filtered - 70.9% filter rate
[INF] Crawl completed in 14s. 21 endpoints found.

Пример запуска katana -

katana -u https://youtube.com

   __        __                
  / /_____ _/ /____ ____  ___ _
 /  '_/ _  / __/ _  / _ \/ _  /
/_/\_\\_,_/\__/\_,_/_//_/\_,_/ v0.0.1                     

      projectdiscovery.io

[WRN] Use with caution. You are responsible for your actions.
[WRN] Developers assume no liability and are not responsible for any misuse or damage.
https://www.youtube.com/
https://www.youtube.com/about/
https://www.youtube.com/about/press/
https://www.youtube.com/about/copyright/
https://www.youtube.com/t/contact_us/
https://www.youtube.com/creators/
https://www.youtube.com/ads/
https://www.youtube.com/t/terms
https://www.youtube.com/t/privacy
https://www.youtube.com/about/policies/
https://www.youtube.com/howyoutubeworks?utm_campaign=ytgen&utm_source=ythp&utm_medium=LeftNav&utm_content=txt&u=https%3A%2F%2Fwww.youtube.com%2Fhowyoutubeworks%3Futm_source%3Dythp%26utm_medium%3DLeftNav%26utm_campaign%3Dytgen
https://www.youtube.com/new
https://m.youtube.com/
https://www.youtube.com/s/desktop/4965577f/jsbin/desktop_polymer.vflset/desktop_polymer.js
https://www.youtube.com/s/desktop/4965577f/cssbin/www-main-desktop-home-page-skeleton.css
https://www.youtube.com/s/desktop/4965577f/cssbin/www-onepick.css
https://www.youtube.com/s/_/ytmainappweb/_/ss/k=ytmainappweb.kevlar_base.0Zo5FUcPkCg.L.B1.O/am=gAE/d=0/rs=AGKMywG5nh5Qp-BGPbOaI1evhF5BVGRZGA
https://www.youtube.com/opensearch?locale=en_GB
https://www.youtube.com/manifest.webmanifest
https://www.youtube.com/s/desktop/4965577f/cssbin/www-main-desktop-watch-page-skeleton.css
https://www.youtube.com/s/desktop/4965577f/jsbin/web-animations-next-lite.min.vflset/web-animations-next-lite.min.js
https://www.youtube.com/s/desktop/4965577f/jsbin/custom-elements-es5-adapter.vflset/custom-elements-es5-adapter.js
https://www.youtube.com/s/desktop/4965577f/jsbin/webcomponents-sd.vflset/webcomponents-sd.js
https://www.youtube.com/s/desktop/4965577f/jsbin/intersection-observer.min.vflset/intersection-observer.min.js
https://www.youtube.com/s/desktop/4965577f/jsbin/scheduler.vflset/scheduler.js
https://www.youtube.com/s/desktop/4965577f/jsbin/www-i18n-constants-en_GB.vflset/www-i18n-constants.js
https://www.youtube.com/s/desktop/4965577f/jsbin/www-tampering.vflset/www-tampering.js
https://www.youtube.com/s/desktop/4965577f/jsbin/spf.vflset/spf.js
https://www.youtube.com/s/desktop/4965577f/jsbin/network.vflset/network.js
https://www.youtube.com/howyoutubeworks/
https://www.youtube.com/trends/
https://www.youtube.com/jobs/
https://www.youtube.com/kids/

Режим краулинга

Стандартный режим

Стандартный режим краулинга использует стандартную Go http-библиотеку для обработки HTTP-запросов/ответов. Этот режим намного быстрее, так как не имеет накладных расходов веб-браузера. Тем не менее, он анализирует тело HTTP-ответов как есть, без какого-либо рендеринга javascript или DOM, потенциально пропуская эндпоинты, отрисованные после загрузки DOM, или асинхронные вызовы эндпоинтов, которые могут происходить в сложных веб-приложениях в зависимости, например, от событий, специфичных для браузера.

Headless (Безголовый) режим

Headless режим использует встроенные headless-вызовы для обработки HTTP-запросов/ответов непосредственно в контексте браузера. Это дает два преимущества: - HTTP-отпечаток (TLS и пользовательский агент) полностью идентифицирует клиент как легитимный браузер - Лучшее покрытие, поскольку эндпоинты обнаруживаются анализом как стандартного необработанного ответа, как в предыдущем режиме, так и отрисованного браузером ответа с включенным javascript.

Headless краулинг не является обязательным и может быть включен с помощью опции -headless.

Вот другие headless CLI-опции -

katana -h headless

Flags:
HEADLESS:
   -hl, -headless                    enable headless hybrid crawling (experimental)
   -sc, -system-chrome               use local installed chrome browser instead of katana installed
   -sb, -show-browser                show the browser on the screen with headless mode
   -ho, -headless-options string[]   start headless chrome with additional options
   -nos, -no-sandbox                 start headless chrome in --no-sandbox mode
   -cdd, -chrome-data-dir string     path to store chrome browser data
   -scp, -system-chrome-path string  use specified chrome browser for headless crawling
   -noi, -no-incognito               start headless chrome without incognito mode
   -cwu, -chrome-ws-url string       use chrome browser instance launched elsewhere with the debugger listening at this URL
   -xhr, -xhr-extraction             extract xhr requests
   -pls, -page-load-strategy string  page load strategy (heuristic, load, domcontentloaded, networkidle, none) (default "heuristic")
   -dwt, -dom-wait-time int          time in seconds to wait after page load when using domcontentloaded strategy (default 5)
   -csp, -captcha-solver-provider string  captcha solver provider (e.g. capsolver)
   -csk, -captcha-solver-key string       captcha solver provider api key

-no-sandbox

Запускает headless chrome браузер с опцией no-sandbox, полезно при запуске от имени пользователя root.

katana -u https://tesla.com -headless -no-sandbox

-no-incognito

Запускает headless chrome браузер без режима инкогнито, полезно при использовании локального браузера.

katana -u https://tesla.com -headless -no-incognito

Чтобы сохранять cookies и другие данные сессии браузера между запусками, комбинируйте -no-incognito с -chrome-data-dir, чтобы Katana использовала выбранную вами директорию профиля Chrome вместо изолированной временной.

katana -u https://tesla.com -headless -no-incognito -chrome-data-dir /tmp/katana-profile

-headless-options

При краулинге в headless-режиме дополнительные опции chrome можно указать с помощью -headless-options, например -

katana -u https://tesla.com -headless -system-chrome -headless-options --disable-gpu,proxy-server=http://127.0.0.1:8080

-page-load-strategy

Управляет тем, как katana ждет загрузки страниц в headless-режиме. Разные стратегии полезны для разных типов веб-приложений:

Стратегия Описание
heuristic (по умолчанию) Умное ожидание, адаптирующееся к поведению страницы - ожидает событие загрузки, бездействие сети и стабильность DOM
load Ждет только события загрузки браузера
domcontentloaded Ждет события DOMContentLoaded плюс дополнительное время (настраивается через -dwt) для рендеринга JavaScript
networkidle Ждет прекращения сетевой активности
none Без ожидания - возвращает результат сразу после начала навигации
katana -u https://tesla.com -headless -pls domcontentloaded

Стратегия domcontentloaded особенно полезна для одностраничных приложений (SPA), которые никогда полностью не завершают загрузку из-за непрерывных фоновых запросов (вебсокеты, поллинг и т.д.).

-dom-wait-time

При использовании стратегии загрузки страниц domcontentloaded эта опция определяет, сколько секунд ждать после срабатывания события DOMContentLoaded. Это позволяет время для рендеринга интерактивных элементов JavaScript. По умолчанию 5 секунд.

katana -u https://tesla.com -headless -pls domcontentloaded -dwt 10

Решение капч

Katana поддерживает автоматическое обнаружение и решение капч при headless-краулинге. При обнаружении страницы с капчей katana определяет поставщика капчи, решает ее через внешний сервис и продолжает краулинг.

Поддерживаемые типы капч: reCAPTCHA v2, reCAPTCHA v3, reCAPTCHA Enterprise, Cloudflare Turnstile, hCaptcha

-captcha-solver-provider

Опция для указания поставщика решения капч. В настоящее время поддерживается: capsolver.

-captcha-solver-key

API-ключ для поставщика решения капч.

katana -u https://example.com -headless -csp capsolver -csk YOUR_API_KEY

Поставщик и ключ также можно задать с помощью переменных окружения:

export CAPTCHA_SOLVER_PROVIDER=capsolver
export CAPTCHA_SOLVER_KEY=YOUR_API_KEY
katana -u https://example.com -headless

Управление областью

Краулинг может быть бесконечным, если не ограничить область, поэтому katana поставляется с множеством средств для определения области краулинга.

-field-scope

Наиболее удобная опция для определения области с использованием предопределенного имени поля, rdn является опцией по умолчанию для области поля.

  • rdn - краулинг ограничен корневым доменным именем и всеми поддоменами (например, *example.com) (по умолчанию)
  • fqdn - краулинг ограничен указанным поддоменом (например, www.example.com или api.example.com)
  • dn - краулинг ограничен ключевым словом доменного имени (например, example)
katana -u https://tesla.com -fs dn

-crawl-scope

Для расширенного управления областью можно использовать опцию -cs, которая поддерживает регулярные выражения.

katana -u https://tesla.com -cs login

Для множественных правил области допускается передача файла с многострочными строками / регулярными выражениями.

$ cat in_scope.txt

login/
admin/
app/
wordpress/
katana -u https://tesla.com -cs in_scope.txt

-crawl-out-scope

Для определения того, что не следует краулить, можно использовать опцию -cos, которая также поддерживает ввод регулярных выражений.

katana -u https://tesla.com -cos logout

Для множественных правил исключения области допускается передача файла с многострочными строками / регулярными выражениями.

$ cat out_of_scope.txt

/logout
/log_out
katana -u https://tesla.com -cos out_of_scope.txt

-no-scope

Katana по умолчанию ограничивает область *.domain, чтобы отключить это, можно использовать опцию -ns, а также для краулинга всего интернета.

katana -u https://tesla.com -ns

-display-out-scope

По умолчанию, когда используется опция scope, она также применяется для отображения ссылок в качестве результата, поэтому внешние URL по умолчанию исключаются, и чтобы переопределить это поведение, можно использовать опцию -do для отображения всех внешних URL, которые существуют в целевом URL / Endpoints с областью видимости.

katana -u https://tesla.com -do

Вот все опции CLI для управления областью видимости -

katana -h scope

Flags:
SCOPE:
   -cs, -crawl-scope string[]       in scope url regex to be followed by crawler
   -cos, -crawl-out-scope string[]  out of scope url regex to be excluded by crawler
   -fs, -field-scope string         pre-defined scope field (dn,rdn,fqdn) (default "rdn")
   -ns, -no-scope                   disables host based default scope
   -do, -display-out-scope          display external endpoint from scoped crawling

Конфигурация краулера

Katana предоставляет множество опций для настройки и управления краулингом так, как нам нужно.

-depth

Определение глубины (depth) для отслеживания URL для краулинга. Чем больше глубина, тем больше количество краулируемых endpoints + больше времени на краулинг.

katana -u https://tesla.com -d 5

-js-crawl

Опция для включения парсинга файлов JavaScript + краулинга endpoints, обнаруженных в файлах JavaScript. По умолчанию отключена.

katana -u https://tesla.com -jc

-crawl-duration

Опция для предварительного определения длительности краулинга. По умолчанию отключена.

katana -u https://tesla.com -ct 2

-known-files

Опция для включения краулинга файлов robots.txt и sitemap.xml. По умолчанию отключена.

katana -u https://tesla.com -kf robotstxt,sitemapxml

-automatic-form-fill

Опция для включения автоматического заполнения форм для известных/неизвестных полей. Значения известных полей можно настроить по мере необходимости, обновив конфигурационный файл формы по адресу $HOME/.config/katana/form-config.yaml.

Автоматическое заполнение форм является экспериментальной функцией.

katana -u https://tesla.com -aff

Значения конфигурации форм поддерживают вспомогательные функции DSL для динамической генерации данных. Все функции rand_* из библиотеки projectdiscovery/dsl доступны:

# $HOME/.config/katana/form-config.yaml
email: "rand_email()"
phone: "rand_phone()"
placeholder: "rand_first_name()"
password: 'rand_base(16, "")'
color: "#e66465"

-filter-similar

Опция для фильтрации краулинга похожих по виду URL путем нормализации переменных сегментов пути. Она обнаруживает ID, UUID, хеши, даты и другие динамические значения, а также изучает повторяющиеся шаблоны во время выполнения. Например, /users/123 и /users/456 считаются одним и тем же endpoint.

katana -u https://tesla.com -fsu

Порог повышения (сколько различных значений в позиции пути должно быть, прежде чем она будет рассматриваться как параметр) можно настроить с помощью -fst. Более низкие значения более агрессивны (меньше URL краулируется), более высокие — более разрешительны. По умолчанию 10.

katana -u https://tesla.com -fsu -fst 5

-max-domain-pages

Опция для ограничения количества краулируемых страниц на домен. Предотвращает использование одного доменом всего бюджета краулинга, полезна для больших сайтов или защиты от ловушек краулера.

katana -u https://tesla.com -mdp 100

Классификация базы знаний

Katana может обогащать результаты краулинга с помощью базы знаний — классификации на основе машинного обучения для каждой краулируемой страницы, поддерживаемой dit. При включении каждый ответ классифицируется по типу страницы (например, login, error, captcha, parked), а любые формы на странице идентифицируются, при этом результат прикрепляется к полю knowledgebase выходных данных в формате JSONL. Это работает со всеми движками (стандартным и headless).

Примечание: Классификационная модель загружается автоматически при первом использовании в ~/.dit/model.jsonHugging Face). Это единоразовая загрузка для каждого устройства — последующие запуски используют кэшированную модель. Ручная установка dit не требуется.

-knowledge-base

Включает классификацию базы знаний. Классификация типа страницы и формы добавляется в поле knowledgebase каждого результата.

katana -u https://example.com -kb -jsonl
{
  "timestamp": "...",
  "request": { "...": "..." },
  "response": {
    "...": "...",
    "knowledgebase": {
      "PageType": "login",
      "Forms": [{ "type": "login", "fields": { "username": "username or email", "password": "password" } }]
    }
  }
}

-filter-page-type

Фильтрует результаты, оставляя только указанный тип(ы) страниц. Включение этой опции подразумевает -kb (классификатор инициализируется автоматически).

katana -u https://example.com -fpt login,error

-kb-secrets

Включает экстрактор секретов в базе знаний, обнаруживая обнаруженные секреты (API-ключи, токены и т. д.) под ключом secrets. Добавьте -kb-validate-secrets для проверки обнаруженных секретов у их поставщика — обратите внимание, что это отправляет реальные вызовы API.

katana -u https://example.com -kb-secrets

-kb-endpoints

Включает экстрактор endpoints, который классифицирует запросы как REST, GraphQL, SOAP или XHR под ключом endpoints.

katana -u https://example.com -kb-endpoints

Аутентифицированный краулинг

Аутентифицированный краулинг предполагает включение пользовательских заголовков или куки в HTTP-запросы для доступа к защищенным ресурсам. Эти заголовки предоставляют информацию для аутентификации или авторизации, позволяя вам краулировать аутентифицированный контент / endpoints. Вы можете указать заголовки напрямую в командной строке или предоставить их в виде файла с katana для выполнения аутентифицированного краулинга.

Примечание: Пользователю необходимо вручную выполнить аутентификацию и экспортировать сессионную куки / заголовок в файл для использования с katana.

-headers

Опция для добавления пользовательского заголовка или куки в запрос.

Синтаксис заголовков в HTTP-спецификации

Вот пример добавления куки в запрос:

katana -u https://tesla.com -H 'Cookie: usrsess=AmljNrESo'

Также можно предоставить заголовки или куки в виде файла. Например:

$ cat cookie.txt

Cookie: PHPSESSIONID=XXXXXXXXX
X-API-KEY: XXXXX
TOKEN=XX
katana -u https://tesla.com -H cookie.txt

Есть дополнительные опции для настройки при необходимости, вот все связанные с конфигурацией опции CLI -

katana -h config

Flags:
CONFIGURATION:
   -r, -resolvers string[]       list of custom resolver (file or comma separated)
   -d, -depth int                maximum depth to crawl (default 3)
   -jc, -js-crawl                enable endpoint parsing / crawling in javascript file
   -ct, -crawl-duration int      maximum duration to crawl the target for
   -kf, -known-files string      enable crawling of known files (all,robotstxt,sitemapxml)
   -mrs, -max-response-size int  maximum response size to read (default 9223372036854775807)
   -timeout int                  time to wait for request in seconds (default 10)
   -aff, -automatic-form-fill    enable automatic form filling (experimental)
   -fx, -form-extraction         enable extraction of form, input, textarea & select elements
   -retry int                    number of times to retry the request (default 1)
   -proxy string                 http/socks5 proxy to use
   -H, -headers string[]         custom header/cookie to include in request
   -config string                path to the katana configuration file
   -fc, -form-config string      path to custom form configuration file
   -flc, -field-config string    path to custom field configuration file
   -s, -strategy string          Visit strategy (depth-first, breadth-first) (default "depth-first")
   -iqp, -ignore-query-params    Ignore crawling same path with different query-param values
   -fsu, -filter-similar         filter crawling of similar looking URLs (e.g., /users/123 and /users/456)
   -fst, -filter-similar-threshold int  number of distinct values before a path position is treated as parameter (default 10)
   -mdp, -max-domain-pages int   maximum number of pages to crawl per domain (default unlimited)

Подключение к активной сессии браузера

Katana также может подключаться к активной сессии браузера, где пользователь уже вошел в систему и прошел аутентификацию, и использовать ее для краулинга. Единственное требование для этого — запустить браузер с включенным удаленной отладкой.

Вот пример запуска браузера Chrome с включенной удаленной отладкой и использования его с katana -

шаг 1) Сначала найдите путь к исполняемому файлу Chrome

Операционная система Расположение исполняемого файла Chromium Расположение исполняемого файла Google Chrome
Windows (64 бит) C:\Program Files (x86)\Google\Chromium\Application\chrome.exe C:\Program Files (x86)\Google\Chrome\Application\chrome.exe
Windows (32 бит) C:\Program Files\Google\Chromium\Application\chrome.exe C:\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 с включенной удаленной отладкой, он вернет URL-адрес websocket. Например, в MacOS вы можете запустить Chrome с включенной удаленной отладкой, используя следующую команду -

$ /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --remote-debugging-port=9222


DevTools listening on ws://127.0.0.1:9222/devtools/browser/c5316c9c-19d6-42dc-847a-41d1aeebf7d6

Теперь войдите на веб-сайт, который хотите краулировать, и оставьте браузер открытым.

шаг 3) Теперь используйте URL-адрес websocket с katana для подключения к активной сессии браузера и краулинга веб-сайта

katana -headless -u https://tesla.com -cwu ws://127.0.0.1:9222/devtools/browser/c5316c9c-19d6-42dc-847a-41d1aeebf7d6 -no-incognito

Примечание: вы можете использовать опцию -cdd для указания пользовательского каталога данных Chrome для хранения данных браузера и куки, но это не сохраняет данные сессии, если куки установлена как Только или истекает через определенное время.

Фильтры

-field

[!WARNING] Устарело: используйте -output-template. Флаг field все еще поддерживается для обратной совместимости.

Katana поставляется со встроенными полями, которые можно использовать для фильтрации вывода для получения желаемой информации. Опцию -f можно использовать для указания любого из доступных полей.

   -f, -field string  field to display in output (url,path,fqdn,rdn,rurl,qurl,qpath,file,key,value,kv,dir,udir)

Вот таблица с примерами каждого поля и ожидаемым результатом при его использовании -

ПОЛЕ ОПИСАНИЕ ПРИМЕР
url URL Endpoint https://admin.projectdiscovery.io/admin/login?user=admin&password=admin
qurl URL с параметрами запроса https://admin.projectdiscovery.io/admin/login.php?user=admin&password=admin
qpath Путь с параметрами запроса /login?user=admin&password=admin
path URL Path https://admin.projectdiscovery.io/admin/login
fqdn Полностью квалифицированное доменное имя admin.projectdiscovery.io
rdn Корневое доменное имя projectdiscovery.io
rurl Корневой URL https://admin.projectdiscovery.io
ufile URL с файлом https://admin.projectdiscovery.io/login.js
file Имя файла в URL login.php
key Ключи параметров в URL user,password
value Значения параметров в URL admin,admin
kv Ключи=Значения в URL user=admin&password=admin
dir Имя каталога URL /admin/
udir URL с каталогом https://admin.projectdiscovery.io/admin/

Вот пример использования опции field для отображения только всех URL с параметром запроса -

katana -u https://tesla.com -f qurl -silent

https://shop.tesla.com/en_au?redirect=no
https://shop.tesla.com/en_nz?redirect=no
https://shop.tesla.com/product/men_s-raven-lightweight-zip-up-bomber-jacket?sku=1740250-00-A
https://shop.tesla.com/product/tesla-shop-gift-card?sku=1767247-00-A
https://shop.tesla.com/product/men_s-chill-crew-neck-sweatshirt?sku=1740176-00-A
https://www.tesla.com/about?redirect=no
https://www.tesla.com/about/legal?redirect=no
https://www.tesla.com/findus/list?redirect=no

Пользовательские поля

Вы можете создавать пользовательские поля для извлечения и хранения определённой информации из ответов страниц, используя правила регулярных выражений. Эти пользовательские поля определяются в конфигурационном файле YAML и загружаются из расположения по умолчанию: $HOME/.config/katana/field-config.yaml. Альтернативно, вы можете использовать опцию -flc для загрузки конфигурационного файла пользовательских полей из другого расположения. Вот пример пользовательского поля.

- name: email
  type: regex
  regex:
  - '([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9_-]+)'
  - '([a-zA-Z0-9+._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9_-]+)'

- name: phone
  type: regex
  regex:
  - '\d{3}-\d{8}|\d{4}-\d{7}'

При определении пользовательских полей поддерживаются следующие атрибуты:

  • name (обязательный)

Значение атрибута name используется как значение опции CLI -field.

  • type (обязательный)

Тип пользовательского атрибута, в настоящее время поддерживаемая опция — regex.

  • part (необязательный)

Часть ответа, из которой извлекается информация. Значение по умолчанию — response, которое включает и заголовок, и тело. Другие возможные значения — header и body.

  • group (необязательный)

Вы можете использовать этот атрибут для выбора конкретной совпавшей группы в регулярном выражении, например: group: 1.

Запуск katana с пользовательским полем:

katana -u https://tesla.com -f email,phone

-store-field

Для дополнения опции field, которая полезна для фильтрации вывода во время выполнения, существует опция -sf, -store-fields, которая работает точно так же, как опция field, за исключением того, что вместо фильтрации она сохраняет всю информацию на диск в директорию katana_field, отсортированную по целевому URL. Используйте -sfd или -store-field-dir для сохранения данных в другом расположении.

katana -u https://tesla.com -sf key,fqdn,qurl -silent
$ ls katana_field/

https_www.tesla.com_fqdn.txt
https_www.tesla.com_key.txt
https_www.tesla.com_qurl.txt

Опция -store-field может быть полезна для сбора информации для создания целевых списков слов для различных целей, включая, но не ограничиваясь:

  • Определение наиболее часто используемых параметров
  • Обнаружение часто используемых путей
  • Поиск часто используемых файлов
  • Определение связанных или неизвестных поддоменов

Фильтры Katana

-extension-match

Вывод сканирования можно легко сопоставить с определённым расширением, используя опцию -em, чтобы гарантированно отображать только вывод, содержащий указанное расширение.

katana -u https://tesla.com -silent -em js,jsp,json

Используйте специальное значение none, чтобы также включить в вывод URL без расширения файла:

katana -u https://tesla.com -silent -em js,jsp,json,none

-extension-filter

Вывод сканирования можно легко отфильтровать по определённому расширению, используя опцию -ef, которая гарантирует удаление всех URL, содержащих указанное расширение.

katana -u https://tesla.com -silent -ef css,txt,md

-no-default-ext-filter

Katana по умолчанию фильтрует несколько расширений. Это можно отключить с помощью опции -ndef.

katana -u https://tesla.com -silent -ndef

-match-regex

Флаг -match-regex или -mr позволяет фильтровать выходные URL с помощью регулярных выражений. При использовании этого флага только URL, соответствующие указанному регулярному выражению, будут напечатаны в выводе.

katana -u https://tesla.com -mr 'https://shop\.tesla\.com/*' -silent

-filter-regex

Флаг -filter-regex или -fr позволяет фильтровать выходные URL с помощью регулярных выражений. При использовании этого флага URL, соответствующие указанному регулярному выражению, будут пропускаться.

katana -u https://tesla.com -fr 'https://www\.tesla\.com/*' -silent

Расширенная фильтрация

Katana поддерживает выражения на основе DSL для расширенных возможностей сопоставления и фильтрации:

  • Чтобы сопоставить конечные точки с кодом состояния 200:
katana -u https://www.hackerone.com -mdc 'status_code == 200'
  • Чтобы сопоставить конечные точки, содержащие "default" и имеющие код состояния, отличный от 403:
katana -u https://www.hackerone.com -mdc 'contains(endpoint, "default") && status_code != 403'
  • Чтобы сопоставить конечные точки с технологиями PHP:
katana -u https://www.hackerone.com -mdc 'contains(to_lower(technologies), "php")'
  • Чтобы отфильтровать конечные точки, работающие на Cloudflare:
katana -u https://www.hackerone.com -fdc 'contains(to_lower(technologies), "cloudflare")'

Функции DSL можно применять к любим ключам в выводе jsonl. Для получения дополнительной информации о доступных функциях DSL посетите проект dsl.

Вот дополнительные параметры фильтрации -

katana -h filter

Flags:
FILTER:
   -mr, -match-regex string[]             regex or list of regex to match on output url (cli, file)
   -fr, -filter-regex string[]            regex or list of regex to filter on output url (cli, file)
   -f, -field string                      field to display in output (url,path,fqdn,rdn,rurl,qurl,qpath,file,ufile,key,value,kv,dir,udir)
   -sf, -store-field string               field to store in per-host output (url,path,fqdn,rdn,rurl,qurl,qpath,file,ufile,key,value,kv,dir,udir)
   -em, -extension-match string[]         match output for given extension (eg, -em php,html,js,none)
   -ef, -extension-filter string[]        filter output for given extension (eg, -ef png,css)
   -ndef, -no-default-ext-filter bool     remove default extensions from the filter list
   -mdc, -match-condition string          match response with dsl based condition
   -fdc, -filter-condition string         filter response with dsl based condition
   -duf, -disable-unique-filter           disable duplicate content filtering

Ограничение скорости

Легко получить блокировку / бан во время сканирования, если не соблюдать лимиты целевых веб-сайтов. Katana поставляется с множеством опций для настройки скорости сканирования, чтобы она была такой быстрой / медленной, какой вы хотите.

-delay

опция для введения задержки в секундах между каждым новым запросом, который katana делает во время сканирования. По умолчанию отключена.

katana -u https://tesla.com -delay 20

-concurrency

опция для управления количеством URL на mục tiêu для одновременной загрузки.

katana -u https://tesla.com -c 20

-parallelism

опция для определения количества целей для одновременной обработки из входного списка.

katana -u https://tesla.com -p 20

-rate-limit

Максимальное количество запросов в секунду, применяется глобально ко всем хостам.

katana -u https://tesla.com -rl 100

-rate-limit-minute

Максимальное количество запросов в минуту, применяется глобально ко всем хостам.

katana -u https://tesla.com -rlm 500

-host-rate-limit

Максимальное количество запросов в секунду на хост. Каждый хост получает свой собственный пул для ограничения скорости, поэтому медленный хост не будет замедлять быстрые. Заменяет глобальное ограничение скорости при установке. Katana также автоматически делает откат с экспоненциальной задержкой и джиттером, когда хост возвращает 429 или 503.

katana -u https://tesla.com -hrl 50

-host-rate-limit-minute

Максимальное количество запросов в минуту на хост.

katana -u https://tesla.com -hrlm 200

Вот все длинные / короткие варианты CLI для управления ограничением скорости -

katana -h rate-limit

Flags:
RATE-LIMIT:
   -c, -concurrency int          number of concurrent fetchers to use (default 10)
   -p, -parallelism int          number of concurrent inputs to process (default 10)
   -rd, -delay int               request delay between each request in seconds
   -rl, -rate-limit int          maximum requests to send per second (default 150)
   -rlm, -rate-limit-minute int  maximum number of requests to send per minute
   -hrl, -host-rate-limit int    maximum requests to send per second per host
   -hrlm, -host-rate-limit-minute int  maximum number of requests to send per minute per host

Вывод

Katana поддерживает как вывод файлов в формате простого текста, так и JSON, который включает дополнительную информацию, такую как source, tag и имя attribute для корреляции обнаруженных конечных точек.

-output

По умолчанию katana выводит обнаруженные конечные точки в формате простого текста. Результаты можно записать в файл, используя опцию -output.

katana -u https://example.com -no-scope -output example_endpoints.txt

-output-template

Опция -output-template позволяет настроить формат вывода с помощью шаблона, обеспечивая гибкость в определении структуры вывода. Эта опция заменяет устаревший флаг -field для фильтрации вывода. Вместо использования предопределённых полей вы можете указать пользовательский шаблон непосредственно в командной строке, чтобы контролировать представление извлечённых данных.

Пример использования опции -output-template:

katana -u https://example.com -output-template '{{email}} - {{url}}'

В этом примере email представляет пользовательское поле, которое извлекает и отображает адреса электронной почты, найденные в источнике url.

[!NOTE] Если указанное поле не существует или не содержит значения, оно просто будет пропущено в выводе.

Эта опция может эффективно структурировать вывод наиболее подходящим для вашего варианта использования образом, делая извлечение данных более интуитивным и настраиваемым.

-jsonl

katana -u https://example.com -jsonl | jq .
{
  "timestamp": "2023-03-20T16:23:58.027559+05:30",
  "request": {
    "method": "GET",
    "endpoint": "https://example.com",
    "raw": "GET / HTTP/1.1\r\nHost: example.com\r\nUser-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 11_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36\r\nAccept-Encoding: gzip\r\n\r\n"
  },
  "response": {
    "status_code": 200,
    "headers": {
      "accept_ranges": "bytes",
      "expires": "Mon, 27 Mar 2023 10:53:58 GMT",
      "last_modified": "Thu, 17 Oct 2019 07:18:26 GMT",
      "content_type": "text/html; charset=UTF-8",
      "server": "ECS (dcb/7EA3)",
      "vary": "Accept-Encoding",
      "etag": "\"3147526947\"",
      "cache_control": "max-age=604800",
      "x_cache": "HIT",
      "date": "Mon, 20 Mar 2023 10:53:58 GMT",
      "age": "331239"
    },
    "body": "<!doctype html>\n<html>\n<head>\n    <title>Example Domain</title>\n\n    <meta charset=\"utf-8\" />\n    <meta http-equiv=\"Content-type\" content=\"text/html; charset=utf-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n    <style type=\"text/css\">\n    body {\n        background-color: #f0f0f2;\n        margin: 0;\n        padding: 0;\n        font-family: -apple-system, system-ui, BlinkMacSystemFont, \"Segoe UI\", \"Open Sans\", \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n        \n    }\n    div {\n        width: 600px;\n        margin: 5em auto;\n        padding: 2em;\n        background-color: #fdfdff;\n        border-radius: 0.5em;\n        box-shadow: 2px 3px 7px 2px rgba(0,0,0,0.02);\n    }\n    a:link, a:visited {\n        color: #38488f;\n        text-decoration: none;\n    }\n    @media (max-width: 700px) {\n        div {\n            margin: 0 auto;\n            width: auto;\n        }\n    }\n    </style>    \n</head>\n\n<body>\n<div>\n    <h1>Example Domain</h1>\n    <p>This domain is for use in illustrative examples in documents. You may use this\n    domain in literature without prior coordination or asking for permission.</p>\n    <p><a href=\"https://www.iana.org/domains/example\">More information...</a></p>\n</div>\n</body>\n</html>\n",
    "technologies": [
      "Azure",
      "Amazon ECS",
      "Amazon Web Services",
      "Docker",
      "Azure CDN"
    ],
    "raw": "HTTP/1.1 200 OK\r\nContent-Length: 1256\r\nAccept-Ranges: bytes\r\nAge: 331239\r\nCache-Control: max-age=604800\r\nContent-Type: text/html; charset=UTF-8\r\nDate: Mon, 20 Mar 2023 10:53:58 GMT\r\nEtag: \"3147526947\"\r\nExpires: Mon, 27 Mar 2023 10:53:58 GMT\r\nLast-Modified: Thu, 17 Oct 2019 07:18:26 GMT\r\nServer: ECS (dcb/7EA3)\r\nVary: Accept-Encoding\r\nX-Cache: HIT\r\n\r\n<!doctype html>\n<html>\n<head>\n    <title>Example Domain</title>\n\n    <meta charset=\"utf-8\" />\n    <meta http-equiv=\"Content-type\" content=\"text/html; charset=utf-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n    <style type=\"text/css\">\n    body {\n        background-color: #f0f0f2;\n        margin: 0;\n        padding: 0;\n        font-family: -apple-system, system-ui, BlinkMacSystemFont, \"Segoe UI\", \"Open Sans\", \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n        \n    }\n    div {\n        width: 600px;\n        margin: 5em auto;\n        padding: 2em;\n        background-color: #fdfdff;\n        border-radius: 0.5em;\n        box-shadow: 2px 3px 7px 2px rgba(0,0,0,0.02);\n    }\n    a:link, a:visited {\n        color: #38488f;\n        text-decoration: none;\n    }\n    @media (max-width: 700px) {\n        div {\n            margin: 0 auto;\n            width: auto;\n        }\n    }\n    </style>    \n</head>\n\n<body>\n<div>\n    <h1>Example Domain</h1>\n    <p>This domain is for use in illustrative examples in documents. You may use this\n    domain in literature without prior coordination or asking for permission.</p>\n    <p><a href=\"https://www.iana.org/domains/example\">More information...</a></p>\n</div>\n</body>\n</html>\n"
  }
}

-store-response

Опция -store-response позволяет записывать все запросы и ответы обнаруженных конечных точек в текстовый файл. При использовании этой опции текстовые файлы, включающие запрос и ответ, будут записаны в директорию katana_response. Если вы хотите указать пользовательскую директорию, вы можете использовать опцию -store-response-dir.

katana -u https://example.com -no-scope -store-response
$ cat katana_response/index.txt

katana_response/example.com/327c3fda87ce286848a574982ddd0b7c7487f816.txt https://example.com (200 OK)
katana_response/www.iana.org/bfc096e6dd93b993ca8918bf4c08fdc707a70723.txt http://www.iana.org/domains/reserved (200 OK)

Примечание:

Опция -store-response не поддерживается в режиме -headless.

-list-output-fields

Флаг -list-output-fields или -lof отображает все доступные поля, которые можно использовать в формате вывода JSONL. Это полезно для понимания того, какие данные доступны при использовании пользовательских шаблонов вывода или при исключении определённых полей.

katana -lof

-exclude-output-fields

Флаг -exclude-output-fields или -eof позволяет исключить определённые поля из вывода JSONL. Это полезно для уменьшения размера вывода или для фокусировки на определённых данных путём удаления ненужных полей.

katana -u https://example.com -jsonl -eof raw,body

Вот дополнительные опции CLI, связанные с выводом -

katana -h output

OUTPUT:
   -o, -output string                file to write output to
   -sr, -store-response              store http requests/responses
   -srd, -store-response-dir string  store http requests/responses to custom directory
   -lof, -list-output-fields         list available fields for jsonl output format
   -eof, -exclude-output-fields      exclude fields from jsonl output
   -j, -json                         write output in JSON Lines format
   -nc, -no-color                    disable output content coloring (ANSI escape codes)
   -silent                           display output only
   -v, -verbose                      display verbose output
   -version                          display project version

Katana как библиотека

katana может использоваться как библиотека путём создания экземпляра структуры Option и заполнения его теми же опциями, которые были бы указаны через CLI. Используя эти опции, вы можете создать crawlerOptions и так стандартный, или гибридный crawler. Метод crawler.Crawl должен быть вызван для сканирования ввода.

package main

import (
    "math"

    "github.com/projectdiscovery/gologger"
    "github.com/projectdiscovery/katana/pkg/engine/standard"
    "github.com/projectdiscovery/katana/pkg/output"
    "github.com/projectdiscovery/katana/pkg/types"
)

func main() {
    options := &types.Options{
        MaxDepth:     3,             // Maximum depth to crawl
        FieldScope:   "rdn",         // Crawling Scope Field
        BodyReadSize: math.MaxInt,   // Maximum response size to read
        Timeout:      10,            // Timeout is the time to wait for request in seconds
        Concurrency:  10,            // Concurrency is the number of concurrent crawling goroutines
        Parallelism:  10,            // Parallelism is the number of urls processing goroutines
        Delay:        0,             // Delay is the delay between each crawl requests in seconds
        RateLimit:    150,           // Maximum requests to send per second
        Strategy:     "depth-first", // Visit strategy (depth-first, breadth-first)
        OnResult: func(result output.Result) { // Callback function to execute for result
            gologger.Info().Msg(result.Request.URL)
        },
    }
    crawlerOptions, err := types.NewCrawlerOptions(options)
    if err != nil {
        gologger.Fatal().Msg(err.Error())
    }
    defer crawlerOptions.Close()
    crawler, err := standard.New(crawlerOptions)
    if err != nil {
        gologger.Fatal().Msg(err.Error())
    }
    defer crawler.Close()
    var input = "https://www.hackerone.com"
    err = crawler.Crawl(input)
    if err != nil {
        gologger.Warning().Msgf("Could not crawl %s: %s", input, err.Error())
    }
}

Сообщение о проблемах и запросы функциональности

Для поддержания отслеживания проблем и повышения эффективности обработки:

Все отчёты начинаются как обсуждения в GitHub

Почему сначала обсуждения? - Сообщество может помочь с быстрыми вопросами и устранением неполадок - Лучшая обработка - подтверждённые ошибки/функциональность становятся отслеживаемыми проблемами - Чистый трекер проблем - фокус только на действенных элементах

Maintainers will convert discussions to issues when appropriate after proper review.


katana сделана с ❤️ командой projectdiscovery и распространяется под лицензией MIT.

Присоединяйтесь к Discord

Комментарии
Войдите, чтобы оставить комментарий