
차세대 크롤링 및 스파이더링 프레임워크.
기능 • 설치 • 사용법 • 범위 • 설정 • 필터 • Discord 참여

katana를 설치하려면 Go 1.26+가 필요합니다. 설치 문제가 발생할 경우, 최소 요구 버전이 변경되었을 수 있으므로 최신 버전의 Go를 사용해 보시기 바랍니다. 아래 명령을 실행하거나 릴리스 페이지에서 미리 컴파일된 바이너리를 다운로드하세요.```console CGO_ENABLED=1 go install github.com/projectdiscovery/katana/cmd/katana@latest
**katana 설치/실행을 위한 추가 옵션**
<details>
<summary>Docker</summary>
> 최신 태그로 docker를 설치/업데이트 하려면 -```sh
docker pull projectdiscovery/katana:latest
katana를 표준 모드로 docker를 사용하여 실행하려면 -```sh docker run projectdiscovery/katana:latest -u https://tesla.com
> docker를 사용하여 katana를 헤드리스 모드로 실행하려면 -```sh
docker run projectdiscovery/katana:latest -u https://tesla.com -system-chrome -headless
다음 필수 구성 요소를 설치하는 것이 좋습니다 -```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
> install katana -```sh
go install github.com/projectdiscovery/katana/cmd/katana@latest
katana -h
이것은 도구에 대한 도움말을 표시합니다. 지원하는 모든 스위치가 여기에 있습니다.```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는 크롤링할 url 또는 endpoint가 필요하며 단일 또는 다중 입력을 허용합니다.
입력 URL은 -u 옵션을 사용하여 제공할 수 있으며, 다중 값은 쉼표로 구분된 입력을 사용하여 제공할 수 있습니다. 마찬가지로 파일 입력은 -list 옵션을 사용하여 지원되며, 추가로 파이프 입력(stdin)도 지원됩니다.
katana -u https://tesla.com
#### 여러 URL 입력 (쉼표로 구분)```sh
katana -u https://tesla.com,https://google.com
$ cat url_list.txt
https://tesla.com https://google.com
(no content provided)```
katana -list url_list.txt
echo https://tesla.com | katana
#### 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
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
## 크롤링 모드
### 표준 모드
표준 크롤링 방식은 내부적으로 표준 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-sandboxno-sandbox 옵션으로 헤드리스 크롬 브라우저를 실행합니다. 루트 사용자로 실행할 때 유용합니다.```console katana -u https://tesla.com -headless -no-sandbox
*`-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
*`-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가 페이지 로딩을 기다리는 방식을 제어합니다. 서로 다른 전략은 다양한 웹 애플리케이션 유형에 유용합니다:
`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
제공자와 키는 환경 변수를 통해 설정할 수도 있습니다:```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*`-crawl-scope`*
------
고급 스코프 제어를 위해 `-cs` 옵션을 사용할 수 있으며, 이 옵션은 **정규식**을 지원합니다.```console
katana -u https://tesla.com -cs login
여러 범위 내 규칙의 경우, 파일 입력에 여러 줄 문자열 / 정규식을 전달할 수 있습니다.```bash $ cat in_scope.txt
login/ admin/ app/ wordpress/
입력:```console
katana -u https://tesla.com -cs in_scope.txt
-crawl-out-scope크롤링에서 제외할 대상을 정의하기 위해 -cos 옵션을 사용할 수 있으며, 정규식 입력도 지원합니다.```console
katana -u https://tesla.com -cos logout
여러 범위 외 규칙의 경우, 여러 줄 문자열/정규식을 사용한 파일 입력을 전달할 수 있습니다.```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
*`-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
다음은 범위 제어를 위한 모든 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
*`-js-crawl`*
----
JavaScript 파일 파싱 및 JavaScript 파일에서 발견된 엔드포인트를 크롤링하는 옵션, 기본적으로 비활성화되어 있습니다.```
katana -u https://tesla.com -jc
-crawl-duration크롤링 기간을 미리 정의하는 옵션, 기본적으로 비활성화됨.``` katana -u https://tesla.com -ct 2
*`-known-files`*
----
`robots.txt`와 `sitemap.xml` 파일 크롤링을 활성화하는 옵션, 기본적으로 비활성화됨.```
katana -u https://tesla.com -kf robotstxt,sitemapxml
-automatic-form-fill알려진/알려지지 않은 필드에 대해 자동 양식 작성을 활성화하는 옵션입니다. 알려진 필드 값은 $HOME/.config/katana/form-config.yaml에 있는 양식 구성 파일을 업데이트하여 필요에 따라 사용자 정의할 수 있습니다.
자동 양식 작성은 실험적 기능입니다.``` katana -u https://tesla.com -aff
양식 설정 값은 동적 데이터 생성을 위한 DSL 헬퍼 함수를 지원합니다. [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
승격 임계값(경로 위치에서 매개변수로 처리되기 전의 고유 값 개수)은 `-fst`로 조정할 수 있습니다. 낮은 값은 더 공격적이며(크롤링되는 URL이 더 적음), 높은 값은 더 허용적입니다. 기본값은 `10`입니다.```
katana -u https://tesla.com -fsu -fst 5
-max-domain-pages도메인당 크롤링할 페이지 수를 제한하는 옵션입니다. 단일 도메인이 전체 크롤링 예산을 소진하는 것을 방지하며, 대규모 사이트나 크롤러 트랩 방지에 유용합니다.``` katana -u https://tesla.com -mdp 100
## 지식 베이스 분류
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
{ "timestamp": "...", "request": { "...": "..." }, "response": { "...": "...", "knowledgebase": { "PageType": "login", "Forms": [{ "type": "login", "fields": { "username": "username or email", "password": "password" } }] } } }
*`-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
*`-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'
헤더나 쿠키를 파일로 제공하는 것도 가능합니다. 예를 들어:```
$ cat cookie.txt
Cookie: PHPSESSIONID=XXXXXXXXX
X-API-KEY: XXXXX
TOKEN=XX
필요할 때 구성할 추가 옵션이 있습니다. 여기에 구성 관련 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
> 지금부터 크롤링하려는 웹사이트에 로그인하고 브라우저를 열어 두십시오.
**단계 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)
다음은 각 필드의 예시와 예상 출력을 보여주는 표입니다 -
| 필드 | 설명 | 예시 |
| ------ | --------------------------------- | ------------------------------------------------------------ |
| `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:
name: phone type: regex regex:
사용자 정의 필드를 정의할 때 다음 속성이 지원됩니다:
- **name** (필수)
> **name** 속성의 값은 `-field` CLI 옵션 값으로 사용됩니다.
- **type** (필수)
> 사용자 정의 속성의 유형입니다. 현재 지원되는 옵션은 `regex`입니다.
- **part** (선택사항)
> 정보를 추출할 응답의 부분입니다. 기본값은 `response`이며, 헤더와 본문을 모두 포함합니다. 다른 가능한 값은 `header`와 `body`입니다.
- group (선택사항)
> 이 속성을 사용하여 정규식에서 특정 일치 그룹을 선택할 수 있습니다. 예: `group: 1`
#### 사용자 정의 필드를 사용하여 katana 실행:```console
katana -u https://tesla.com -f email,phone
-store-fieldfield 옵션은 실행 시 출력을 필터링하는 데 유용하며, 이를 보완하기 위해 -sf, -store-fields 옵션이 있습니다. 이 옵션은 필드 옵션과 동일하게 작동하지만, 필터링하는 대신 모든 정보를 대상 URL별로 정렬하여 katana_field 디렉토리 아래 디스크에 저장합니다. 데이터를 다른 위치에 저장하려면 -sfd 또는 -store-field-dir를 사용하세요.```
katana -u https://tesla.com -sf key,fqdn,qurl -silent
다음 필터를 사용할 수 있습니다:
* `"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 옵션은 다양한 목적을 위해 대상 단어 목록을 구축하는 정보를 수집하는 데 유용할 수 있습니다. 여기에는 다음이 포함되지만 이에 국한되지는 않습니다:
-extension-match크롤 출력은 -em 옵션을 사용하여 특정 확장자와 쉽게 일치시킬 수 있으며, 주어진 확장자를 포함하는 출력만 표시하도록 할 수 있습니다.```
katana -u https://tesla.com -silent -em js,jsp,json
특별한 값 `none`을 사용하면 파일 확장자가 없는 URL도 출력에 포함됩니다:```
katana -u https://tesla.com -silent -em js,jsp,json,none
-extension-filter크롤 출력은 -ef 옵션을 사용하여 특정 확장자로 쉽게 필터링할 수 있으며, 이 옵션은 주어진 확장자를 포함하는 모든 URL을 제거합니다.```
katana -u https://tesla.com -silent -ef css,txt,md
*`-no-default-ext-filter`*
---
Katana는 기본적으로 여러 확장자를 필터링합니다. 이는 `-ndef` 옵션으로 비활성화할 수 있습니다.```
katana -u https://tesla.com -silent -ndef
-match-regex-match-regex 또는 -mr 플래그를 사용하면 정규 표현식을 사용하여 출력 URL을 필터링할 수 있습니다. 이 플래그를 사용할 때, 지정된 정규 표현식과 일치하는 URL만 출력에 표시됩니다.```
katana -u https://tesla.com -mr 'https://shop\.tesla\.com/*' -silent
*`-filter-regex`*
---
The `-filter-regex` 또는 `-fr` 플래그는 정규 표현식을 사용하여 출력 URL을 필터링할 수 있게 합니다. 이 플래그를 사용하면 지정된 정규 표현식과 일치하는 URL을 건너뜁니다.```
katana -u https://tesla.com -fr 'https://www\.tesla\.com/*' -silent
Katana는 고급 매칭 및 필터링 기능을 위한 DSL 기반 표현식을 지원합니다:
- 'default'를 포함하고 403 이외의 상태 코드를 가진 엔드포인트를 매칭하려면:```shell
katana -u https://www.hackerone.com -mdc 'contains(endpoint, "default") && status_code != 403'
- 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
## 속도 제한
크롤링 시 대상 웹사이트의 제한을 따르지 않으면 차단되거나 금지되기 쉽습니다. katana는 원하는 대로 빠르게 또는 느리게 크롤링 속도를 조정할 수 있는 여러 옵션을 제공합니다.
*`-delay`*
-----
크롤링 중 katana가 만드는 각 새 요청 사이에 초 단위 지연을 도입하는 옵션으로, 기본적으로 비활성화되어 있습니다.```
katana -u https://tesla.com -delay 20
-concurrency대상별로 동시에 가져올 URL 수를 제어하는 옵션입니다.``` katana -u https://tesla.com -c 20
*`-parallelism`*
-----
목록 입력에서 동시에 처리할 대상 수를 정의하는 옵션입니다.```
katana -u https://tesla.com -p 20
-rate-limit초당 최대 요청 수이며, 모든 호스트에 걸쳐 전역적으로 적용됩니다.``` katana -u https://tesla.com -rl 100
*`-rate-limit-minute`*
-----
모든 호스트에 전역으로 적용되는 분당 최대 요청 수입니다.```
katana -u https://tesla.com -rlm 500
-host-rate-limit호스트당 초당 최대 요청 수. 각 호스트는 자체 속도 제한 버킷을 가지므로, 느린 호스트가 빠른 호스트를 제한하지 않습니다. 설정 시 전역 속도 제한을 대체합니다. Katana는 또한 호스트가 429 또는 503을 반환할 때 지수적 지연 및 지터와 함께 자동으로 백오프합니다.```console katana -u https://tesla.com -hrl 50
*`-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
## 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}}'
이 예제에서 `email`은 소스 `url`에서 찾은 이메일 주소를 추출하고 표시하는 [사용자 정의 필드](#custom-fields)를 나타냅니다.
> [!NOTE]
> 지정된 필드가 존재하지 않거나 값이 없으면 출력에서 생략됩니다.
이 옵션은 출력을 사용 사례에 가장 적합한 방식으로 효과적으로 구조화하여 데이터 추출을 더 직관적이고 맞춤 설정 가능하게 합니다.
*`-jsonl`*
---```console
katana -u https://example.com -jsonl | jq .
<!-- ... -->
그것은 최소한의 표면을 가지며, 브라우저에서 이전 창에 맞게 도구 보기를 조정할 수 있습니다. 또는 클라이언트 데몬을 통해 최소 출력을 가진 경량 에이전트 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
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`*
----
`-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)
**참고:**
*`-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
출력과 관련된 추가 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는 Option 구조체의 인스턴스를 생성하고 CLI를 통해 지정되는 옵션과 동일한 옵션으로 채움으로써 라이브러리로 사용될 수 있습니다. 옵션을 사용하여 crawlerOptions를 생성하고 표준 또는 하이브리드 crawler를 만들 수 있습니다.
입력을 크롤링하려면 crawler.Crawl 메서드를 호출해야 합니다.```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()) } }
## 이슈 신고 및 기능 요청
이슈 추적을 유지하고 분류 효율성을 개선하기 위해:
**모든 보고는 [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>
| Strategy | Description |
|---|
heuristic | (기본값) 페이지 동작에 적응하는 스마트 대기 - 로드 이벤트, 네트워크 유휴, DOM 안정성 대기 |
load | 브라우저의 로드 이벤트만 기다림 |
domcontentloaded | DOMContentLoaded 이벤트와 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.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 |