Retour aux mises à jour
New releaseAug 5, 2026

katana v1.7.0

Un framework de crawling et de spidering de nouvelle génération.

Partager

katana

Un framework de crawling et de spidering de nouvelle génération

FonctionnalitésInstallationUtilisationPérimètreConfigurationFiltresRejoindre Discord

Fonctionnalités

image

  • Crawling web rapide et entièrement configurable
  • Mode Standard et Headless
  • Analyse / crawling JavaScript
  • Remplissage automatique de formulaires personnalisable
  • Contrôle de périmètre - Champ / Regex préconfiguré
  • Base de connaissances - Classification ML de type de page / formulaire (modèle téléchargé automatiquement)
  • Sortie personnalisable - Champs préconfigurés
  • ENTRÉE - STDIN, URL et LISTE
  • SORTIE - STDOUT, FICHIER et JSON

Installation

katana nécessite Go 1.26+ pour une installation réussie. Si vous rencontrez des problèmes d'installation, nous vous recommandons d'essayer avec la dernière version disponible de Go, car la version minimale requise a pu changer. Exécutez la commande ci-dessous ou téléchargez un binaire pré-compilé depuis la page de release.```console CGO_ENABLED=1 go install github.com/projectdiscovery/katana/cmd/katana@latest

**Plus d'options pour installer / exécuter katana-**

<details>
  <summary>Docker</summary>

> Pour installer / mettre à jour docker vers le dernier tag -```sh
docker pull projectdiscovery/katana:latest

Pour exécuter katana en mode standard en utilisant docker -```sh docker run projectdiscovery/katana:latest -u https://tesla.com

> Pour exécuter katana en mode headless avec docker -```sh
docker run projectdiscovery/katana:latest -u https://tesla.com -system-chrome -headless
Ubuntu

Il est recommandé d'installer les prérequis suivants -```sh 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

> installer katana -```sh
go install github.com/projectdiscovery/katana/cmd/katana@latest

Utilisation```console

katana -h

Ceci affichera l'aide pour l'outil. Voici toutes les options qu'il prend en charge.```console
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)
   -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

Exécution de Katana

Entrée pour katana

katana nécessite url ou endpoint pour crawler et accepte une ou plusieurs entrées.

L'URL d'entrée peut être fournie en utilisant l'option -u, et plusieurs valeurs peuvent être fournies sous forme d'entrée séparée par des virgules. De même, l'entrée fichier est prise en charge via l'option -list et l'entrée par tube (stdin) est également prise en charge.

Entrée URL```sh

katana -u https://tesla.com

#### Saisie d'URL multiples (séparées par des virgules)```sh
katana -u https://tesla.com,https://google.com

Saisie de liste```bash

$ cat url_list.txt

https://tesla.com https://google.com

- [user](https://github.com/user) - 
- [User](https://github.com/User) - 
- [User](https://github.com/User) -```
katana -list url_list.txt

STDIN (piped) Entrée```sh

echo https://tesla.com | katana

<details>
<summary><strong>PLUS DE DÉMOS</strong></summary>

Extraction d'identifiants via LSASS
===
> Si vous avez besoin de la démo complète, consultez le [dépôt original](https://github.com/fortra/nanodump).

</details>```sh
cat domains | httpx | katana

Exemple d'exécution de katana -```console 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/

## Mode de Crawling

### Mode Standard

Le mode de crawling standard utilise la bibliothèque http standard de Go sous le capot pour gérer les requêtes/réponses HTTP. Cette modalité est beaucoup plus rapide car elle ne nécessite pas la surcharge d'un navigateur. Néanmoins, elle analyse le corps des réponses HTTP tel quel, sans aucun rendu JavaScript ou DOM, ce qui peut potentiellement manquer des points d'accès découverts après le rendu DOM ou des appels asynchrones qui pourraient se produire dans des applications web complexes dépendant, par exemple, d'événements spécifiques au navigateur.

### Mode Headless

