
katana v1.7.0
إطار عمل من الجيل التالي للزحف والتجسس.
إطار عمل من الجيل التالي للزحف والعنكبوت
الميزات • التثبيت • الاستخدام • النطاق • التكوين • المرشحات • انضم إلى Discord
الميزات

- زحف ويب سريع وقابل للتكوين بالكامل
- وضع Standard ووضع Headless
- تحليل / زحف JavaScript
- تعبئة نماذج تلقائية قابلة للتخصيص
- التحكم في النطاق - حقل / Regex مهيآن مسبقًا
- قاعدة المعرفة - تصنيف نوع الصفحة / النموذج باستخدام التعلم الآلي (نموذج يُنزَّل تلقائيًا)
- مخرجات قابلة للتخصيص - حقول مهيأة مسبقًا
- الإدخال - STDIN و URL و LIST
- الإخراج - STDOUT و FILE و JSON
التثبيت
يتطلب 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
> لتشغيل katana في الوضع بدون رأس باستخدام docker -```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
الاستخدام```console
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
إدخال لـ katana
katana يتطلب url أو endpoint للزحف ويقبل مدخلات مفردة أو متعددة.
يمكن توفير URL المدخل باستخدام الخيار -u، ويمكن توفير قيم متعددة باستخدام مدخلات مفصولة بفواصل، كما يتم دعم إدخال ملف باستخدام الخيار -list بالإضافة إلى دعم الإدخال الأنبوبي (stdin).
إدخال URL```sh
katana -u https://tesla.com
#### إدخال URLs متعددة (مفصولة بفواصل)```sh
katana -u https://tesla.com,https://google.com
إدخال القائمة```bash
$ cat url_list.txt
https://tesla.com https://google.com
الملف `user_modules/example.lua` يحتوي على وظيفة بسيطة للتعامل مع الأدلة. يمكن تعديل هذا الملف أو استخدامه كقالب لوحدات المستخدم الخاصة بك.
## مثال على وحدة مستخدم
```lua
-- مثال على وحدة مستخدم للتعامل مع دليل
-- يتم استدعاؤها عند معالجة الدليل المحدد بواسطة المستخدم
-- يمكن العثور على وحدة المستخدم في `user_modules/` أو في المسار المحدد من قبل المستخدم.
local module = {}
function module.process_dir(dir, depth, files, directories)
-- dir: مسار الدليل المراد معالجته
-- depth: العمق الحالي (عدد صحيح)
-- files: مصفوفة (عدد صحيح) تحتوي على محتوى الدليل
-- directories: مصفوفة (عدد صحيح) تحتوي على أدلة فرعية
-- قم بإجراء معالجة مخصصة هنا
-- على سبيل المثال، طباعة محتوى الدليل
-- print("معالجة الدليل: " .. dir)
-- إرجاع true للاستمرار في المعالجة العادية، أو false لمنعها
return true
end
return module
إخلاء المسؤولية:
يجب إكمال الكود أعلاه من قبل المستخدم وفقًا لاحتياجاته الخاصة.**
ما ورد أعلاه هو مجرد مثال على كيفية إنشاء وحدة مستخدم لـ mimic. لا يوفر هذا المثال أي وظائف إضافية أو تعليمات برمجية مفيدة؛ إنه دليل هيكلي فقط للتنفيذ الخاص بك.**
عند تنفيذ وحدتك الخاصة، يرجى مراعاة القيود والمخاطر المحتملة المرتبطة بالوظائف المطلوبة، وأنت وحدك المسؤول عن كودك.**
توخ الحذر وانتبه لآثار هذه الأداة. استخدمها فقط على الأنظمة التي تملك الإذن باستهدافها.**
لا تتحمل أي جهة، بما في ذلك المساهمين في هذا المشروع، المسؤولية عن سوء استخدام هذه الأداة. استخدمها على مسؤوليتك الخاصة.```
katana -list url_list.txt
#### STDIN (piped) Input```sh
echo https://tesla.com | katana
- السحابة وSaaS (الشبكات المعرفة بالهوية)
- استبدال VPN (IPv4 وIPv6)
- الوصول عن بُعد القائم على الثقة الصفرية
- إدارة البنية التحتية عن بُعد
- الشبكات الهجينة ومتعددة السحابة```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
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/
وضع الزحف
الوضع القياسي
تستخدم طريقة الزحف القياسية مكتبة go http القياسية داخليًا للتعامل مع طلبات/استجابات HTTP. هذه الطريقة أسرع بكثير لأنها لا تحتوي على حمل المتصفح. ومع ذلك، فهي تحلل نص استجابات HTTP كما هو، دون أي عرض لجافا سكريبت أو DOM، مما قد يؤدي إلى فقدان نقاط النهاية المقدمة بعد DOM أو استدعاءات نقاط النهاية غير المتزامنة التي قد تحدث في تطبيقات الويب المعقدة اعتمادًا، على سبيل المثال، على أحداث خاصة بالمتصفح.
وضع بدون واجهة رسومية
يقوم وضع بدون واجهة رسومية بربط استدعاءات بدون واجهة رسومية داخلية للتعامل مع طلبات/استجابات 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
-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، يمكن تحديد خيارات chrome إضافية باستخدام -headless-options، على سبيل المثال -```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 لتحميل الصفحات في وضع الرأس (headless). الاستراتيجيات المختلفة مفيدة لأنواع مختلفة من تطبيقات الويب:
| الإستراتيجية | الوصف |
|----------|-------------|
| `heuristic` | (افتراضي) انتظار ذكي يتكيف مع سلوك الصفحة - ينتظر حدث التحميل، خمول الشبكة، واستقرار DOM |
| `load` | ينتظر فقط حدث التحميل الخاص بالمتصفح |
| `domcontentloaded` | ينتظر حدث DOMContentLoaded بالإضافة إلى وقت إضافي (قابل للتعديل عبر `-dwt`) لعرض JavaScript |
| `networkidle` | ينتظر حتى يتوقف نشاط الشبكة |
| `none` | لا انتظار - يعود فورًا بعد بدء التنقل |```console
katana -u https://tesla.com -headless -pls domcontentloaded
استراتيجية domcontentloaded مفيدة بشكل خاص لتطبيقات الصفحة الواحدة (SPAs) التي لا تكتمل تحميلها بالكامل أبدًا بسبب الطلبات الخلفية المستمرة (websockets, polling, إلخ).
-dom-wait-time
عند استخدام استراتيجية تحميل الصفحة domcontentloaded، يحدد هذا الخيار عدد الثواني التي يجب الانتظارها بعد إطلاق حدث DOMContentLoaded. يتيح ذلك وقتًا لجافا سكريبت لعرض العناصر التفاعلية. القيمة الافتراضية هي 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 الذي يأتي مع دعم regex.```console
katana -u https://tesla.com -cs login
بالنسبة لقواعد متعددة داخل النطاق، يمكن تمرير إدخال ملف مع سلسلة متعددة الأسطر / تعبير عادي.```bash
$ cat in_scope.txt
login/
admin/
app/
wordpress/
-
يوفر الإطار وثيقة تشغيل مفصلة تحتوي على جميع خطوات المشاركة وتوثيق التفويض الخاص بالمشاركة. تساعد وثيقة التشغيل هذه في تقديم مفهوم "الأمن والخصوصية حسب التصميم" خلال المشاركة. كما تحدد تدفق المشاركة الذي يمكن لأي مدقق أو مقيم استخدامه لفهم المشاركة وخطواتها.
-
يوفر الإطار قائمة التحقق الخاصة ببرنامج NIST National Checklist Program (NCP) لتتبع جميع إعدادات/سياسات الأمان المطبقة أثناء المشاركة.
-
يوفر الإطار وثيقة خدمات الأمان التي تسرد جميع خدمات الأمان المستخدمة: Microsoft 365 Defender وMicrosoft Sentinel وMicrosoft Defender for Cloud.
-
يوفر الإطار وثيقة سيناريوهات المستخدم التي تشرح السيناريوهات/المستخدمين المختلفين التي يغطيها الإطار بالإضافة إلى أنواع حسابات المستخدمين وشخصيات المستخدمين.```console katana -u https://tesla.com -cs in_scope.txt
*`-crawl-out-scope`*
-----
لتحديد ما لا يجب الزحف إليه، يمكن استخدام الخيار `-cos` ويدعم أيضًا إدخال **regex**.```console
katana -u https://tesla.com -cos logout
بالنسبة لعدة قواعد خارج النطاق، يمكن تمرير إدخال ملف بسلسلة متعددة الأسطر / تعبير منتظم.```bash $ cat out_of_scope.txt
/logout /log_out
المعلمات```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`*
----
خيار لتحديد `depth` لمتابعة عناوين URL للزحف، كلما زاد العمق زاد عدد نقاط النهاية التي يتم الزحف إليها + الوقت المستغرق للزحف.```
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 لتوليد البيانات الديناميكي. جميع دوال rand_* من مكتبة projectdiscovery/dsl متاحة:```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 المتشابهة عن طريق تسوية أجزاء المسار المتغيرة. يكتشف هذا المعرفات، UUIDs، الهاشات، التواريخ، والقيم الديناميكية الأخرى، ويتعلم أيضًا أنماطًا متكررة في وقت التشغيل. على سبيل المثال، يتم التعامل مع `/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. عند تفعيلها، يتم تصنيف كل استجابة حسب نوع الصفحة (مثل login، error، captcha، parked) ويتم تحديد أي نماذج على الصفحة، مع إرفاق النتيجة بحقل knowledgebase في مخرجات JSONL. يعمل هذا عبر جميع المحركات (القياسية وبدون واجهة رسومية).
ملاحظة: يتم تنزيل نموذج التصنيف تلقائيًا عند أول استخدام إلى
~/.dit/model.json(من Hugging Face). هذه تكلفة لمرة واحدة لكل جهاز — التشغيلات اللاحقة تعيد استخدام النموذج المخبأ. لا حاجة للتثبيت اليدوي لـdit.
-knowledge-base
تمكين تصنيف قاعدة المعرفة. يُضاف تصنيف نوع الصفحة والنماذج إلى حقل knowledgebase لكل نتيجة.```console
katana -u https://example.com -kb -jsonl
لكني أعتقد أن العملية تحتاج إلى تحديث لتناسب العصر الحديث. إليك النسخة التي أستخدمها```json
{
"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 extractor، الذي يصنف الطلبات إلى REST أو GraphQL أو SOAP أو XHR تحت المفتاح endpoints.```console
katana -u https://example.com -kb-endpoints
## الزحف المُعتمد على المصادقة
يتضمن الزحف المُعتمد على المصادقة إدراج رؤوس مخصصة أو ملفات تعريف ارتباط (كوكيز) في طلبات HTTP للوصول إلى الموارد المحمية. توفر هذه الرؤوس معلومات المصادقة أو التفويض، مما يسمح لك بزحف المحتوى/النقاط النهائية المُوثَّقة. يمكنك تحديد الرؤوس مباشرة في سطر الأوامر أو تقديمها كملف مع katana لإجراء الزحف المُعتمد على المصادقة.
> **ملاحظة**: يحتاج المستخدم إلى إجراء المصادقة يدويًا وتصدير ملف تعريف ارتباط الجلسة / الرأس إلى ملف لاستخدامه مع katana.
*`-headers`*
----
خيار لإضافة رأس مخصص أو ملف تعريف ارتباط (كوكي) إلى الطلب.
> بناء جملة [الرؤوس](https://datatracker.ietf.org/doc/html/rfc7230#section-3.2) في مواصفات HTTP
إليك مثال لإضافة ملف تعريف ارتباط (كوكي) إلى الطلب:```
katana -u https://tesla.com -H 'Cookie: usrsess=AmljNrESo'
من الممكن أيضًا توفير الرؤوس أو ملفات تعريف الارتباط كملف. على سبيل المثال:``` $ cat cookie.txt
Cookie: PHPSESSIONID=XXXXXXXXX X-API-KEY: XXXXX TOKEN=XX
| **OpenSCA** | أداة استخدام تجارية لتحليل تكوين البرمجيات. |```
katana -u https://tesla.com -H cookie.txt
هناك خيارات إضافية لتكوينها عند الحاجة، فيما يلي جميع خيارات 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 التنفيذي**
| نظام التشغيل | موقع 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` |
**الخطوة 2) قم بتشغيل Chrome مع تمكين التصحيح عن بعد، وسيعيد عنوان websocker 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) الآن استخدم عنوان websocket مع katana للاتصال بجلسة المتصفح النشطة وزحف الموقع الإلكتروني```console katana -headless -u https://tesla.com -cwu ws://127.0.0.1:9222/devtools/browser/c5316c9c-19d6-42dc-847a-41d1aeebf7d6 -no-incognito
> **ملاحظة**: يمكنك استخدام الخيار `-cdd` لتحديد دليل بيانات كروم مخصص لتخزين بيانات المتصفح والكوكيز، لكن ذلك لا يحفظ بيانات الجلسة إذا تم تعيين الكوكيز على `Session` فقط أو تنتهي صلاحيتها بعد وقت معين.
## المرشحات
*`-field`*
----
> [!WARNING]
> مهمل: استخدم [**`-output-template`**](#-output-template) بدلاً من ذلك. لا يزال علم `-field` مدعومًا للتوافق مع الإصدارات السابقة.
تأتي كاتانا مع حقول مدمجة يمكن استخدامها لتصفية المخرجات للحصول على المعلومات المطلوبة، ويمكن استخدام الخيار `-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 | اسم النطاق المؤهل بالكامل | 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
### الحقول المخصصة
يمكنك إنشاء حقول مخصصة لاستخراج وتخزين معلومات محددة من استجابات الصفحات باستخدام قواعد التعبير العادي (regex). يتم تعريف هذه الحقول المخصصة باستخدام ملف إعدادات 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}'
عند تعريف الحقول المخصصة، يتم دعم السمات التالية:
- name (مطلوب)
يتم استخدام قيمة سمة name كقيمة خيار سطر الأوامر
-field.
- 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` الذي يعمل تمامًا مثل خيار الحقل باستثناء أنه بدلاً من التصفية، يقوم بتخزين جميع المعلومات على القرص داخل مجلد `katana_field` مرتبة حسب عنوان URL المستهدف. استخدم `-sfd` أو `-store-field-dir` لتخزين البيانات في موقع مختلف.```
katana -u https://tesla.com -sf key,fqdn,qurl -silent
المدخلات:```bash $ ls katana_field/
https_www.tesla.com_fqdn.txt https_www.tesla.com_key.txt https_www.tesla.com_qurl.txt
يمكن أن يكون خيار `-store-field` مفيدًا لجمع المعلومات لبناء قائمة كلمات مستهدفة لأغراض متنوعة، بما في ذلك على سبيل المثال لا الحصر:
- تحديد المعاملات الأكثر استخدامًا
- اكتشاف المسارات المستخدمة بشكل متكرر
- العثور على الملفات الشائعة الاستخدام
- تحديد النطاقات الفرعية ذات الصلة أو غير المعروفة
### مرشحات Katana
*`-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
العلامة -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'
- لمطابقة نقاط النهاية التي تحتوي على "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")'
- لتصفية نقاط النهاية التي تعمل على Cloudflare:```shell katana -u https://www.hackerone.com -fdc 'contains(to_lower(technologies), "cloudflare")'
يمكن تطبيق دوال DSL على أي مفاتيح في مخرجات jsonl. لمزيد من المعلومات حول دوال DSL المتاحة، يرجى زيارة [dsl project](https://github.com/projectdiscovery/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
حد المعدل
من السهل أن يتم حظرك أثناء الزحف إذا لم تتبع حدود المواقع المستهدفة، كاتانا تأتي مع خيارات متعددة لضبط الزحف ليكون بالسرعة التي نريدها (سريعًا أو بطيئًا).
-delay
خيار لإدخال تأخير بالثواني بين كل طلب جديد تقوم به كاتانا أثناء الزحف، معطل بشكل افتراضي.``` 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
المخرجات
تدعم Katana كل من إخراج الملفات بصيغة النص العادي وكذلك JSON والتي تتضمن معلومات إضافية مثل source وtag واسم attribute لربط النقاط النهائية المكتشفة.
-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.
[!NOTE] إذا كان الحقل المحدد غير موجود أو لا يحتوي على قيمة، فسيتم ببساطة حذفه من المخرجات.
يمكن لهذا الخيار تنظيم المخرجات بشكل فعال بطريقة تناسب حالة الاستخدام الخاصة بك، مما يجعل استخراج البيانات أكثر بديهية وقابلية للتخصيص.
-jsonl
---```console
katana -u https://example.com -jsonl | jq .
``````json
{
"timestamp": "2023-03-20T16:23:58.027559+05:30",
"request": {
"method": "GET",
"endpoint": "https://example.com",
"raw": "GET / HTTP/1.1\r\nHost: example.com\r\nUser-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 11_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36\r\nAccept-Encoding: gzip\r\n\r\n"
},
"response": {
"status_code": 200,
"headers": {
"accept_ranges": "bytes",
"expires": "Mon, 27 Mar 2023 10:53:58 GMT",
"last_modified": "Thu, 17 Oct 2019 07:18:26 GMT",
"content_type": "text/html; charset=UTF-8",
"server": "ECS (dcb/7EA3)",
"vary": "Accept-Encoding",
"etag": "\"3147526947\"",
"cache_control": "max-age=604800",
"x_cache": "HIT",
"date": "Mon, 20 Mar 2023 10:53:58 GMT",
"age": "331239"
},
"body": "<!doctype html>\n<html>\n<head>\n <title>Example Domain</title>\n\n <meta charset=\"utf-8\" />\n <meta http-equiv=\"Content-type\" content=\"text/html; charset=utf-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n <style type=\"text/css\">\n body {\n background-color: #f0f0f2;\n margin: 0;\n padding: 0;\n font-family: -apple-system, system-ui, BlinkMacSystemFont, \"Segoe UI\", \"Open Sans\", \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n \n }\n div {\n width: 600px;\n margin: 5em auto;\n padding: 2em;\n background-color: #fdfdff;\n border-radius: 0.5em;\n box-shadow: 2px 3px 7px 2px rgba(0,0,0,0.02);\n }\n a:link, a:visited {\n color: #38488f;\n text-decoration: none;\n }\n @media (max-width: 700px) {\n div {\n margin: 0 auto;\n width: auto;\n }\n }\n </style> \n</head>\n\n<body>\n<div>\n <h1>Example Domain</h1>\n <p>This domain is for use in illustrative examples in documents. You may use this\n domain in literature without prior coordination or asking for permission.</p>\n <p><a href=\"https://www.iana.org/domains/example\">More information...</a></p>\n</div>\n</body>\n</html>\n",
"technologies": [
"Azure",
"Amazon ECS",
"Amazon Web Services",
"Docker",
"Azure CDN"
],
"raw": "HTTP/1.1 200 OK\r\nContent-Length: 1256\r\nAccept-Ranges: bytes\r\nAge: 331239\r\nCache-Control: max-age=604800\r\nContent-Type: text/html; charset=UTF-8\r\nDate: Mon, 20 Mar 2023 10:53:58 GMT\r\nEtag: \"3147526947\"\r\nExpires: Mon, 27 Mar 2023 10:53:58 GMT\r\nLast-Modified: Thu, 17 Oct 2019 07:18:26 GMT\r\nServer: ECS (dcb/7EA3)\r\nVary: Accept-Encoding\r\nX-Cache: HIT\r\n\r\n<!doctype html>\n<html>\n<head>\n <title>Example Domain</title>\n\n <meta charset=\"utf-8\" />\n <meta http-equiv=\"Content-type\" content=\"text/html; charset=utf-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n <style type=\"text/css\">\n body {\n background-color: #f0f0f2;\n margin: 0;\n padding: 0;\n font-family: -apple-system, system-ui, BlinkMacSystemFont, \"Segoe UI\", \"Open Sans\", \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n \n }\n div {\n width: 600px;\n margin: 5em auto;\n padding: 2em;\n background-color: #fdfdff;\n border-radius: 0.5em;\n box-shadow: 2px 3px 7px 2px rgba(0,0,0,0.02);\n }\n a:link, a:visited {\n color: #38488f;\n text-decoration: none;\n }\n @media (max-width: 700px) {\n div {\n margin: 0 auto;\n width: auto;\n }\n }\n </style> \n</head>\n\n<body>\n<div>\n <h1>Example Domain</h1>\n <p>This domain is for use in illustrative examples in documents. You may use this\n domain in literature without prior coordination or asking for permission.</p>\n <p><a href=\"https://www.iana.org/domains/example\">More information...</a></p>\n</div>\n</body>\n</html>\n"
}
}
-store-response
الخيار -store-response يسمح بكتابة جميع طلبات واستجابات نقاط النهاية التي تم الزحف إليها إلى ملف نصي. عند استخدام هذا الخيار، سيتم كتابة ملفات نصية تحتوي على الطلب والاستجابة إلى دليل katana_response. إذا كنت ترغب في تحديد دليل مخصص، يمكنك استخدام الخيار -store-response-dir.```console
katana -u https://example.com -no-scope -store-response
(no content to translate)```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 كمكتبة
يمكن استخدام `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
- تقارير الأخطاء → بدء مناقشة أسئلة وأجوبة
- طلبات الميزات → بدء مناقشة أفكار
- الأسئلة → بدء مناقشة أسئلة وأجوبة
لماذا المناقشات أولاً؟
- يمكن للمجتمع المساعدة في الأسئلة السريعة وحل المشكلات
- تصنيف أفضل - تتحول الأخطاء/الميزات المؤكدة إلى مشكلات متتبعة
- متتبع مشكلات أنظف - التركيز على العناصر القابلة للتنفيذ فقط
سيقوم المشرفون بتحويل المناقشات إلى مشكلات عند الاقتضاء بعد المراجعة المناسبة.
katana مصنوع بـ ❤️ بواسطة فريق projectdiscovery ويُوزع تحت رخصة MIT.
