Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
katana — 차세대 크롤링 및 스파이더링 프레임워크. | Kitploit
도구/GitHubGitHub/projectdiscovery/katana
ReconnaissanceInformation GatheringWeb SecurityPenetration TestingCrawler
GitHubprojectdiscovery/katana

katana

차세대 크롤링 및 스파이더링 프레임워크.

저장소 보기
17.3k1.2k4일 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

katana

차세대 크롤링 및 스파이더링 프레임워크

기능 • 설치 • 사용법 • 범위 • 설정 • 필터 • Discord 참여

기능

image

  • 빠르고 완전히 구성 가능한 웹 크롤링
  • 표준 및 헤드리스 모드
  • JavaScript 파싱 / 크롤링
  • 사용자 정의 가능한 자동 양식 채우기
  • 범위 제어 - 사전 구성된 필드 / 정규식
  • 지식 베이스 - ML 페이지 유형 / 양식 분류 (자동 다운로드 모델)
  • 사용자 정의 가능한 출력 - 사전 구성된 필드
  • 입력 - STDIN, URL 및 LIST
  • 출력 - STDOUT, FILE 및 JSON

설치

katana를 설치하려면 Go 1.26+가 필요합니다. 설치 문제가 발생할 경우, 최소 요구 버전이 변경되었을 수 있으므로 최신 버전의 Go를 사용해 보시기 바랍니다. 아래 명령을 실행하거나 릴리스 페이지에서 미리 컴파일된 바이너리를 다운로드하세요.```console CGO_ENABLED=1 go install github.com/projectdiscovery/katana/cmd/katana@latest

root@kitploit:~
**katana 설치/실행을 위한 추가 옵션**

<details>
  <summary>Docker</summary>

> 최신 태그로 docker를 설치/업데이트 하려면 -```sh
docker pull projectdiscovery/katana:latest

katana를 표준 모드로 docker를 사용하여 실행하려면 -```sh docker run projectdiscovery/katana:latest -u https://tesla.com

root@kitploit:~
> docker를 사용하여 katana를 헤드리스 모드로 실행하려면 -```sh
docker run projectdiscovery/katana:latest -u https://tesla.com -system-chrome -headless
Ubuntu

다음 필수 구성 요소를 설치하는 것이 좋습니다 -```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

root@kitploit:~
> install katana -```sh
go install github.com/projectdiscovery/katana/cmd/katana@latest

Usage```console

katana -h

root@kitploit:~
이것은 도구에 대한 도움말을 표시합니다. 지원하는 모든 스위치가 여기에 있습니다.```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 실행

katana 입력

katana는 크롤링할 url 또는 endpoint가 필요하며 단일 또는 다중 입력을 허용합니다.

입력 URL은 -u 옵션을 사용하여 제공할 수 있으며, 다중 값은 쉼표로 구분된 입력을 사용하여 제공할 수 있습니다. 마찬가지로 파일 입력은 -list 옵션을 사용하여 지원되며, 추가로 파이프 입력(stdin)도 지원됩니다.

URL 입력```sh

katana -u https://tesla.com

root@kitploit:~
#### 여러 URL 입력 (쉼표로 구분)```sh
katana -u https://tesla.com,https://google.com

목록 입력```bash

$ cat url_list.txt

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

root@kitploit:~
(no content provided)```
katana -list url_list.txt

STDIN (파이프) 입력```sh

echo https://tesla.com | katana

root@kitploit:~
#### Spearhead Ecosystem

Spearhead 생태계는 **Firebase**, **Google Cloud Functions**, **Cloud Build**, **Cloud Storage**, **Secret Manager**, **Cloud Scheduler**로 구성됩니다. 이 생태계의 기본은 *spearhead 앱*입니다. 이는 Firebase/Vue JS 애플리케이션으로, 활성 spearhead 캠페인을 확인하는 중앙 허브입니다. **API**는 Google Cloud Functions(Express JS 실행)에서 제공됩니다. 함수는 Firebase에서 관리되며 cloudbuild.yaml Cloud Build 구성을 통해 배포할 수 있습니다. 환경 변수와 *spearhead.env* 파일 내용은 Secret Manager에 안전하게 저장됩니다(.env 형식과 개별 키/값 쌍으로). 마지막으로 spearhead 작업자는 Cloud Scheduler에 예약 배포되며, 이는 spearhead-api 엔드포인트를 호출하여 캠페인 작업자를 시작합니다.

Cloud Functions 대신 Docker 컨테이너에서 API를 실행하려는 경우 `Dockerfile`이 제공됩니다. 컨테이너 이미지는 빌드되어 cloud artifact registry에 게시됩니다. 이는 이 문서의 범위를 벗어납니다.```sh
cat domains | httpx | katana