Le mode Headless connecte les appels headless internes pour gérer les requêtes/réponses HTTP directement dans le contexte du navigateur. Cela offre deux avantages :
- L'empreinte HTTP (TLS et user-agent) identifie complètement le client comme un navigateur légitime
- Une meilleure couverture puisque les points d'accès sont découverts en analysant la réponse brute standard, comme dans la modalité précédente, et également celle rendue par le navigateur avec JavaScript activé.

Le crawling headless est optionnel et peut être activé en utilisant l'option `-headless`.

Voici d'autres options CLI pour le mode headless -```console
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

Lance le navigateur Chrome sans tête avec l'option no-sandbox, utile lors de l'exécution en tant qu'utilisateur root.```console katana -u https://tesla.com -headless -no-sandbox

*`-no-incognito`*
----

Exécute le navigateur Chrome sans tête sans le mode incognito, utile lors de l'utilisation du navigateur local.```console
katana -u https://tesla.com -headless -no-incognito

Pour conserver les cookies et autres données de session du navigateur entre les exécutions, combinez -no-incognito avec -chrome-data-dir afin que Katana réutilise le répertoire de profil Chrome que vous avez choisi au lieu d'un répertoire temporaire isolé.```console katana -u https://tesla.com -headless -no-incognito -chrome-data-dir /tmp/katana-profile

*`-headless-options`*
----

Lors du crawl en mode headless, des options Chrome supplémentaires peuvent être spécifiées en utilisant `-headless-options`, par exemple -```console
katana -u https://tesla.com -headless -system-chrome -headless-options --disable-gpu,proxy-server=http://127.0.0.1:8080

-page-load-strategy

Contrôle la manière dont katana attend le chargement des pages en mode headless. Différentes stratégies sont utiles pour différents types d'applications web :

StratégieDescription
heuristic(par défaut) Attente intelligente qui s'adapte au comportement de la page - attend l'événement de chargement, l'inactivité réseau et la stabilité du DOM
loadAttend uniquement l'événement de chargement du navigateur
domcontentloadedAttend l'événement DOMContentLoaded plus un temps supplémentaire (configurable via -dwt) pour le rendu JavaScript
networkidleAttend que l'activité réseau s'arrête
noneAucune attente - retourne immédiatement après le début de la navigation
katana -u https://tesla.com -headless -pls domcontentloaded
La stratégie `domcontentloaded` est particulièrement utile pour les applications monopages (SPA) qui ne terminent jamais complètement leur chargement en raison de requêtes d’arrière‑plan continues (websockets, sondages, etc.).

*`-dom-wait-time`*
----

Lorsque l’on utilise la stratégie de chargement de page `domcontentloaded`, cette option spécifie le nombre de secondes à attendre après le déclenchement de l’événement DOMContentLoaded. Cela laisse le temps au JavaScript de rendre les éléments interactifs. La valeur par défaut est de 5 secondes.```console
katana -u https://tesla.com -headless -pls domcontentloaded -dwt 10

Résolution de Captcha

Katana prend en charge la détection et la résolution automatiques de captcha lors du crawling sans tête. Lorsqu'une page de captcha est rencontrée, katana identifie le fournisseur de captcha, le résout via un service externe, et continue le crawling.

Types de captcha pris en charge : reCAPTCHA v2, reCAPTCHA v3, reCAPTCHA Enterprise, Cloudflare Turnstile, hCaptcha

-captcha-solver-provider

Option pour spécifier le fournisseur de résolution de captcha. Actuellement pris en charge : capsolver.

-captcha-solver-key

Clé API pour le fournisseur de résolution de captcha.```console katana -u https://example.com -headless -csp capsolver -csk YOUR_API_KEY

Le fournisseur et la clé peuvent également être définis via des variables d'environnement :```console
export CAPTCHA_SOLVER_PROVIDER=capsolver
export CAPTCHA_SOLVER_KEY=YOUR_API_KEY
katana -u https://example.com -headless

Contrôle du périmètre

