
Ein Crawling- und Spidering-Framework der nächsten Generation.
Funktionen • Installation • Nutzung • Geltungsbereich • Konfiguration • Filter • Discord beitreten

katana erfordert Go 1.26+ zur erfolgreichen Installation. Falls Installationsprobleme auftreten, empfehlen wir, die neueste verfügbare Version von Go zu verwenden, da sich die Mindestanforderung geändert haben könnte. Führen Sie den folgenden Befehl aus oder laden Sie eine vorkompilierte Binärdatei von der Release-Seite herunter.```console CGO_ENABLED=1 go install github.com/projectdiscovery/katana/cmd/katana@latest
**Weitere Optionen zum Installieren / Ausführen von katana-**
<details>
<summary>Docker</summary>
> Zum Installieren / Aktualisieren von docker auf den neuesten Tag -```sh
docker pull projectdiscovery/katana:latest
Um katana im Standardmodus mit docker auszuführen -```sh docker run projectdiscovery/katana:latest -u https://tesla.com
> Um katana im Headless-Modus mit Docker auszuführen -```sh
docker run projectdiscovery/katana:latest -u https://tesla.com -system-chrome -headless
Es wird empfohlen, die folgenden Voraussetzungen zu installieren -```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
> installiere katana -```sh
go install github.com/projectdiscovery/katana/cmd/katana@latest
katana -h
Dies wird die Hilfe für das Tool anzeigen. Hier sind alle unterstützten Schalter.```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
katana erfordert eine URL oder einen Endpunkt zum Crawlen und akzeptiert einzelne oder mehrere Eingaben.
Die Eingabe-URL kann mit der Option -u angegeben werden, und mehrere Werte können durch kommagetrennte Eingabe bereitgestellt werden. Ebenso wird die Datei-Eingabe mit der Option -list unterstützt, zusätzlich wird auch die Piped-Eingabe (stdin) unterstützt.
katana -u https://tesla.com
#### Mehrere URL-Eingabe (kommagetrennt)```sh
katana -u https://tesla.com,https://google.com
$ cat url_list.txt
https://tesla.com https://google.com
(No content provided for translation.)```
katana -list url_list.txt
echo https://tesla.com | katana
- [alpine](https://github.com/projectdiscovery/katana/blob/HEAD/dockerfiles/alpine): Neuester Alpine-Linux-Container mit `curl`, `bash`, `jq` und PyPI-Paketen. (Docker Hub: `phx.ocir.io/oracle/ateam/masscan-kube:alpine-latest`)
- [busybox](https://github.com/projectdiscovery/katana/blob/HEAD/dockerfiles/busybox): Minimales Docker-Image basierend auf busybox:glibc mit den gleichen Werkzeugen wie das Alpine-Image. Wird typischerweise als Init-Container für Netzwerk-sysctl-Tuning verwendet, bevor masscan ausgeführt wird. (Docker Hub: `phx.ocir.io/oracle/ateam/masscan-kube:busybox-latest`)```sh
cat domains | httpx | katana
Beispiel für die Ausführung von 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
## Crawling-Modus
### Standard-Modus
Die Standard-Crawling-Modalität verwendet unter der Haube die standardmäßige Go-HTTP-Bibliothek zur Verarbeitung von HTTP-Anfragen/-Antworten. Diese Modalität ist viel schneller, da sie keinen Browser-Overhead hat. Dennoch analysiert sie den HTTP-Antworttext so, wie er ist, ohne JavaScript- oder DOM-Rendering, wodurch möglicherweise Endpunkte nach dem DOM-Rendering oder asynchrone Endpunktaufrufe übersehen werden, die in komplexen Webanwendungen in Abhängigkeit von beispielsweise browserspezifischen Ereignissen auftreten können.
### Headless-Modus
Der Headless-Modus hakt interne Headless-Aufrufe ein, um HTTP-Anfragen/-Antworten direkt im Browserkontext zu verarbeiten. Dies bietet zwei Vorteile:
- Der HTTP-Fingerabdruck (TLS und User-Agent) identifiziert den Client vollständig als legitimen Browser
- Bessere Abdeckung, da die Endpunkte durch die Analyse der standardmäßigen Rohantwort (wie im vorherigen Modus) und auch der browser-gerenderten mit aktiviertem JavaScript entdeckt werden.
Headless-Crawling ist optional und kann mit der Option `-headless` aktiviert werden.
Hier sind weitere Headless-CLI-Optionen -```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-sandboxStartet den headless Chrome-Browser mit der Option no-sandbox, nützlich, wenn als Root-Benutzer ausgeführt wird.```console katana -u https://tesla.com -headless -no-sandbox
*`-no-incognito`*
----
Führt den headless Chrome-Browser ohne Inkognito-Modus aus, nützlich bei Verwendung des lokalen Browsers.```console
katana -u https://tesla.com -headless -no-incognito
Um Cookies und andere Browser-Sitzungsdaten über mehrere Läufe hinweg zu erhalten, kombiniere -no-incognito mit -chrome-data-dir, damit Katana Ihr ausgewähltes Chrome-Profilverzeichnis anstelle eines isolierten temporären Verzeichnisses wiederverwendet.```console
katana -u https://tesla.com -headless -no-incognito -chrome-data-dir /tmp/katana-profile
*`-headless-options`*
----
Beim Crawlen im Headless-Modus können zusätzliche Chrome-Optionen mit `-headless-options` angegeben werden, zum Beispiel -```console
katana -u https://tesla.com -headless -system-chrome -headless-options --disable-gpu,proxy-server=http://127.0.0.1:8080
-page-load-strategySteuert, wie katana auf das Laden von Seiten im Headless-Modus wartet. Verschiedene Strategien sind für unterschiedliche Arten von Webanwendungen nützlich:
Die `domcontentloaded`-Strategie ist besonders nützlich für Single Page Applications (SPAs), die aufgrund kontinuierlicher Hintergrundanfragen (Websockets, Polling usw.) nie vollständig laden.
*`-dom-wait-time`*
----
Bei Verwendung der `domcontentloaded`-Page-Load-Strategie gibt diese Option an, wie viele Sekunden nach dem Auslösen des `DOMContentLoaded`-Ereignisses gewartet werden soll. Dies gibt JavaScript Zeit, interaktive Elemente zu rendern. Standardwert ist 5 Sekunden.```console
katana -u https://tesla.com -headless -pls domcontentloaded -dwt 10
Katana unterstützt die automatische Captcha-Erkennung und -Lösung beim headless Crawlen. Wenn eine Captcha-Seite erkannt wird, identifiziert katana den Captcha-Anbieter, löst es über einen externen Dienst und setzt das Crawlen fort.
Unterstützte Captcha-Typen: reCAPTCHA v2, reCAPTCHA v3, reCAPTCHA Enterprise, Cloudflare Turnstile, hCaptcha
-captcha-solver-providerOption zum Angeben des Captcha-Lösungsanbieters. Derzeit unterstützt: capsolver.
-captcha-solver-keyAPI-Schlüssel für den Captcha-Lösungsanbieter.```console katana -u https://example.com -headless -csp capsolver -csk YOUR_API_KEY
Der Anbieter und der Schlüssel können auch über Umgebungsvariablen festgelegt werden:```console
export CAPTCHA_SOLVER_PROVIDER=capsolver
export CAPTCHA_SOLVER_KEY=YOUR_API_KEY
katana -u https://example.com -headless
Crawling kann endlos sein, wenn es nicht eingegrenzt wird, daher bietet katana mehrere Möglichkeiten zur Definition des Crawl-Bereichs.
-field-scopeDie praktischste Option zur Definition des Bereichs mit einem vordefinierten Feldnamen, wobei rdn die Standardoption für den Feldbereich ist.
rdn - Crawling auf den Root-Domainnamen und alle Subdomains beschränkt (z.B. *example.com) (Standard)fqdn - Crawling auf die angegebene Sub(domain) beschränkt (z.B. www.example.com oder api.example.com)dn - Crawling auf das Domainnamen-Keyword beschränkt (z.B. example)```console
katana -u https://tesla.com -fs dn*`-crawl-scope`*
------
Für erweiterte Bereichssteuerung kann die Option `-cs` verwendet werden, die **Regex**-Unterstützung bietet.```console
katana -u https://tesla.com -cs login
Für mehrere Regeln innerhalb des Geltungsbereichs können Dateieingaben mit mehrzeiligen Zeichenfolgen / regulären Ausdrücken übergeben werden.```bash $ cat in_scope.txt
login/ admin/ app/ wordpress/
---
## Teleport-Anwendungsstart```console
katana -u https://tesla.com -cs in_scope.txt
-crawl-out-scopeZur Definition, was nicht gecrawlt werden soll, kann die Option -cos verwendet werden und unterstützt auch Regex-Eingabe.```console
katana -u https://tesla.com -cos logout
Für mehrere Out-of-Scope-Regeln kann eine Dateieingabe mit mehrzeiligen Zeichenfolgen/Regex übergeben werden.```bash
$ cat out_of_scope.txt
/logout
/log_out
Kein Inhalt bereitgestellt. Bitte fügen Sie den zu übersetzenden Markdown-Chunk ein.```console katana -u https://tesla.com -cos out_of_scope.txt
*`-no-scope`*
----
Katana ist standardmäßig auf den Bereich `*.domain` festgelegt. Um dies zu deaktivieren, kann die Option `-ns` verwendet werden; mit ihr wird auch das Internet durchsucht.```console
katana -u https://tesla.com -ns
-display-out-scopeStandardmäßig gilt, wenn die Scope-Option verwendet wird, dies auch für die als Ausgabe anzuzeigenden Links, sodass externe URLs standardmäßig ausgeschlossen werden und um dieses Verhalten zu überschreiben, kann die Option -do verwendet werden, um alle externen URLs anzuzeigen, die in den gescopten URLs / Endpunkten der Ziele vorhanden sind.```
katana -u https://tesla.com -do
Hier sind alle CLI-Optionen für die Scope-Steuerung -```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
Katana bietet mehrere Optionen zur Steuerung und Konfiguration des Crawls nach unseren Wünschen.
-depthOption zum Festlegen der depth (Tiefe) für das Crawlen von URLs. Je größer die Tiefe, desto mehr Endpunkte werden gecrawlt und desto länger dauert der Crawl.```
katana -u https://tesla.com -d 5
*`-js-crawl`*
----
Option zur Aktivierung des Parsens von JavaScript-Dateien + Crawlen der in JavaScript-Dateien entdeckten Endpunkte, standardmäßig deaktiviert.```
katana -u https://tesla.com -jc
-crawl-durationOption zur vordefinierten Crawl-Dauer, standardmäßig deaktiviert.``` katana -u https://tesla.com -ct 2
*`-known-files`*
----
Option, um das Crawlen von `robots.txt` und `sitemap.xml` zu aktivieren, standardmäßig deaktiviert.```
katana -u https://tesla.com -kf robotstxt,sitemapxml
-automatic-form-fillOption zur Aktivierung des automatischen Ausfüllens von Formularen für bekannte/unbekannte Felder. Bekannte Feldwerte können nach Bedarf angepasst werden, indem die Konfigurationsdatei unter $HOME/.config/katana/form-config.yaml aktualisiert wird.
Das automatische Ausfüllen von Formularen ist eine experimentelle Funktion.``` katana -u https://tesla.com -aff
Form config values support DSL helper functions for dynamic data generation. All `rand_*` functions from the [projectdiscovery/dsl](https://github.com/projectdiscovery/dsl) library are available:```yaml
# $HOME/.config/katana/form-config.yaml
email: "rand_email()"
phone: "rand_phone()"
placeholder: "rand_first_name()"
password: 'rand_base(16, "")'
color: "#e66465"
-filter-similarOption zum Filtern des Crawlings ähnlich aussehender URLs durch Normalisierung variabler Pfadsegmente. Dies erkennt IDs, UUIDs, Hashes, Datumsangaben und andere dynamische Werte und lernt zudem zur Laufzeit wiederkehrende Muster. Beispielsweise werden /users/123 und /users/456 als derselbe Endpunkt behandelt.```
katana -u https://tesla.com -fsu
Der Promotionsschwellenwert (wie viele verschiedene Werte an einer Pfadposition vorhanden sein müssen, bevor diese als Parameter behandelt wird) kann mit `-fst` eingestellt werden. Niedrigere Werte sind aggressiver (weniger URLs werden gecrawlt), höhere Werte sind permissiver. Standardwert ist `10`.```
katana -u https://tesla.com -fsu -fst 5
-max-domain-pagesOption zur Begrenzung der Anzahl der pro Domain gecrawlten Seiten. Verhindert, dass eine einzelne Domain das gesamte Crawl-Budget verbraucht, nützlich für große Websites oder zum Schutz vor Crawler-Fallen.``` katana -u https://tesla.com -mdp 100
## Knowledge Base Classification
Katana kann Crawlergebnisse mit einer **Wissensbasis** anreichern — einer maschinellen Lernklassifikation jeder gecrawlten Seite, unterstützt von [dit](https://github.com/HappyHackingSpace/dit). Wenn aktiviert, wird jede Antwort nach **Seitentyp** klassifiziert (z. B. `login`, `error`, `captcha`, `parked`) und alle Formulare auf der Seite werden identifiziert, wobei das Ergebnis dem Feld `knowledgebase` der JSONL-Ausgabe hinzugefügt wird. Dies funktioniert mit **allen Engines** (Standard und Headless).
> **Hinweis**: Das Klassifikationsmodell wird bei der ersten Verwendung **automatisch** nach `~/.dit/model.json` heruntergeladen (von [Hugging Face](https://huggingface.co/datasets/happyhackingspace/dit)). Dies ist eine einmalige, pro Maschine anfallende Kosten – nachfolgende Ausführungen verwenden das zwischengespeicherte Modell erneut. Eine manuelle Installation von `dit` ist nicht erforderlich.
*`-knowledge-base`*
----
Aktiviert die Knowledge-Base-Klassifikation. Die Seiten- und Formularklassifikation wird dem Feld `knowledgebase` jedes Ergebnisses hinzugefügt.```console
katana -u https://example.com -kb -jsonl
EINGABE:```json { "timestamp": "...", "request": { "...": "..." }, "response": { "...": "...", "knowledgebase": { "PageType": "login", "Forms": [{ "type": "login", "fields": { "username": "username or email", "password": "password" } }] } } }
*`-filter-page-type`*
----
Filtere Ergebnisse ausschließlich auf die angegebenen Seitentypen. Die Aktivierung dieser Option impliziert `-kb` (der Klassifikator wird automatisch initialisiert).```console
katana -u https://example.com -fpt login,error
-kb-secretsAktivieren Sie den Secrets-Extraktor in der Wissensbasis, der erkannte Secrets (API-Schlüssel, Token usw.) unter dem Schlüssel secrets bereitstellt. Fügen Sie -kb-validate-secrets hinzu, um erkannte Secrets gegen ihren Anbieter zu validieren – beachten Sie, dass dies live API-Aufrufe sendet.```console
katana -u https://example.com -kb-secrets
*`-kb-endpoints`*
----
Aktiviert den Endpunkte-Extraktor, der Anfragen als REST, GraphQL, SOAP oder XHR unter dem Schlüssel `endpoints` klassifiziert.```console
katana -u https://example.com -kb-endpoints
Beim authentisierten Crawlen werden benutzerdefinierte Header oder Cookies in HTTP-Anfragen eingefügt, um auf geschützte Ressourcen zuzugreifen. Diese Header enthalten Authentifizierungs- oder Autorisierungsinformationen, sodass Sie authentisierte Inhalte/Endpunkte crawlen können. Sie können Header direkt in der Befehlszeile angeben oder sie als Datei mit katana bereitstellen, um authentisiertes Crawlen durchzuführen.
Hinweis: Der Benutzer muss die Authentifizierung manuell durchführen und das Sitzungs-Cookie/den Header in einer Datei exportieren, um es mit katana zu verwenden.
-headersOption zum Hinzufügen eines benutzerdefinierten Headers oder Cookies zur Anfrage.
Syntax von Headern in der HTTP-Spezifikation
Hier ein Beispiel zum Hinzufügen eines Cookies zur Anfrage:``` katana -u https://tesla.com -H 'Cookie: usrsess=AmljNrESo'
Es ist auch möglich, Header oder Cookies als Datei bereitzustellen. Zum Beispiel:```
$ cat cookie.txt
Cookie: PHPSESSIONID=XXXXXXXXX
X-API-KEY: XXXXX
TOKEN=XX
Bitte geben Sie den zu übersetzenden Text an. Ihre Anfrage enthält nach "INPUT:" keinen Inhalt.``` katana -u https://tesla.com -H cookie.txt
Es gibt weitere Optionen zur Konfiguration bei Bedarf, hier sind alle konfigurationsbezogenen CLI-Optionen -```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)
Katana kann auch eine Verbindung zu einer aktiven Browsersitzung herstellen, in der der Benutzer bereits angemeldet und authentifiziert ist, und diese zum Crawlen verwenden. Die einzige Voraussetzung hierfür ist, den Browser mit aktiviertem Remote-Debugging zu starten.
Hier ist ein Beispiel für das Starten des Chrome-Browsers mit aktiviertem Remote-Debugging und dessen Verwendung mit Katana -
Schritt 1) Suchen Sie zuerst den Pfad der Chrome-Ausführungsdatei
Schritt 2) Starten Sie Chrome mit aktiviertem Remote-Debugging und es wird eine WebSocket-URL zurückgegeben. Zum Beispiel können Sie auf MacOS Chrome mit aktiviertem Remote-Debugging mit folgendem Befehl starten -```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
> Melden Sie sich nun bei der Website an, die Sie crawlen möchten, und lassen Sie den Browser geöffnet.
**step 3) Nutzen Sie nun die Websocket-URL mit katana, um eine Verbindung zur aktiven Browser-Sitzung herzustellen und die Website zu crawlen.**```console
katana -headless -u https://tesla.com -cwu ws://127.0.0.1:9222/devtools/browser/c5316c9c-19d6-42dc-847a-41d1aeebf7d6 -no-incognito
Hinweis: Sie können die Option
-cddverwenden, um ein benutzerdefiniertes Chrome-Datenverzeichnis für Browserdaten und Cookies festzulegen. Dies speichert jedoch keine Sitzungsdaten, wenn das Cookie nur aufSessiongesetzt ist oder nach einer bestimmten Zeit abläuft.
-field[!WARNING] Veraltet: Verwenden Sie stattdessen
-output-template. Das Feld-Flag wird aus Gründen der Abwärtkompatibilität weiterhin unterstützt.
Katana enthält integrierte Felder, mit denen die Ausgabe nach den gewünschten Informationen gefiltert werden kann. Die Option -f kann verwendet werden, um eines der verfügbaren Felder anzugeben.```
-f, -field string field to display in output (url,path,fqdn,rdn,rurl,qurl,qpath,file,key,value,kv,dir,udir)
Hier ist eine Tabelle mit Beispielen für jedes Feld und der erwarteten Ausgabe bei Verwendung -
| FIELD | BESCHREIBUNG | EXAMPLE |
| ------- | --------------------------- | ------------------------------------------------------------ |
| `url` | URL-Endpunkt | `https://admin.projectdiscovery.io/admin/login?user=admin&password=admin` |
| `qurl` | URL inklusive Query-Parameter | `https://admin.projectdiscovery.io/admin/login.php?user=admin&password=admin` |
| `qpath` | Pfad inklusive Query-Parameter | `/login?user=admin&password=admin` |
| `path` | URL-Pfad | `https://admin.projectdiscovery.io/admin/login` |
| `fqdn` | Vollqualifizierter Domainname | `admin.projectdiscovery.io` |
| `rdn` | Root-Domainname | `projectdiscovery.io` |
| `rurl` | Root-URL | `https://admin.projectdiscovery.io` |
| `ufile` | URL mit Datei | `https://admin.projectdiscovery.io/login.js` |
| `file` | Dateiname in URL | `login.php` |
| `key` | Parameternamen in URL | `user,password` |
| `value` | Parameterwerte in URL | `admin,admin` |
| `kv` | Schlüssel=Werte in URL | `user=admin&password=admin` |
| `dir` | URL-Verzeichnisname | `/admin/` |
| `udir` | URL mit Verzeichnis | `https://admin.projectdiscovery.io/admin/` |
Hier ist ein Beispiel für die Verwendung der Feldoption, um nur alle URLs mit Query-Parameter anzuzeigen -```
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
Sie können benutzerdefinierte Felder erstellen, um mit Hilfe von Regex-Regeln bestimmte Informationen aus Seitenantworten zu extrahieren und zu speichern. Diese benutzerdefinierten Felder werden mit einer YAML-Konfigurationsdatei definiert und vom Standardort $HOME/.config/katana/field-config.yaml geladen. Alternativ können Sie die Option -flc verwenden, um eine benutzerdefinierte Feldkonfigurationsdatei von einem anderen Ort zu laden.
Hier ist ein Beispiel für ein benutzerdefiniertes Feld.```yaml
name: email type: regex regex:
name: phone type: regex regex:
Bei der Definition benutzerdefinierter Felder werden die folgenden Attribute unterstützt:
- **name** (erforderlich)
> Der Wert des **name**-Attributs wird als Wert der CLI-Option `-field` verwendet.
- **type** (erforderlich)
> Der Typ des benutzerdefinierten Attributs, derzeit unterstützte Option - `regex`
- **part** (optional)
> Der Teil der Antwort, aus dem die Informationen extrahiert werden sollen. Der Standardwert ist `response`, der sowohl den Header als auch den Body umfasst. Andere mögliche Werte sind `header` und `body`.
- group (optional)
> Sie können dieses Attribut verwenden, um eine bestimmte übereinstimmende Gruppe im Regex auszuwählen, zum Beispiel: `group: 1`
#### Ausführen von katana mit benutzerdefiniertem Feld:```console
katana -u https://tesla.com -f email,phone
-store-fieldUm die field-Option zu ergänzen, die zur Laufzeit zur Filterung der Ausgabe nützlich ist, gibt es die Option -sf, -store-fields. Diese funktioniert genau wie die field-Option, mit dem Unterschied, dass sie statt zu filtern alle Informationen auf der Festplatte im Verzeichnis katana_field speichert, sortiert nach Ziel-URL. Verwenden Sie -sfd oder -store-field-dir, um die Daten an einem anderen Ort zu speichern.```
katana -u https://tesla.com -sf key,fqdn,qurl -silent
". Actually, the user message is just the instructions and then "INPUT:" followed by a blank? Maybe the chunk content was omitted? Let me read carefully: The user says "Translate the following Kitploit tool content. This is chunk 119 of 179 from a longer Markdown document... INPUT:" and then there is no text after that. Possibly due to a formatting error? But the instructions say "If the chunk starts mid-paragraph, continue translating from that point." But there is no content to translate. Since no content is provided, I should output nothing or perhaps state that no content was provided. However, rules say "Return ONLY the translated text. No preamble, no commentary." So if there's no input, I should output an empty string. But maybe the chunk content is truly empty? The assistant message should be empty. So I'll output nothing. But the instruction says "Return ONLY the translated text." If there's no text, just nothing.
Thus, the response is an empty string.```bash
$ ls katana_field/
https_www.tesla.com_fqdn.txt
https_www.tesla.com_key.txt
https_www.tesla.com_qurl.txt
Die Option -store-field kann nützlich sein, um Informationen zu sammeln, die zum Erstellen einer gezielten Wortliste für verschiedene Zwecke verwendet werden können, einschließlich, aber nicht beschränkt auf:
-extension-matchCrawl-Ausgaben können leicht mit einer bestimmten Erweiterung abgeglichen werden, indem die Option -em verwendet wird, um sicherzustellen, dass nur Ausgaben angezeigt werden, die die angegebene Erweiterung enthalten.```
katana -u https://tesla.com -silent -em js,jsp,json
Verwenden Sie den speziellen Wert `none`, um auch URLs ohne Dateierweiterung in die Ausgabe aufzunehmen:```
katana -u https://tesla.com -silent -em js,jsp,json,none
-extension-filterDie Crawl-Ausgabe kann einfach nach einer bestimmten Erweiterung gefiltert werden, indem die Option -ef verwendet wird. Diese stellt sicher, dass alle URLs, die die angegebene Erweiterung enthalten, entfernt werden.```
katana -u https://tesla.com -silent -ef css,txt,md
*`-no-default-ext-filter`*
---
Katana filtert standardmäßig mehrere Erweiterungen. Dies kann mit der Option `-ndef` deaktiviert werden.```
katana -u https://tesla.com -silent -ndef
-match-regexDas -match-regex oder -mr Flag erlaubt es, die Ausgabe-URLs mit Hilfe von regulären Ausdrücken zu filtern. Bei Verwendung dieses Flags werden nur die URLs ausgegeben, die dem angegebenen regulären Ausdruck entsprechen.```
katana -u https://tesla.com -mr 'https://shop\.tesla\.com/*' -silent
*`-filter-regex`*
---
Das `-filter-regex` oder `-fr` Flag ermöglicht es Ihnen, Ausgabe-URLs mithilfe von regulären Ausdrücken zu filtern. Bei Verwendung dieses Flags werden die URLs übersprungen, die dem angegebenen regulären Ausdruck entsprechen.```
katana -u https://tesla.com -fr 'https://www\.tesla\.com/*' -silent
Katana unterstützt DSL-basierte Ausdrücke für erweiterte Matching- und Filterfunktionen:
- Um Endpunkte zu finden, die "default" enthalten und einen anderen Statuscode als 403 haben:```shell
katana -u https://www.hackerone.com -mdc 'contains(endpoint, "default") && status_code != 403'
- Um auf Cloudflare laufende Endpunkte herauszufiltern:```shell
katana -u https://www.hackerone.com -fdc 'contains(to_lower(technologies), "cloudflare")'
DSL-Funktionen können auf beliebige Schlüssel in der jsonl-Ausgabe angewendet werden. Weitere Informationen zu verfügbaren DSL-Funktionen finden Sie im dsl-Projekt.
Hier sind zusätzliche Filteroptionen -```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
## Rate Limit
Es ist leicht, beim Crawlen blockiert oder gebannt zu werden, wenn man sich nicht an die Grenzen der Zielwebseiten hält. Katana bietet mehrere Optionen, um den Crawl so schnell oder langsam anzupassen, wie wir möchten.
*`-delay`*
-----
Option, um zwischen jeder neuen Anfrage, die Katana beim Crawlen stellt, eine Verzögerung in Sekunden einzufügen. Standardmäßig deaktiviert.```
katana -u https://tesla.com -delay 20
-concurrencyOption zur Steuerung der Anzahl von URLs pro Ziel, die gleichzeitig abgerufen werden.``` katana -u https://tesla.com -c 20
*`-parallelism`*
-----
Option zur Definition der Anzahl gleichzeitig zu verarbeitender Ziele aus der Liste.```
katana -u https://tesla.com -p 20
-rate-limitMaximale Anfragen pro Sekunde, global über alle Hosts angewendet.``` katana -u https://tesla.com -rl 100
*`-rate-limit-minute`*
-----
Maximale Anfragen pro Minute, global auf alle Hosts angewendet.```
katana -u https://tesla.com -rlm 500
-host-rate-limitMaximale Anfragen pro Sekunde pro Host. Jeder Host erhält seinen eigenen Rate-Limit-Bucket, sodass ein langsamer Host keine schnellen drosselt. Ersetzt das globale Rate-Limit, wenn gesetzt. Katana führt außerdem automatisch einen Backoff mit exponentiellem Delay und Jitter durch, wenn ein Host 429 oder 503 zurückgibt.```console katana -u https://tesla.com -hrl 50
*`-host-rate-limit-minute`*
-----
Maximale Anfragen pro Minute pro Host.```console
katana -u https://tesla.com -hrlm 200
Hier sind alle langen / kurzen CLI-Optionen zur Ratenbegrenzungskontrolle -```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 unterstützt sowohl die Dateiausgabe im Klartextformat als auch JSON, das zusätzliche Informationen wie `source`, `tag` und `attribute` -Namen enthält, um die entdeckten Endpunkte zu korrelieren.
*`-output`*
---
Standardmäßig gibt Katana die gecrawlten Endpunkte im Klartextformat aus. Die Ergebnisse können mit der Option `-output` in eine Datei geschrieben werden.```console
katana -u https://example.com -no-scope -output example_endpoints.txt
-output-templateDie Option -output-template ermöglicht es Ihnen, das Ausgabeformat mithilfe einer Vorlage anzupassen, was Flexibilität bei der Definition der Ausgabestruktur bietet. Diese Option ersetzt das veraltete -field-Flag zum Filtern der Ausgabe. Anstatt sich auf vordefinierte Felder zu verlassen, können Sie direkt in der Befehlszeile eine benutzerdefinierte Vorlage angeben, um zu steuern, wie die extrahierten Daten dargestellt werden.
Beispiel für die Verwendung der Option -output-template:```sh
katana -u https://example.com -output-template '{{email}} - {{url}}'
In diesem Beispiel repräsentiert `email` ein [benutzerdefiniertes Feld](#custom-fields), das in der Quell-`url` gefundene E-Mail-Adressen extrahiert und anzeigt.
> [!NOTE]
> Wenn ein angegebenes Feld nicht existiert oder keinen Wert enthält, wird es einfach aus der Ausgabe weggelassen.
Diese Option kann die Ausgabe effektiv so strukturieren, dass sie am besten zu Ihrem Anwendungsfall passt und die Datenextraktion intuitiver und anpassbarer macht.
*`-jsonl`*
---```console
katana -u https://example.com -jsonl | jq .
Verwendung von CCM über die Befehlszeile
pip install ccm
von der Befehlszeile aus.
Sie können das Python-Paket installieren mit:
pip install ccm
Hinweis: Es gibt einige Änderungen zwischen den Hauptversionen v1 und v2. Bitte lesen Sie die Release-Notizen für Details zu den Änderungen.
| Befehl | Beschreibung |
|---|---|
ccm setup | CCM-Umgebung initialisieren |
ccm verify | Aktuelle Konfiguration validieren |
Als Nächstes können Sie anpassen, welche Container-Engine verwendet werden soll:
ccm config set engine docker
Dadurch wird die Standard-Container-Engine auf Docker gesetzt.
Das war's! Sie sind bereit, CCM zu verwenden.
CCM installieren```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": "\n\n\n Example Domain\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 \n\n\n\n
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.
\n<a href="https://www.iana.org/domains/example\">More information...
\nThis domain is for use in illustrative examples in documents. You may use this\n domain in literature without prior coordination or asking for permission.
\n<a href="https://www.iana.org/domains/example\">More information...
\n*`-store-response`*
----
Die Option `-store-response` ermöglicht es, alle Anfragen und Antworten von gecrawlten Endpunkten in eine Textdatei zu schreiben. Wenn diese Option verwendet wird, werden Textdateien mit der Anfrage und Antwort in das Verzeichnis **katana_response** geschrieben. Wenn Sie ein benutzerdefiniertes Verzeichnis angeben möchten, können Sie die Option `-store-response-dir` verwenden.```console
katana -u https://example.com -no-scope -store-response
No content provided to translate. Please provide the tool content chunk.```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)
**Note:**
*`-store-response` Option wird im `-headless`-Modus nicht unterstützt.*
*`-list-output-fields`*
----
Das Flag `-list-output-fields` oder `-lof` zeigt alle verfügbaren Felder an, die im JSONL-Ausgabeformat verwendet werden können. Dies ist nützlich, um zu verstehen, welche Daten verfügbar sind, wenn benutzerdefinierte Ausgabevorlagen verwendet oder bestimmte Felder ausgeschlossen werden.```console
katana -lof
-exclude-output-fieldsMit dem Flag -exclude-output-fields oder -eof können Sie bestimmte Felder aus der JSONL-Ausgabe ausschließen. Dies ist nützlich, um die Ausgabegröße zu reduzieren oder sich durch Entfernen unerwünschter Felder auf bestimmte Daten zu konzentrieren.```console
katana -u https://example.com -jsonl -eof raw,body
Hier sind zusätzliche CLI-Optionen in Bezug auf die Ausgabe -```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 kann als Bibliothek verwendet werden, indem eine Instanz des Option-Structs erstellt und mit denselben Optionen befüllt wird, die über die CLI angegeben werden könnten. Mit den Optionen können Sie crawlerOptions und damit einen standardmäßigen oder hybriden crawler erstellen.
Die Methode crawler.Crawl sollte aufgerufen werden, um die Eingabe zu durchsuchen.```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()) } }
## Probleme melden & Funktionen vorschlagen
Um die Problemverfolgung zu erhalten und die Triage-Effizienz zu verbessern:
**Alle Berichte beginnen als [GitHub Discussions](https://github.com/projectdiscovery/katana/discussions)**
- **Fehlerberichte** → [Starten Sie eine Q&A-Diskussion](https://github.com/projectdiscovery/katana/discussions/new?category=q-a)
- **Funktionsanfragen** → [Starten Sie eine Ideen-Diskussion](https://github.com/projectdiscovery/katana/discussions/new?category=ideas)
- **Fragen** → [Starten Sie eine Q&A-Diskussion](https://github.com/projectdiscovery/katana/discussions/new?category=q-a)
**Warum zuerst Diskussionen?**
- **Die Community kann helfen** bei schnellen Fragen und Fehlerbehebung
- **Bessere Triage** – bestätigte Fehler/Funktionen werden zu verfolgten Issues
- **Sauberer Issue-Tracker** – Konzentration nur auf umsetzbare Punkte
Die Betreuer werden Diskussionen nach angemessener Überprüfung in Issues umwandeln, wenn dies angebracht ist.
--------
<div align="center">
katana wird mit ❤️ vom [projectdiscovery](https://projectdiscovery.io)-Team entwickelt und unter der [MIT-Lizenz](https://github.com/projectdiscovery/katana/blob/HEAD/LICENSE.md) vertrieben.
<a href="https://discord.gg/projectdiscovery"><img src="https://assets.kitploit.com/production/public/readmes/5826/d0624f94cb9ea6401be5a089bb694bc963c47fa82aa3b758c893e3b0bbfdf663.png" width="300" alt="Discord beitreten"></a>
</div>
| Strategie | Beschreibung |
|---|
heuristic | (Standard) Intelligentes Warten, das sich an das Seitenverhalten anpasst – wartet auf Ladeereignis, Netzwerkinaktivität und DOM-Stabilität |
load | Wartet nur auf das Ladeereignis des Browsers |
domcontentloaded | Wartet auf das DOMContentLoaded-Ereignis plus zusätzliche Zeit (konfigurierbar über -dwt) für JavaScript-Rendering |
networkidle | Wartet, bis die Netzwerkaktivität stoppt |
none | Kein Warten – kehrt sofort nach Navigationsstart zurück |
| katana -u https://tesla.com -headless -pls domcontentloaded |
| Betriebssystem | Speicherort der Chromium-Ausführungsdatei | Speicherort der Google Chrome-Ausführungsdatei |
|---|
| 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 |
ccm build --help | Hilfe für den Build-Befehl anzeigen |
ccm update | CCM auf die neueste Version aktualisieren |