katana 실행 예제 -```console katana -u https://youtube.com


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

root@kitploit:~
  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

root@kitploit:~
## 크롤링 모드

### 표준 모드

표준 크롤링 방식은 내부적으로 표준 go http 라이브러리를 사용하여 HTTP 요청/응답을 처리합니다. 이 방식은 브라우저 오버헤드가 없기 때문에 훨씬 빠릅니다. 그러나 여전히 HTTP 응답 본문을 있는 그대로 분석하며, 자바스크립트나 DOM 렌더링을 수행하지 않습니다. 따라서 복잡한 웹 애플리케이션에서 브라우저별 이벤트 등에 의존하는 post-dom-rendered 엔드포인트나 비동기 엔드포인트 호출을 놓칠 수 있습니다.

### 헤드리스 모드

헤드리스 모드는 내부 헤드리스 호출을 연결하여 브라우저 컨텍스트 내에서 직접 HTTP 요청/응답을 처리합니다. 이는 두 가지 장점을 제공합니다:
- HTTP 핑거프린트(TLS 및 사용자 에이전트)는 클라이언트를 합법적인 브라우저로 완전히 식별합니다.
- 더 나은 커버리지: 엔드포인트는 이전 방식과 같이 표준 원시 응답을 분석하고, 또한 자바스크립트가 활성화된 브라우저 렌더링 응답을 분석하여 발견됩니다.

헤드리스 크롤링은 선택 사항이며 `-headless` 옵션을 사용하여 활성화할 수 있습니다.

다른 헤드리스 CLI 옵션은 다음과 같습니다 -```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

no-sandbox 옵션으로 헤드리스 크롬 브라우저를 실행합니다. 루트 사용자로 실행할 때 유용합니다.```console katana -u https://tesla.com -headless -no-sandbox

root@kitploit:~
*`-no-incognito`*
----

시크릿 모드 없이 헤드리스 크롬 브라우저를 실행합니다. 로컬 브라우저를 사용할 때 유용합니다.```console
katana -u https://tesla.com -headless -no-incognito

실행 간에 쿠키 및 기타 브라우저 세션 데이터를 유지하려면 -no-incognito와 -chrome-data-dir을 함께 사용하여 Katana가 격리된 임시 디렉토리 대신 선택한 Chrome 프로필 디렉토리를 재사용하도록 하십시오.```console katana -u https://tesla.com -headless -no-incognito -chrome-data-dir /tmp/katana-profile

root@kitploit:~
*`-headless-options`*
----

headless 모드로 크롤링할 때, `-headless-options`를 사용하여 추가적인 Chrome 옵션을 지정할 수 있습니다. 예를 들어 -```console
katana -u https://tesla.com -headless -system-chrome -headless-options --disable-gpu,proxy-server=http://127.0.0.1:8080

-page-load-strategy

헤드리스 모드에서 katana가 페이지 로딩을 기다리는 방식을 제어합니다. 서로 다른 전략은 다양한 웹 애플리케이션 유형에 유용합니다:

root@kitploit:~
`domcontentloaded` 전략은 연속적인 백그라운드 요청(웹소켓, 폴링 등)으로 인해 로딩이 완전히 완료되지 않는 단일 페이지 애플리케이션(SPA)에 특히 유용합니다.

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

`domcontentloaded` 페이지 로드 전략을 사용할 때, 이 옵션은 DOMContentLoaded 이벤트가 실행된 후 대기할 초 수를 지정합니다. 이는 JavaScript가 대화형 요소를 렌더링하는 시간을 제공합니다. 기본값은 5초입니다.```console
katana -u https://tesla.com -headless -pls domcontentloaded -dwt 10

캡차 해결

Katana는 헤드리스 크롤링 중 자동 캡차 감지 및 해결을 지원합니다. 캡차 페이지가 발견되면 katana는 캡차 제공자를 식별하고, 외부 서비스를 통해 해결한 후 크롤링을 계속합니다.

지원되는 캡차 유형: reCAPTCHA v2, reCAPTCHA v3, reCAPTCHA Enterprise, Cloudflare Turnstile, hCaptcha

-captcha-solver-provider

캡차 해결 제공자를 지정하는 옵션입니다. 현재 지원: capsolver.

-captcha-solver-key

캡차 해결 제공자의 API 키입니다.```console katana -u https://example.com -headless -csp capsolver -csk YOUR_API_KEY