L'exploration peut être interminable si elle n'est pas limitée, c'est pourquoi katana propose plusieurs options pour définir le périmètre d'exploration.

-field-scope

L'option la plus pratique pour définir le périmètre avec un nom de champ prédéfini, rdn étant l'option par défaut pour le périmètre de champ.

  • rdn - exploration limitée au nom de domaine racine et à tous les sous-domaines (ex. *example.com) (défaut)
  • fqdn - exploration limitée au sous-domaine donné (ex. www.example.com ou api.example.com)
  • dn - exploration limitée au mot-clé du nom de domaine (ex. example)```console katana -u https://tesla.com -fs dn
*`-crawl-scope`*
------

Pour un contrôle avancé de la portée, l'option `-cs` peut être utilisée avec le support des **expressions régulières**.```console
katana -u https://tesla.com -cs login

Pour plusieurs règles dans le périmètre, une entrée de fichier avec une chaîne multiligne / une regex peut être passée.```bash $ cat in_scope.txt

login/ admin/ app/ wordpress/

# # # I n t é g r a t i o n   a v e c   S O A R   p l a t e f o r m e s```console
katana -u https://tesla.com -cs in_scope.txt

-crawl-out-scope

Pour définir ce qui ne doit pas être exploré, l'option -cos peut être utilisée et supporte également les entrées regex.```console katana -u https://tesla.com -cos logout

Pour plusieurs règles hors de portée, une entrée de fichier avec une chaîne multiligne / regex peut être transmise.```bash
$ cat out_of_scope.txt

/logout
/log_out

Vous pouvez également utiliser le flag -v pour obtenir une sortie plus détaillée de Pulsar qui inclut les erreurs et les avertissements :

pulsar scan -v ...

Les commandes de scan Docker sont similaires à celles utilisées dans le CLI par défaut, mais elles sont exécutées à l'aide de l'outil CLI pulsar. La principale différence est que vous devez spécifier l'image Docker comme cible :

pulsar container scan <image_name>

Par exemple, pour scanner l'image Docker officielle de Node.js :

pulsar container scan node:latest
``````console
katana -u https://tesla.com -cos out_of_scope.txt

-no-scope

Katana est par défaut limité au domaine *.domain, pour désactiver cela, l'option -ns peut être utilisée et aussi pour explorer Internet.```console katana -u https://tesla.com -ns

*`-display-out-scope`*
----

Par défaut, lorsque l'option scope est utilisée, elle s'applique également aux liens à afficher en sortie, de sorte que **les URL externes sont exclues par défaut** et pour modifier ce comportement, l'option `-do` peut être utilisée pour afficher toutes les URL externes qui existent dans les URL / points de terminaison couverts par le scope des cibles.```
katana -u https://tesla.com -do

Voici toutes les options CLI pour le contrôle de la portée -```console 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

## Configuration du Crawler

Katana propose plusieurs options pour configurer et contrôler le crawl selon nos besoins.

*`-depth`*
----

Option pour définir la `depth` (profondeur) de suivi des URLs lors du crawl. Plus la profondeur est grande, plus le nombre d'endpoints crawlés est élevé, et plus le temps de crawl est long.```
katana -u https://tesla.com -d 5

-js-crawl

Option pour activer l'analyse des fichiers JavaScript + le crawling des endpoints découverts dans les fichiers JavaScript, désactivé par défaut.``` katana -u https://tesla.com -jc

*`-crawl-duration`*
----

Option pour prédéfinir la durée de crawl, désactivée par défaut.```
katana -u https://tesla.com -ct 2

-known-files

Option pour activer le crawl des fichiers robots.txt et sitemap.xml, désactivée par défaut.``` katana -u https://tesla.com -kf robotstxt,sitemapxml

*`-automatic-form-fill`*
----

Option pour activer le remplissage automatique de formulaires pour les champs connus / inconnus. Les valeurs de champs connus peuvent être personnalisées selon les besoins en mettant à jour le fichier de configuration du formulaire situé à `$HOME/.config/katana/form-config.yaml`.

