
katana v1.7.0
Un framework de crawling et de spidering de nouvelle génération.
Un framework de crawling et de spidering de nouvelle génération
Fonctionnalités • Installation • Utilisation • Périmètre • Configuration • Filtres • Rejoindre Discord
Fonctionnalités

- 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égie | Description |
|---|---|
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 |
load | Attend uniquement l'événement de chargement du navigateur |
domcontentloaded | Attend l'événement DOMContentLoaded plus un temps supplémentaire (configurable via -dwt) pour le rendu JavaScript |
networkidle | Attend que l'activité réseau s'arrête |
none | Aucune 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.comouapi.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 deditn'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é :
| CHAMP | DESCRIPTION | EXEMPLE |
|---|---|---|
url | Point de terminaison URL | https://admin.projectdiscovery.io/admin/login?user=admin&password=admin |
qurl | URL incluant le paramètre | https://admin.projectdiscovery.io/admin/login.php?user=admin&password=admin |
qpath | Chemin incluant le paramètre | /login?user=admin&password=admin |
path | Chemin URL | https://admin.projectdiscovery.io/admin/login |
fqdn | Nom de domaine pleinement qualifié | admin.projectdiscovery.io |
rdn | Nom de domaine racine | projectdiscovery.io |
rurl | URL racine | https://admin.projectdiscovery.io |
ufile | URL avec fichier | https://admin.projectdiscovery.io/login.js |
file | Nom du fichier dans l'URL | login.php |
key | Clés des paramètres dans l'URL | user,password |
value | Valeurs des paramètres dans l'URL | admin,admin |
kv | Clés=Valeurs dans l'URL | user=admin&password=admin |
dir | Nom du répertoire URL | /admin/ |
udir | URL avec répertoire | https://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 sontheaderetbody.
- 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
- Rapports de bugs → Démarrer une discussion Q&A
- Demandes de fonctionnalités → Démarrer une discussion Idées
- Questions → Démarrer une discussion Q&A
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.