root@kitploit:~
제공자와 키는 환경 변수를 통해 설정할 수도 있습니다:```console
export CAPTCHA_SOLVER_PROVIDER=capsolver
export CAPTCHA_SOLVER_KEY=YOUR_API_KEY
katana -u https://example.com -headless

범위 제어

크롤링은 범위가 지정되지 않으면 무한할 수 있으므로, katana는 크롤링 범위를 정의하기 위한 다양한 지원을 제공합니다.

-field-scope

가장 편리한 옵션은 미리 정의된 필드 이름으로 범위를 정의하는 것이며, rdn이 필드 범위의 기본 옵션입니다.

  • rdn - 크롤링 범위가 루트 도메인 이름과 모든 하위 도메인으로 지정됨 (예: *example.com) (기본값)
  • fqdn - 크롤링 범위가 지정된 하위 도메인으로 지정됨 (예: www.example.com 또는 api.example.com)
  • dn - 크롤링 범위가 도메인 이름 키워드로 지정됨 (예: example)```console katana -u https://tesla.com -fs dn
root@kitploit:~
*`-crawl-scope`*
------

고급 스코프 제어를 위해 `-cs` 옵션을 사용할 수 있으며, 이 옵션은 **정규식**을 지원합니다.```console
katana -u https://tesla.com -cs login

여러 범위 내 규칙의 경우, 파일 입력에 여러 줄 문자열 / 정규식을 전달할 수 있습니다.```bash $ cat in_scope.txt

login/ admin/ app/ wordpress/

root@kitploit:~
입력:```console
katana -u https://tesla.com -cs in_scope.txt

-crawl-out-scope

크롤링에서 제외할 대상을 정의하기 위해 -cos 옵션을 사용할 수 있으며, 정규식 입력도 지원합니다.```console katana -u https://tesla.com -cos logout

root@kitploit:~
여러 범위 외 규칙의 경우, 여러 줄 문자열/정규식을 사용한 파일 입력을 전달할 수 있습니다.```bash
$ cat out_of_scope.txt

/logout
/log_out

Please provide the Markdown content to translate.```console katana -u https://tesla.com -cos out_of_scope.txt

root@kitploit:~
*`-no-scope`*
----

Katana는 기본적으로 `*.domain`으로 스코프가 설정되어 있습니다. 이를 비활성화하려면 `-ns` 옵션을 사용할 수 있으며, 또한 인터넷을 크롤링할 수 있습니다.```console
katana -u https://tesla.com -ns

-display-out-scope

기본적으로, 범위 옵션을 사용하면 출력에 표시할 링크에도 적용되므로 외부 URL은 기본적으로 제외되며, 이 동작을 덮어쓰려면 -do 옵션을 사용하여 대상 범위 내 URL/엔드포인트에 존재하는 모든 외부 URL을 표시할 수 있습니다.``` katana -u https://tesla.com -do

root@kitploit:~
다음은 범위 제어를 위한 모든 CLI 옵션입니다 -```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는 원하는 방식으로 크롤링을 구성하고 제어할 수 있는 여러 옵션을 제공합니다.

-depth

크롤링할 URL을 따라갈 depth를 정의하는 옵션입니다. 깊이가 깊을수록 더 많은 엔드포인트가 크롤링되고 시간도 더 소요됩니다.``` katana -u https://tesla.com -d 5

root@kitploit:~
*`-js-crawl`*
----

JavaScript 파일 파싱 및 JavaScript 파일에서 발견된 엔드포인트를 크롤링하는 옵션, 기본적으로 비활성화되어 있습니다.```
katana -u https://tesla.com -jc

-crawl-duration

크롤링 기간을 미리 정의하는 옵션, 기본적으로 비활성화됨.``` katana -u https://tesla.com -ct 2

root@kitploit:~
*`-known-files`*
----
`robots.txt`와 `sitemap.xml` 파일 크롤링을 활성화하는 옵션, 기본적으로 비활성화됨.```
katana -u https://tesla.com -kf robotstxt,sitemapxml

-automatic-form-fill

알려진/알려지지 않은 필드에 대해 자동 양식 작성을 활성화하는 옵션입니다. 알려진 필드 값은 $HOME/.config/katana/form-config.yaml에 있는 양식 구성 파일을 업데이트하여 필요에 따라 사용자 정의할 수 있습니다.

자동 양식 작성은 실험적 기능입니다.``` katana -u https://tesla.com -aff