Le remplissage automatique de formulaires est une fonctionnalité expérimentale.```
katana -u https://tesla.com -aff

Les valeurs de configuration de formulaire prennent en charge les fonctions d'assistance DSL pour la génération dynamique de données. Toutes les fonctions rand_* de la bibliothèque projectdiscovery/dsl sont disponibles :```yaml

$HOME/.config/katana/form-config.yaml

email: "rand_email()" phone: "rand_phone()" placeholder: "rand_first_name()" password: 'rand_base(16, "")' color: "#e66465"

*`-filter-similar`*
----

Option pour filtrer le crawling des URL d'apparence similaire en normalisant les segments de chemin variables. Cela détecte les IDs, UUIDs, hachages, dates et autres valeurs dynamiques, et apprend également des motifs répétitifs à l'exécution. Par exemple, `/users/123` et `/users/456` sont traités comme le même point de terminaison.```
katana -u https://tesla.com -fsu

Le seuil de promotion (combien de valeurs distinctes à une position de chemin avant qu'il ne soit traité comme un paramètre) peut être ajusté avec -fst. Des valeurs plus faibles sont plus agressives (moins d'URLs explorées), des valeurs plus élevées sont plus permissives. La valeur par défaut est 10.``` katana -u https://tesla.com -fsu -fst 5

*`-max-domain-pages`*
----

Option pour limiter le nombre de pages explorées par domaine. Empêche qu'un seul domaine ne consomme l'intégralité du budget d'exploration, utile pour les grands sites ou la protection contre les pièges d'exploration.```
katana -u https://tesla.com -mdp 100

Classification de la base de connaissances

Katana peut enrichir les résultats de crawl avec une base de connaissances — classification par apprentissage automatique de chaque page explorée, propulsée par dit. Lorsqu'elle est activée, chaque réponse est classifiée par type de page (par ex. login, error, captcha, parked) et les formulaires sur la page sont identifiés, le résultat étant ajouté au champ knowledgebase de la sortie JSONL. Cela fonctionne avec tous les moteurs (standard et headless).

Note : Le modèle de classification est téléchargé automatiquement lors de la première utilisation vers ~/.dit/model.json (depuis Hugging Face). Il s'agit d'un coût unique par machine — les exécutions suivantes réutilisent le modèle mis en cache. Aucune installation manuelle de dit n'est requise.

-knowledge-base

Activer la classification de la base de connaissances. La classification du type de page et des formulaires est ajoutée au champ knowledgebase de chaque résultat.```console katana -u https://example.com -kb -jsonl

[No content provided to translate.]```json
{
  "timestamp": "...",
  "request": { "...": "..." },
  "response": {
    "...": "...",
    "knowledgebase": {
      "PageType": "login",
      "Forms": [{ "type": "login", "fields": { "username": "username or email", "password": "password" } }]
    }
  }
}

-filter-page-type

Filtrer les résultats pour ne conserver que le(s) type(s) de page spécifié(s). Activer cette option implique -kb (le classifieur est initialisé automatiquement).```console katana -u https://example.com -fpt login,error

*`-kb-secrets`*
----

Activer l'extracteur de secrets dans la base de connaissances, en révélant les secrets détectés (clés API, jetons, etc.) sous la clé `secrets`. Ajoutez `-kb-validate-secrets` pour valider les secrets détectés auprès de leur fournisseur — notez que cela **envoie des appels API en direct**.```console
katana -u https://example.com -kb-secrets

-kb-endpoints