root@kitploit:~
양식 설정 값은 동적 데이터 생성을 위한 DSL 헬퍼 함수를 지원합니다. [projectdiscovery/dsl](https://github.com/projectdiscovery/dsl) 라이브러리의 모든 `rand_*` 함수를 사용할 수 있습니다:```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

가변 경로 세그먼트를 정규화하여 유사한 모양의 URL 크롤링을 필터링하는 옵션입니다. 이는 ID, UUID, 해시, 날짜 및 기타 동적 값을 감지하고, 런타임에 반복되는 패턴을 학습합니다. 예를 들어, /users/123과 /users/456은 동일한 엔드포인트로 처리됩니다.``` katana -u https://tesla.com -fsu

root@kitploit:~
승격 임계값(경로 위치에서 매개변수로 처리되기 전의 고유 값 개수)은 `-fst`로 조정할 수 있습니다. 낮은 값은 더 공격적이며(크롤링되는 URL이 더 적음), 높은 값은 더 허용적입니다. 기본값은 `10`입니다.```
katana -u https://tesla.com -fsu -fst 5

*-max-domain-pages

도메인당 크롤링할 페이지 수를 제한하는 옵션입니다. 단일 도메인이 전체 크롤링 예산을 소진하는 것을 방지하며, 대규모 사이트나 크롤러 트랩 방지에 유용합니다.``` katana -u https://tesla.com -mdp 100

root@kitploit:~
## 지식 베이스 분류

Katana는 **지식 베이스**를 사용하여 크롤링 결과를 강화할 수 있습니다. 이는 [dit](https://github.com/HappyHackingSpace/dit)로 구동되는 각 크롤링된 페이지의 머신러닝 분류입니다. 활성화되면 모든 응답은 **페이지 유형**(예: `login`, `error`, `captcha`, `parked`)으로 분류되고, 페이지의 모든 양식이 식별되어 결과가 JSONL 출력의 `knowledgebase` 필드에 첨부됩니다. 이는 **모든 엔진**(표준 및 헤드리스)에서 작동합니다.

> **참고**: 분류 모델은 첫 사용 시 `~/.dit/model.json`으로 **자동으로 다운로드**됩니다([Hugging Face](https://huggingface.co/datasets/happyhackingspace/dit)에서). 이는 기기당 한 번만 발생하는 비용이며, 이후 실행에서는 캐시된 모델을 재사용합니다. `dit`의 수동 설치는 필요하지 않습니다.

*`-knowledge-base`*
----

지식 베이스 분류를 활성화합니다. 페이지 유형 및 양식 분류가 각 결과의 `knowledgebase` 필드에 추가됩니다.```console
katana -u https://example.com -kb -jsonl

설치

  • pip install -U gda-score

API 사용법```json

{ "timestamp": "...", "request": { "...": "..." }, "response": { "...": "...", "knowledgebase": { "PageType": "login", "Forms": [{ "type": "login", "fields": { "username": "username or email", "password": "password" } }] } } }

root@kitploit:~
*`-filter-page-type`*
----

결과를 지정된 페이지 유형으로만 필터링합니다. 이 옵션을 활성화하면 `-kb`가 암시됩니다 (분류기가 자동으로 초기화됩니다).```console
katana -u https://example.com -fpt login,error

-kb-secrets

지식 베이스에서 비밀 추출기를 활성화하여, 감지된 비밀(API 키, 토큰 등)을 secrets 키 아래에 표시합니다. -kb-validate-secrets를 추가하여 감지된 비밀을 해당 제공자에 대해 검증합니다 — 이는 실제 API 호출을 전송합니다.```console katana -u https://example.com -kb-secrets

root@kitploit:~
*`-kb-endpoints`*
----

엔드포인트 추출기를 활성화합니다. 이는 요청을 `endpoints` 키 아래에서 REST, GraphQL, SOAP 또는 XHR로 분류합니다.```console
katana -u https://example.com -kb-endpoints

인증된 크롤링

인증된 크롤링은 HTTP 요청에 사용자 정의 헤더 또는 쿠키를 포함하여 보호된 리소스에 접근하는 것을 의미합니다. 이러한 헤더는 인증 또는 권한 부여 정보를 제공하여 인증된 콘텐츠/엔드포인트를 크롤링할 수 있도록 합니다. katana를 사용하여 명령줄에서 직접 헤더를 지정하거나 파일로 제공하여 인증된 크롤링을 수행할 수 있습니다.

참고: 사용자는 수동으로 인증을 수행하고 세션 쿠키/헤더를 파일로 내보내 katana와 함께 사용해야 합니다.

-headers

요청에 사용자 정의 헤더 또는 쿠키를 추가하는 옵션입니다.

HTTP 사양의 헤더 구문

다음은 요청에 쿠키를 추가하는 예시입니다:``` katana -u https://tesla.com -H 'Cookie: usrsess=AmljNrESo'

root@kitploit:~
헤더나 쿠키를 파일로 제공하는 것도 가능합니다. 예를 들어:```
$ cat cookie.txt

Cookie: PHPSESSIONID=XXXXXXXXX
X-API-KEY: XXXXX
TOKEN=XX
  • Python >=3.9 및 <3.13
  • PostgreSQL >=12.8``` katana -u https://tesla.com -H cookie.txt
root@kitploit:~
필요할 때 구성할 추가 옵션이 있습니다. 여기에 구성 관련 CLI 옵션 전체가 있습니다 -```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는 사용자가 이미 로그인 및 인증된 활성 브라우저 세션에 연결하여 크롤링에 사용할 수 있습니다. 이를 위한 유일한 요구사항은 원격 디버깅이 활성화된 브라우저를 시작하는 것입니다.

다음은 원격 디버깅이 활성화된 Chrome 브라우저를 시작하고 이를 katana와 함께 사용하는 예시입니다 -

1단계) 먼저 Chrome 실행 파일의 경로를 찾으세요

2단계) 원격 디버깅이 활성화된 Chrome을 시작하면 웹소켓 URL이 반환됩니다. 예를 들어, MacOS에서는 다음 명령어를 사용하여 원격 디버깅이 활성화된 Chrome을 시작할 수 있습니다 -```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

root@kitploit:~
> 지금부터 크롤링하려는 웹사이트에 로그인하고 브라우저를 열어 두십시오.

**단계 3) 이제 katana와 함께 websocket url을 사용하여 활성 브라우저 세션에 연결하고 웹사이트를 크롤링하세요**```console
katana -headless -u https://tesla.com -cwu ws://127.0.0.1:9222/devtools/browser/c5316c9c-19d6-42dc-847a-41d1aeebf7d6 -no-incognito

참고: -cdd 옵션을 사용하여 브라우저 데이터와 쿠키를 저장할 사용자 정의 Chrome 데이터 디렉터리를 지정할 수 있습니다. 단, 쿠키가 Session으로만 설정되거나 일정 시간 후 만료되면 세션 데이터는 저장되지 않습니다.

필터

-field

[!WARNING] 사용 중단: 대신 -output-template을 사용하세요. -field 플래그는 하위 호환성을 위해 계속 지원됩니다.

Katana는 출력에서 원하는 정보를 필터링하는 데 사용할 수 있는 내장 필드를 제공합니다. -f 옵션을 사용하여 사용 가능한 필드 중 하나를 지정할 수 있습니다.``` -f, -field string field to display in output (url,path,fqdn,rdn,rurl,qurl,qpath,file,key,value,kv,dir,udir)

root@kitploit:~
다음은 각 필드의 예시와 예상 출력을 보여주는 표입니다 -


| 필드   | 설명                              | 예시                                                         |
| ------ | --------------------------------- | ------------------------------------------------------------ |
| `url`  | URL 엔드포인트                    | `https://admin.projectdiscovery.io/admin/login?user=admin&password=admin` |
| `qurl` | 쿼리 매개변수를 포함한 URL       | `https://admin.projectdiscovery.io/admin/login.php?user=admin&password=admin` |
| `qpath`| 쿼리 매개변수를 포함한 경로      | `/login?user=admin&password=admin`                           |
| `path` | URL 경로                         | `https://admin.projectdiscovery.io/admin/login`              |
| `fqdn` | 완전한 도메인 이름(FQDN)         | `admin.projectdiscovery.io`                                  |
| `rdn`  | 루트 도메인 이름                 | `projectdiscovery.io`                                        |
| `rurl` | 루트 URL                         | `https://admin.projectdiscovery.io`                          |
| `ufile`| 파일을 포함한 URL                | `https://admin.projectdiscovery.io/login.js`                 |
| `file` | URL 내 파일명                    | `login.php`                                                  |
| `key`  | URL의 매개변수 키                | `user,password`                                              |
| `value`| URL의 매개변수 값                | `admin,admin`                                                |
| `kv`   | URL 내 키=값                     | `user=admin&password=admin`                                  |
| `dir`  | URL 디렉토리명                   | `/admin/`                                                    |
| `udir` | 디렉토리를 포함한 URL            | `https://admin.projectdiscovery.io/admin/`                   |

다음은 필드 옵션을 사용하여 쿼리 매개변수가 있는 URL만 표시하는 예시입니다 -```
katana -u https://tesla.com -f qurl -silent

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

사용자 정의 필드

정규 표현식 규칙을 사용하여 페이지 응답에서 특정 정보를 추출하고 저장하는 사용자 정의 필드를 만들 수 있습니다. 이러한 사용자 정의 필드는 YAML 구성 파일을 사용하여 정의되며 기본 위치인 $HOME/.config/katana/field-config.yaml에서 로드됩니다. 또는 -flc 옵션을 사용하여 다른 위치에서 사용자 정의 필드 구성 파일을 로드할 수 있습니다. 다음은 사용자 정의 필드의 예입니다.```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}'
root@kitploit:~
사용자 정의 필드를 정의할 때 다음 속성이 지원됩니다:

- **name** (필수)

> **name** 속성의 값은 `-field` CLI 옵션 값으로 사용됩니다.

- **type** (필수)

> 사용자 정의 속성의 유형입니다. 현재 지원되는 옵션은 `regex`입니다.

- **part** (선택사항)

> 정보를 추출할 응답의 부분입니다. 기본값은 `response`이며, 헤더와 본문을 모두 포함합니다. 다른 가능한 값은 `header`와 `body`입니다.

- group (선택사항)

> 이 속성을 사용하여 정규식에서 특정 일치 그룹을 선택할 수 있습니다. 예: `group: 1`

#### 사용자 정의 필드를 사용하여 katana 실행:```console
katana -u https://tesla.com -f email,phone

-store-field

field 옵션은 실행 시 출력을 필터링하는 데 유용하며, 이를 보완하기 위해 -sf, -store-fields 옵션이 있습니다. 이 옵션은 필드 옵션과 동일하게 작동하지만, 필터링하는 대신 모든 정보를 대상 URL별로 정렬하여 katana_field 디렉토리 아래 디스크에 저장합니다. 데이터를 다른 위치에 저장하려면 -sfd 또는 -store-field-dir를 사용하세요.``` katana -u https://tesla.com -sf key,fqdn,qurl -silent

root@kitploit:~
다음 필터를 사용할 수 있습니다:
  * `"type": "<type>"````bash
$ ls katana_field/

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

The -store-field 옵션은 다양한 목적을 위해 대상 단어 목록을 구축하는 정보를 수집하는 데 유용할 수 있습니다. 여기에는 다음이 포함되지만 이에 국한되지는 않습니다:

  • 가장 일반적으로 사용되는 매개변수 식별
  • 자주 사용되는 경로 발견
  • 일반적으로 사용되는 파일 찾기
  • 관련되거나 알려지지 않은 하위 도메인 식별

Katana 필터

-extension-match

크롤 출력은 -em 옵션을 사용하여 특정 확장자와 쉽게 일치시킬 수 있으며, 주어진 확장자를 포함하는 출력만 표시하도록 할 수 있습니다.``` katana -u https://tesla.com -silent -em js,jsp,json

root@kitploit:~
특별한 값 `none`을 사용하면 파일 확장자가 없는 URL도 출력에 포함됩니다:```
katana -u https://tesla.com -silent -em js,jsp,json,none

-extension-filter

크롤 출력은 -ef 옵션을 사용하여 특정 확장자로 쉽게 필터링할 수 있으며, 이 옵션은 주어진 확장자를 포함하는 모든 URL을 제거합니다.``` katana -u https://tesla.com -silent -ef css,txt,md

root@kitploit:~
*`-no-default-ext-filter`*
---

Katana는 기본적으로 여러 확장자를 필터링합니다. 이는 `-ndef` 옵션으로 비활성화할 수 있습니다.```
katana -u https://tesla.com -silent -ndef

-match-regex

-match-regex 또는 -mr 플래그를 사용하면 정규 표현식을 사용하여 출력 URL을 필터링할 수 있습니다. 이 플래그를 사용할 때, 지정된 정규 표현식과 일치하는 URL만 출력에 표시됩니다.``` katana -u https://tesla.com -mr 'https://shop\.tesla\.com/*' -silent

root@kitploit:~
*`-filter-regex`*
---
The `-filter-regex` 또는 `-fr` 플래그는 정규 표현식을 사용하여 출력 URL을 필터링할 수 있게 합니다. 이 플래그를 사용하면 지정된 정규 표현식과 일치하는 URL을 건너뜁니다.```
katana -u https://tesla.com -fr 'https://www\.tesla\.com/*' -silent

고급 필터링

Katana는 고급 매칭 및 필터링 기능을 위한 DSL 기반 표현식을 지원합니다:

  • 200 상태 코드를 가진 엔드포인트를 매칭하려면:```shell katana -u https://www.hackerone.com -mdc 'status_code == 200'
root@kitploit:~
- 'default'를 포함하고 403 이외의 상태 코드를 가진 엔드포인트를 매칭하려면:```shell
katana -u https://www.hackerone.com -mdc 'contains(endpoint, "default") && status_code != 403'
  • 엔드포인트를 PHP 기술과 매칭하려면:```shell katana -u https://www.hackerone.com -mdc 'contains(to_lower(technologies), "php")'
root@kitploit:~
- Cloudflare에서 실행 중인 엔드포인트를 걸러내기 위해:```shell
katana -u https://www.hackerone.com -fdc 'contains(to_lower(technologies), "cloudflare")'