Activez l'extracteur d'endpoints, qui classe les requêtes en REST, GraphQL, SOAP ou XHR sous la clé endpoints.```console katana -u https://example.com -kb-endpoints

## Crawling Authentifié

Le crawling authentifié consiste à inclure des en-têtes ou cookies personnalisés dans les requêtes HTTP afin d'accéder à des ressources protégées. Ces en-têtes fournissent des informations d'authentification ou d'autorisation, vous permettant de crawler du contenu ou des points d'accès authentifiés. Vous pouvez spécifier les en-têtes directement en ligne de commande ou les fournir via un fichier avec katana pour effectuer du crawling authentifié.

> **Note** : L'utilisateur doit effectuer manuellement l'authentification et exporter le cookie/en-tête de session vers un fichier pour l'utiliser avec katana.

*`-headers`*
----

Option pour ajouter un en-tête ou cookie personnalisé à la requête.
> Syntaxe des [en-têtes](https://datatracker.ietf.org/doc/html/rfc7230#section-3.2) dans la spécification HTTP

Voici un exemple d'ajout d'un cookie à la requête :```
katana -u https://tesla.com -H 'Cookie: usrsess=AmljNrESo'

Il est également possible de fournir des en-têtes ou des cookies sous forme de fichier. Par exemple :``` $ cat cookie.txt

Cookie: PHPSESSIONID=XXXXXXXXX X-API-KEY: XXXXX TOKEN=XX

- Détection de vulnérabilités (SQL Injection, XSS, LFI, etc.)
- Attaques par force brute (SSH, FTP, SMTP, etc.)
- Découverte de sous-domaines (vhosts)
- Scan de ports
- Sniffing réseau
- Fuzzing de fichiers ciblés```
katana -u https://tesla.com -H cookie.txt

Il y a plus d'options à configurer si nécessaire, voici toutes les options CLI liées à la configuration -```console 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)

### Connexion à une session de navigateur active

Katana peut également se connecter à une session de navigateur active où l'utilisateur est déjà connecté et authentifié, et l'utiliser pour le crawling. La seule condition pour cela est de démarrer le navigateur avec le débogage à distance activé.

Voici un exemple de démarrage du navigateur Chrome avec le débogage à distance activé et son utilisation avec Katana -

**étape 1) Localisez d'abord le chemin de l'exécutable Chrome**

| Système d'exploitation | Emplacement de l'exécutable Chromium | Emplacement de l'exécutable Google Chrome |
|------------------|------------------------------|-----------------------------------|
| Windows (64-bit) | `C:\Program Files (x86)\Google\Chromium\Application\chrome.exe` | `C:\Program Files (x86)\Google\Chrome\Application\chrome.exe` |
| Windows (32-bit) | `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` |

**étape 2) Démarrez Chrome avec le débogage à distance activé ; il renverra une URL websocker. Par exemple, sur MacOS, vous pouvez démarrer Chrome avec le débogage à distance activé en utilisant la commande suivante** -```console
$ /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

Connectez-vous maintenant au site web que vous souhaitez crawler et gardez le navigateur ouvert.

étape 3) Utilisez maintenant l'URL websocket avec katana pour vous connecter à la session active du navigateur et crawler le site web```console katana -headless -u https://tesla.com -cwu ws://127.0.0.1:9222/devtools/browser/c5316c9c-19d6-42dc-847a-41d1aeebf7d6 -no-incognito

> **Note** : vous pouvez utiliser l'option `-cdd` pour spécifier un répertoire de données Chrome personnalisé afin de stocker les données du navigateur et les cookies, mais cela ne sauvegarde pas les données de session si le cookie est défini sur `Session` uniquement ou expire après un certain temps.

## Filtres

*`-field`*
----