DSL 함수는 jsonl 출력의 모든 키에 적용할 수 있습니다. 사용 가능한 DSL 함수에 대한 자세한 내용은 dsl 프로젝트를 방문하십시오. 추가 필터 옵션은 다음과 같습니다 -```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

root@kitploit:~
## 속도 제한

크롤링 시 대상 웹사이트의 제한을 따르지 않으면 차단되거나 금지되기 쉽습니다. katana는 원하는 대로 빠르게 또는 느리게 크롤링 속도를 조정할 수 있는 여러 옵션을 제공합니다.

*`-delay`*
-----

크롤링 중 katana가 만드는 각 새 요청 사이에 초 단위 지연을 도입하는 옵션으로, 기본적으로 비활성화되어 있습니다.```
katana -u https://tesla.com -delay 20

-concurrency

대상별로 동시에 가져올 URL 수를 제어하는 옵션입니다.``` katana -u https://tesla.com -c 20

root@kitploit:~
*`-parallelism`*
-----
목록 입력에서 동시에 처리할 대상 수를 정의하는 옵션입니다.```
katana -u https://tesla.com -p 20

-rate-limit

초당 최대 요청 수이며, 모든 호스트에 걸쳐 전역적으로 적용됩니다.``` katana -u https://tesla.com -rl 100

root@kitploit:~
*`-rate-limit-minute`*
-----
모든 호스트에 전역으로 적용되는 분당 최대 요청 수입니다.```
katana -u https://tesla.com -rlm 500

-host-rate-limit

호스트당 초당 최대 요청 수. 각 호스트는 자체 속도 제한 버킷을 가지므로, 느린 호스트가 빠른 호스트를 제한하지 않습니다. 설정 시 전역 속도 제한을 대체합니다. Katana는 또한 호스트가 429 또는 503을 반환할 때 지수적 지연 및 지터와 함께 자동으로 백오프합니다.```console katana -u https://tesla.com -hrl 50

root@kitploit:~
*`-host-rate-limit-minute`*
-----
호스트당 분당 최대 요청 수.```console
katana -u https://tesla.com -hrlm 200

다음은 속도 제한 제어를 위한 모든 긴/짧은 CLI 옵션입니다 -```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

root@kitploit:~
## Output

Katana는 일반 텍스트 형식의 파일 출력과 함께, 발견된 엔드포인트를 연관시키기 위해 `source`, `tag`, `attribute` 이름과 같은 추가 정보를 포함하는 JSON 출력을 모두 지원합니다.

*`-output`*
---

기본적으로 katana는 크롤링된 엔드포인트를 일반 텍스트 형식으로 출력합니다. 결과는 `-output` 옵션을 사용하여 파일에 저장할 수 있습니다.```console
katana -u https://example.com -no-scope -output example_endpoints.txt

-output-template

-output-template 옵션을 사용하면 템플릿을 활용하여 출력 형식을 사용자 지정할 수 있으므로 출력 구조를 유연하게 정의할 수 있습니다. 이 옵션은 출력 필터링을 위해 사용되던 -field 플래그를 대체합니다. 미리 정의된 필드에 의존하는 대신 명령줄에서 직접 사용자 지정 템플릿을 지정하여 추출된 데이터가 표시되는 방식을 제어할 수 있습니다.

-output-template 옵션 사용 예시:```sh katana -u https://example.com -output-template '{{email}} - {{url}}'

root@kitploit:~
이 예제에서 `email`은 소스 `url`에서 찾은 이메일 주소를 추출하고 표시하는 [사용자 정의 필드](#custom-fields)를 나타냅니다.

> [!NOTE]
> 지정된 필드가 존재하지 않거나 값이 없으면 출력에서 생략됩니다.

이 옵션은 출력을 사용 사례에 가장 적합한 방식으로 효과적으로 구조화하여 데이터 추출을 더 직관적이고 맞춤 설정 가능하게 합니다.

*`-jsonl`*
---```console
katana -u https://example.com -jsonl | jq .
root@kitploit:~
<!-- ... -->

그것은 최소한의 표면을 가지며, 브라우저에서 이전 창에 맞게 도구 보기를 조정할 수 있습니다. 또는 클라이언트 데몬을 통해 최소 출력을 가진 경량 에이전트 keylogger_cli로 사용할 수 있습니다.```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

\n

Example Domain

\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...

\n
\n\n\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\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
\n

Example Domain

\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...

\n
\n\n\n" } }

root@kitploit:~
*`-store-response`*
----

`-store-response` 옵션을 사용하면 크롤링된 모든 엔드포인트 요청과 응답을 텍스트 파일에 기록할 수 있습니다. 이 옵션을 사용하면 요청과 응답이 포함된 텍스트 파일이 **katana_response** 디렉토리에 기록됩니다. 사용자 지정 디렉토리를 지정하려면 `-store-response-dir` 옵션을 사용할 수 있습니다.```console
katana -u https://example.com -no-scope -store-response