> [!WARNING]
> Obsolète : utilisez [**`-output-template`**](#-output-template) à la place. Le drapeau `-field` est toujours pris en charge pour la rétrocompatibilité.

Katana est livré avec des champs intégrés qui peuvent être utilisés pour filtrer la sortie afin d'obtenir les informations souhaitées. L'option `-f` peut être utilisée pour spécifier l'un des champs disponibles.```
   -f, -field string  field to display in output (url,path,fqdn,rdn,rurl,qurl,qpath,file,key,value,kv,dir,udir)

Voici un tableau avec des exemples de chaque champ et le résultat attendu lorsqu'il est utilisé :

CHAMPDESCRIPTIONEXEMPLE
urlPoint de terminaison URLhttps://admin.projectdiscovery.io/admin/login?user=admin&password=admin
qurlURL incluant le paramètrehttps://admin.projectdiscovery.io/admin/login.php?user=admin&password=admin
qpathChemin incluant le paramètre/login?user=admin&password=admin
pathChemin URLhttps://admin.projectdiscovery.io/admin/login
fqdnNom de domaine pleinement qualifiéadmin.projectdiscovery.io
rdnNom de domaine racineprojectdiscovery.io
rurlURL racinehttps://admin.projectdiscovery.io
ufileURL avec fichierhttps://admin.projectdiscovery.io/login.js
fileNom du fichier dans l'URLlogin.php
keyClés des paramètres dans l'URLuser,password
valueValeurs des paramètres dans l'URLadmin,admin
kvClés=Valeurs dans l'URLuser=admin&password=admin
dirNom du répertoire URL/admin/
udirURL avec répertoirehttps://admin.projectdiscovery.io/admin/

Voici un exemple d'utilisation de l'option de champ pour n'afficher que toutes les URLs avec un paramètre de requête :``` 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

### Champs personnalisés

Vous pouvez créer des champs personnalisés pour extraire et stocker des informations spécifiques des réponses de pages à l'aide de règles regex. Ces champs personnalisés sont définis à l'aide d'un fichier de configuration YAML et sont chargés depuis l'emplacement par défaut `$HOME/.config/katana/field-config.yaml`. Alternativement, vous pouvez utiliser l'option `-flc` pour charger un fichier de configuration de champs personnalisés depuis un emplacement différent.
Voici un exemple de champ personnalisé.```yaml
- 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}'

Lors de la définition de champs personnalisés, les attributs suivants sont pris en charge :

  • name (obligatoire)

La valeur de l'attribut name est utilisée comme valeur de l'option CLI -field.

  • type (obligatoire)

Le type d'attribut personnalisé, l'option actuellement prise en charge est regex

  • part (facultatif)

La partie de la réponse à partir de laquelle extraire les informations. La valeur par défaut est response, qui inclut à la fois l'en-tête et le corps. Les autres valeurs possibles sont header et body.

  • group (facultatif)

Vous pouvez utiliser cet attribut pour sélectionner un groupe correspondant spécifique dans l'expression régulière, par exemple : group: 1

Exécution de katana avec un champ personnalisé :```console

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

`*`-store-field`*
---

Pour compléter l'option `field` qui est utile pour filtrer la sortie au moment de l'exécution, il y a l'option `-sf, -store-fields` qui fonctionne exactement comme l'option `field` sauf qu'au lieu de filtrer, elle stocke toutes les informations sur le disque dans le répertoire `katana_field` triées par URL cible. Utilisez `-sfd` ou `-store-field-dir` pour stocker les données dans un emplacement différent.```
katana -u https://tesla.com -sf key,fqdn,qurl -silent

Intégration de l'API

Tapez md -h ou md --help pour voir la liste des commandes disponibles.```bash $ ls katana_field/

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

L'option `-store-field` peut être utile pour collecter des informations afin de construire une wordlist ciblée à diverses fins, notamment mais sans s'y limiter :

- Identifier les paramètres les plus couramment utilisés
- Découvrir les chemins fréquemment utilisés
- Trouver les fichiers couramment utilisés
- Identifier les sous-domaines connexes ou inconnus

### Filtres Katana

*`-extension-match`*
---

La sortie du crawl peut être facilement filtrée pour une extension spécifique en utilisant l'option `-em` afin de n'afficher que les résultats contenant l'extension donnée.```
katana -u https://tesla.com -silent -em js,jsp,json

Utilisez la valeur spéciale none pour également inclure les URLs sans extension de fichier dans la sortie:``` katana -u https://tesla.com -silent -em js,jsp,json,none

*`-extension-filter`*
---

La sortie du crawl peut être facilement filtrée pour une extension spécifique en utilisant l'option `-ef` qui permet de supprimer toutes les URLs contenant l'extension donnée.```
katana -u https://tesla.com -silent -ef css,txt,md

-no-default-ext-filter

Katana filtre plusieurs extensions par défaut. Cela peut être désactivé avec l'option -ndef.``` katana -u https://tesla.com -silent -ndef

*`-match-regex`*
---
Le drapeau `-match-regex` ou `-mr` vous permet de filtrer les URL de sortie à l'aide d'expressions régulières. Lorsque vous utilisez ce drapeau, seules les URL qui correspondent à l'expression régulière spécifiée seront affichées dans la sortie.```
katana -u https://tesla.com -mr 'https://shop\.tesla\.com/*' -silent

-filter-regex

Le flag -filter-regex ou -fr vous permet de filtrer les URLs de sortie à l'aide d'expressions régulières. Lorsque vous utilisez ce flag, il ignorera les URLs qui correspondent à l'expression régulière spécifiée.``` katana -u https://tesla.com -fr 'https://www\.tesla\.com/*' -silent

### Filtrage avancé

Katana prend en charge les expressions basées sur DSL pour des capacités de filtrage et de correspondance avancées :

- Pour faire correspondre les points de terminaison avec un code d'état 200 :```shell
katana -u https://www.hackerone.com -mdc 'status_code == 200'
  • Pour correspondre aux points de terminaison qui contiennent "default" et ont un code de statut autre que 403 :```shell katana -u https://www.hackerone.com -mdc 'contains(endpoint, "default") && status_code != 403'
- Faire correspondre les endpoints avec les technologies PHP :```shell
katana -u https://www.hackerone.com -mdc 'contains(to_lower(technologies), "php")'
  • Pour filtrer les points de terminaison exécutés sur Cloudflare :```shell katana -u https://www.hackerone.com -fdc 'contains(to_lower(technologies), "cloudflare")'
Les fonctions DSL peuvent être appliquées à toutes les clés de la sortie jsonl. Pour plus d'informations sur les fonctions DSL disponibles, veuillez visiter le [projet dsl](https://github.com/projectdiscovery/dsl).

Voici des options de filtre supplémentaires -```console
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

Limite de débit

Il est facile de se faire bloquer / bannir lors du crawling si l'on ne respecte pas les limites des sites cibles. Katana propose plusieurs options pour ajuster la vitesse du crawl, aussi rapide ou lent que nous le souhaitons.

-delay

option pour introduire un délai en secondes entre chaque nouvelle requête que katana effectue lors du crawling, désactivée par défaut.``` katana -u https://tesla.com -delay 20

*`-concurrency`*
-----
option pour contrôler le nombre d'urls par cible à récupérer en même temps.```
katana -u https://tesla.com -c 20

-parallelism

option pour définir le nombre de cibles à traiter en même temps à partir d'une liste d'entrée.``` katana -u https://tesla.com -p 20

*`-rate-limit`*
-----
Nombre maximal de requêtes par seconde, appliqué globalement à tous les hôtes.```
katana -u https://tesla.com -rl 100

-rate-limit-minute

Maximum de requêtes par minute, appliqué globalement à tous les hôtes.``` katana -u https://tesla.com -rlm 500

*`-host-rate-limit`*
-----
Nombre maximal de requêtes par seconde par hôte. Chaque hôte possède son propre compartiment de limite de débit, de sorte qu'un hôte lent ne limitera pas les plus rapides. Remplace la limite de débit globale lorsqu'elle est définie. Katana réduit également automatiquement le rythme avec un délai exponentiel et une gigue lorsqu'un hôte renvoie 429 ou 503.```console
katana -u https://tesla.com -hrl 50

-host-rate-limit-minute

Nombre maximal de requêtes par minute par hôte.```console katana -u https://tesla.com -hrlm 200

Voici toutes les options CLI longues / courtes pour le contrôle de la limite de débit -```console
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

Output

Katana prend en charge à la fois la sortie de fichier en texte brut et en JSON qui inclut des informations supplémentaires comme les noms source, tag et attribute pour corréler le point de terminaison découvert.

-output

Par défaut, katana affiche les points de terminaison explorés au format texte brut. Les résultats peuvent être écrits dans un fichier à l'aide de l'option -output.```console katana -u https://example.com -no-scope -output example_endpoints.txt

*`-output-template`*
---

L'option `-output-template` permet de personnaliser le format de sortie à l'aide d'un modèle, offrant une flexibilité dans la définition de la structure de la sortie. Cette option remplace l'ancien indicateur `-field` pour filtrer la sortie. Au lieu de s'appuyer sur des champs prédéfinis, vous pouvez spécifier un modèle personnalisé directement dans la ligne de commande pour contrôler la manière dont les données extraites sont présentées.

Exemple d'utilisation de l'option `-output-template` :```sh
katana -u https://example.com -output-template '{{email}} - {{url}}'

Dans cet exemple, email représente un champ personnalisé qui extrait et affiche les adresses e-mail trouvées dans la source url.

[!NOTE] Si un champ spécifié n'existe pas ou ne contient pas de valeur, il sera simplement omis de la sortie.

Cette option peut structurer efficacement la sortie d'une manière qui correspond le mieux à votre cas d'utilisation, rendant l'extraction de données plus intuitive et personnalisable.

-jsonl ---```console katana -u https://example.com -jsonl | jq .

Please provide the Markdown content to translate.```json
{
  "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

L'option -store-response permet d'écrire toutes les requêtes et réponses des points de terminaison explorés dans un fichier texte. Lorsque cette option est utilisée, les fichiers texte contenant la requête et la réponse seront écrits dans le répertoire katana_response. Si vous souhaitez spécifier un répertoire personnalisé, vous pouvez utiliser l'option -store-response-dir.```console katana -u https://example.com -no-scope -store-response

[No content provided in the INPUT section.]```bash
$ 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)

Remarque :

-store-response option is not supported in -headless mode.

-list-output-fields

Le drapeau -list-output-fields ou -lof affiche tous les champs disponibles pouvant être utilisés dans le format de sortie JSONL. Cela est utile pour comprendre quelles données sont disponibles lors de l'utilisation de modèles de sortie personnalisés ou lors de l'exclusion de champs spécifiques.```console katana -lof

*`-exclude-output-fields`*
----

L'option `-exclude-output-fields` ou `-eof` vous permet d'exclure des champs spécifiques de la sortie JSONL. Ceci est utile pour réduire la taille de la sortie ou se concentrer sur des données spécifiques en supprimant les champs indésirables.```console
katana -u https://example.com -jsonl -eof raw,body

Voici des options CLI supplémentaires liées à la sortie -```console 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 en tant que bibliothèque
`katana` peut être utilisé comme bibliothèque en créant une instance de la structure `Option` et en la remplissant avec les mêmes options que celles spécifiées via la CLI. En utilisant les options, vous pouvez créer des `crawlerOptions` et donc un `crawler` standard ou hybride. La méthode `crawler.Crawl` doit être appelée pour crawler l'entrée.```go
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())
	}
}

Signaler des problèmes & demandes de fonctionnalités

Pour maintenir le suivi des problèmes et améliorer l'efficacité du tri :

Tous les rapports commencent sous forme de discussions GitHub

Pourquoi les discussions d'abord ?

  • La communauté peut aider avec des questions rapides et du dépannage
  • Meilleur tri - les bugs/features confirmés deviennent des problèmes suivis
  • Suivi des problèmes plus propre - se concentrer uniquement sur les éléments actionnables

Les mainteneurs convertiront les discussions en problèmes lorsque cela sera approprié après un examen approprié.


katana est fait avec ❤️ par l'équipe projectdiscovery et distribué sous licence MIT.

Rejoindre Discord

Catégories