(no content provided)```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)

root@kitploit:~
**참고:**

*`-store-response` 옵션은 `-headless` 모드에서 지원되지 않습니다.*

*`-list-output-fields`*
----

`-list-output-fields` 또는 `-lof` 플래그는 JSONL 출력 형식에서 사용할 수 있는 모든 필드를 표시합니다. 이는 사용자 정의 출력 템플릿을 사용하거나 특정 필드를 제외할 때 사용 가능한 데이터를 이해하는 데 유용합니다.```console
katana -lof

-exclude-output-fields

-exclude-output-fields 또는 -eof 플래그를 사용하면 JSONL 출력에서 특정 필드를 제외할 수 있습니다. 이는 출력 크기를 줄이거나 원하지 않는 필드를 제거하여 특정 데이터에 집중하는 데 유용합니다.```console katana -u https://example.com -jsonl -eof raw,body

root@kitploit:~
출력과 관련된 추가 CLI 옵션은 다음과 같습니다 -```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

katana는 Option 구조체의 인스턴스를 생성하고 CLI를 통해 지정되는 옵션과 동일한 옵션으로 채움으로써 라이브러리로 사용될 수 있습니다. 옵션을 사용하여 crawlerOptions를 생성하고 표준 또는 하이브리드 crawler를 만들 수 있습니다. 입력을 크롤링하려면 crawler.Crawl 메서드를 호출해야 합니다.```go package main

import ( "math"

root@kitploit:~
"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()) } }

root@kitploit:~
## 이슈 신고 및 기능 요청

이슈 추적을 유지하고 분류 효율성을 개선하기 위해:

**모든 보고는 [GitHub 토론](https://github.com/projectdiscovery/katana/discussions)에서 시작됩니다**

- **버그 신고** → [Q&A 토론 시작](https://github.com/projectdiscovery/katana/discussions/new?category=q-a)
- **기능 요청** → [아이디어 토론 시작](https://github.com/projectdiscovery/katana/discussions/new?category=ideas)  
- **질문** → [Q&A 토론 시작](https://github.com/projectdiscovery/katana/discussions/new?category=q-a)

**왜 토론을 먼저 하나요?**
- **커뮤니티가** 빠른 질문과 문제 해결을 도울 수 있습니다
- **더 나은 분류** - 확인된 버그/기능이 추적되는 이슈가 됩니다  
- **더 깨끗한 이슈 트래커** - 실행 가능한 항목에만 집중합니다

유지보수자는 적절한 검토 후에 토론을 이슈로 전환합니다.

--------

<div align="center">

katana는 [projectdiscovery](https://projectdiscovery.io) 팀이 ❤️로 만들었으며 [MIT 라이선스](https://github.com/projectdiscovery/katana/blob/HEAD/LICENSE.md) 하에 배포됩니다.


<a href="https://discord.gg/projectdiscovery"><img src="https://assets.kitploit.com/production/public/readmes/5826/d0624f94cb9ea6401be5a089bb694bc963c47fa82aa3b758c893e3b0bbfdf663.png" width="300" alt="디스코드 참여"></a>

</div>
도구 다운로드
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/
StrategyDescription
heuristic(기본값) 페이지 동작에 적응하는 스마트 대기 - 로드 이벤트, 네트워크 유휴, DOM 안정성 대기
load브라우저의 로드 이벤트만 기다림
domcontentloadedDOMContentLoaded 이벤트와 JavaScript 렌더링을 위한 추가 시간(-dwt로 설정 가능)을 기다림
networkidle네트워크 활동이 멈출 때까지 기다림
none대기 없음 - 탐색 시작 후 즉시 반환
katana -u https://tesla.com -headless -pls domcontentloaded
운영 체제Chromium 실행 파일 위치Google Chrome 실행 파일 위치
Windows (64-bit)C:\Program Files (x86)\Google\Chromium\Application\chrome.exeC:\Program Files (x86)\Google\Chrome\Application\chrome.exe
Windows (32-bit)C:\Program Files\Google\Chromium\Application\chrome.exeC:\Program Files\Google\Chrome\Application\chrome.exe
macOS/Applications/Chromium.app/Contents/MacOS/Chromium/Applications/Google Chrome.app/Contents/MacOS/Google Chrome
Linux/usr/bin/chromium/usr/bin/google-chrome