PAGES
← all tools
◆ Reconnaissance & OSINT

xnLinkFinder

v8.1 open-source

Discovers endpoints, parameters, wordlists, and secrets for a target by crawling URLs, directories, Burp/ZAP/HARHARAn HTTP Archive file, a JSON-format log of all network requests and responses captured by a browser's developer tools, used by cyber tools to replay, inspect, or analyze web traffic without re-running a live session. files, or waymore results.

Summary

xnLinkFinder is an open-source command-line tool for reconnaissance that discovers endpoints, parameters, wordlist candidates, and hardcoded secrets for a given target, and it costs nothing to use. It runs as a Python script installed via pip or pipx, and it accepts input from a live crawl of one or many URLs, a local directory or file, or exports from Burp, ZAP, Caido, HAR recordings, and waymore results. It's aimed at penetration testers and bug bounty hunters doing attack surfaceattack surfaceThe exposed systems, interfaces and access points an attacker could try to use. It includes internet-facing services as well as identities, software and other reachable resources. mapping, and its README traces its lineage to Gerben Javado's LinkFinder, whose regex-based approach it extends with browser heap snapshot analysis, PDF and OCROCROptical character recognition, converting text in an image or scanned document into machine-readable characters. It lets software search or process text that was stored as pixels. extraction, and detection for AWS keys, JWTsJWTsJSON Web Tokens — an open standard (RFC 7519) for encoding claims as a signed, optionally encrypted JSON object. Cyber tools use them for stateless authentication without server-side session storage., and other secret formats. First committed in 2022, it remains active with four contributors and 30 commits in the past year.

Discovers endpoints, parameters, wordlists, and secrets for a target by crawling URLs, directories, Burp/ZAP/HAR files, or waymore results.

How xnLinkFinder helps

Which endpoints and parameters does this target actually expose beyond what a static crawl would show?

crawls the target or its exported traffic, extracts links and parameters from responses (including JS, HTML form fields, and dynamically generated URLs captured from a browser's memory), and lists them for further testing

Did this application leak any credentials or tokens in its responses?

scans crawled content for patterns matching AWS keys, GitHub tokens, JWTs, Stripe keys, private keys, database connection strings and similar formats, and can write them to a file grouped by type and value with the source URL and count

What attack surface can I pull out of a HAR file, Burp/ZAP/Caido export, or archived waymore data instead of crawling live?

reads links, parameters and requests directly out of those file formats without touching the target, letting the same extraction run offline against captured traffic

What would a target-specific wordlist for this app look like, built from its own naming conventions?

derives candidate words from discovered paths and parameters, including correct plural forms, to produce a wordlist tailored to that target rather than a generic list

Can I map an authenticated app's traffic without also hoovering up its blog or CMS platform's own script and stylesheet links?

can restrict extraction to human-visible page content, stripping script, style and template tags first so only the page's own outbound links are reported

Will crawling this target get me blocked or blow through a bug bounty program's rate limit?

supports a requests-per-second cap and automatic retries on timeouts or 429/5xx responses, and can route traffic through a proxy or list of proxies to spread out the load

all 14 features, with the evidence for each →

Languages

Not documented

Features

14 capabilities · 5 backed by code, an API document or a real run

Built from xnLinkFinder's releases, docs, README and our own runs. “Seen” marks the month we first spotted a release the vendor didn't date. Group names and tags are our labels.

Compare with peers →

  • xnLinkFinder covers 1 of the 13 network discovery and scanning capabilities we track.

What xnLinkFinder offers you

  • Command-line interface6
  • JSON data export1
All capabilities 14 capabilities
Validated link extraction shipped Filters, validates, and normalizes discovered URLs by TLD, domain format, encoding, and specific patterns to reduce noise and increase accuracy. 11 releases · 2 other sources · first seen Feb 2025

release 11 total

  • Supports unicode and percent-encoded characters in domain matching, catching domains like thisätest.com and this%C3%A4test.com. v7.5 · Dec 2025 · source · release history
  • Adds is_domain_format() function to detect domain/subdomain-formatted lines (e.g., example.com, sub.example.com, example.co.uk), enabling input files and STDIN starting with bare domains to be correctly identified and processed as URL files rather than content files. v7.3 · Oct 2025 · source · release history
  • Automatically excludes links starting with ... to reduce noise from false-positive matches. v6.17 · Sep 2025 · source · release history
  • Extracts links starting with #/ to surface hash-based routing endpoints in single-page applications (e.g., AngularJS). v6.17 · Sep 2025 · source · release history
  • Extra-regex domain extraction now filters out invalid TLDs, too-short labels, and a hardcoded blocklist of common variable/JS names to cut false positives. v6.7 · Feb 2025 · source · release history
  • New commonTLDs config key in config.yml (top 50 TLDs) lets users define which TLD set is used to filter discovered domain links. v6.7 · Feb 2025 · source · release history

example

  • Restrict discovered domain links to a custom TLD list by editing commonTLDs in your config before running a focused engagement. # In config.yml, add or trim entries under commonTLDs: # commonTLDs: # - com # - io # - net xnLinkFinder -i https://example.com v6.7 · Feb 2025 · source
  • Crawl domain and filter in-scope links xnLinkFinder -i target.com -sf target.com
Proxy support verified Routes requests through a specified proxy, accepting a proxy string or a file containing a list of proxies for random selection. 7 releases · 5 other sources · first seen May 2024

Also counts toward: Command-line interface

release 7 total

  • New -rp/--request-proxy argument supports proxying requests through a single proxy string (HTTP, HTTPS, SOCKS4, SOCKS5) or a file containing a list of proxies with random selection. v8.1 · Jan 2026 · source · release history
  • The -fp/--forward-proxy mode now runs in a background thread, letting link processing continue while proxying is active, and now proxies ALL discovered full links — not only outbound requests. v8.1 · Jan 2026 · source · release history
  • Proxy value validation ensures -rp inputs have a recognized scheme before use. v8.1 · Jan 2026 · source · release history
  • New -r/--retries argument lets you specify up to 5 automatic retries on timeout, connection error, or HTTP 429/500/502/503/504 responses. v7.1 · Oct 2025 · source · release history
  • New -rl/--rate-limit flag sets a maximum requests-per-second cap to respect bug bounty scope rate limits. v7.0 · Sep 2025 · source · release history
  • Adds -cl/--content-length flag to display the Content-Length of each crawled response alongside the status code and URL. v6.8 · Feb 2025 · source · release history

command line

  • --request-proxy — Request proxy to use. Can be a proxy string (e.g. http://user:pass@1.2.3.4:8000, socks5://host:port) or a file containing proxy list (one per line, random selection) v8.1 · Jan 2026 · command-line history

example

  • Rotate through a list of SOCKS5 proxies to distribute recon traffic and avoid rate-limiting. xnLinkFinder -i https://example.com -rp proxies.txt v8.1 · Jan 2026 · source
  • Scrape a target that rate-limits aggressively by retrying up to 5 times on 429 or transient 5xx errors before giving up. xnLinkFinder -i https://target.example.com -r 5 v7.1 · Oct 2025 · source
  • Crawl a target while staying within a bug bounty program's stated rate limit to avoid being blocked or violating scope rules. python3 xnLinkFinder.py -i https://target.example.com -rl 5 v7.0 · Sep 2025 · source
  • Surface large or unexpected responses (e.g. admin pages returning full content) while crawling a target. python3 xnLinkFinder.py -i https://target.com -cl v6.8 · Feb 2025 · source
Link extraction from HTML responses verified Optionally restricts link extraction to human-readable text in HTML by stripping script, style, noscript, and template tag content before parsing. 9 releases · 3 other sources · first seen Feb 2025

Also counts toward: Command-line interface

release 9 total

  • New -ro/--readable-only flag restricts link extraction to human-visible page content, filtering out JS/CSS links — useful when hunting domain-specific links in blogs or CMS-heavy sites. v7.16 · Jan 2026 · source · release history
  • Adds BeautifulSoup-based readable HTML extraction that strips <script>, <style>, <noscript>, and <template> tags before searching for links, surfacing encoded URLs that raw parsing misses. v7.16 · Jan 2026 · source · release history
  • Adds automatic content chunking for responses over 50KB, splitting into overlapping 40KB chunks with 5KB overlap to ensure complete link discovery without regex timeouts. v7.5 · Dec 2025 · source · release history
  • Supports unicode and percent-encoded characters in domain matching, catching domains like thisätest.com and this%C3%A4test.com. v7.5 · Dec 2025 · source · release history
  • Automatically excludes links starting with ... to reduce noise from false-positive matches. v6.17 · Sep 2025 · source · release history
  • Extracts links starting with #/ to surface hash-based routing endpoints in single-page applications (e.g., AngularJS). v6.17 · Sep 2025 · source · release history

docs

  • Discovers endpoints, parameters, wordlists, and secrets for a target by crawling URLs, directories, Burp/ZAP/HAR files, or waymore results.

command line

  • --readable-only — If passed, only human-readable text will be extracted from HTML responses/files using BeautifulSoup before searching for links. This excludes content from script, style, noscript, and template tags. v7.16 · Jan 2026 · command-line history

example

  • Hunt for outbound links on a blog without picking up the blog platform's own JS/CSS infrastructure links. xnLinkFinder -i https://target-blog.example.com -ro -d target-blog.example.com v7.16 · Jan 2026 · source
Response size limiting verified Allows setting a maximum response size to cap how much data is fetched per request. 5 releases · 3 other sources · first seen Mar 2025

Also counts toward: Command-line interface

release

  • New -mrs / --max-response-size argument sets the maximum response size in MB (default: 100 MB); responses exceeding this limit are skipped. v7.18 · Jan 2026 · source · release history
  • HTTP requests now use streaming to inspect Content-Length and Content-Type headers before downloading, automatically skipping large or binary-content responses (e.g., .pth, .bin, .exe, archives). v7.18 · Jan 2026 · source · release history
  • Supports both waymore_index.txt (waymore v6.0+) and legacy index.txt (pre-v6.0) index file formats in Waymore mode. v6.13 · Mar 2025 · source · release history
  • Extracts links from the waymore index file even when -d/--depth is set to 0 in Waymore mode. v6.13 · Mar 2025 · source · release history
  • Adds auto-detection for -i/--input files: if the first line starts with // or http, the file is processed as a URL list; otherwise its content is searched for links (Burp/Zap/Caido files remain handled as before). v6.9 · Mar 2025 · source · release history

command line

example

  • Cap bandwidth consumption during a large crawl by skipping any response over 10 MB — useful when targeting hosts that serve large binary assets. xnLinkFinder -i https://example.com -mrs 10 v7.18 · Jan 2026 · source
  • Run Waymore mode with depth 0 to extract links only from the waymore index file without recursing into subdirectories. xnLinkFinder -i <waymore_output_dir> -d 0 v6.13 · Mar 2025 · source
Heap snapshot link discovery verified suggested Optionally takes a heap snapshot of visited URLs using Playwright to extract dynamically generated links from browser memory that static analysis would miss. 5 releases · 2 other sources · first seen May 2024

Suggested capability: Attack surface inventory. This is our guess, not confirmed.

release

  • Adds --heap argument to capture browser heap snapshots using Playwright and extract links from in-memory strings, surfacing dynamically generated URLs that static analysis misses. v7.12 · Jan 2026 · source · release history
  • When respParamInputField is enabled in config.yml, parameter names are now extracted from <select> and <button> HTML fields in addition to <input> and <textarea>. v7.0 · Sep 2025 · source · release history
  • Extends respParamInputField response scanning to JavaScript content types, catching parameters built dynamically in JS code. v6.14 · Apr 2025 · source · release history
  • Expands respParamInputField extraction to include HTML textarea fields in addition to input fields. v6.14 · Apr 2025 · source · release history
  • Add same functionality as GAP Burp extension to extract parameter names from nested objects too. v6.2 · May 2024 · source · release history

command line

  • --heap — Whether to take a heap snapshot of visited URLs and extract links from browser memory. This will take longer but could discover dynamically generated links that standard static analysis might miss (Requires Playwright to be installed). v7.12 · Jan 2026 · command-line history

example

  • Discover dynamically generated links on a target that would be invisible to static scraping — useful for SPAs or apps that build URLs at runtime. python xnLinkFinder.py -i https://example.com --heap v7.12 · Jan 2026 · source
Robust crawling shipped Manages network reliability and performance through retries, rate limiting, and large response chunking. 3 releases · 2 other sources · first seen Sep 2025

release

  • Adds automatic content chunking for responses over 50KB, splitting into overlapping 40KB chunks with 5KB overlap to ensure complete link discovery without regex timeouts. v7.5 · Dec 2025 · source · release history
  • New -r/--retries argument lets you specify up to 5 automatic retries on timeout, connection error, or HTTP 429/500/502/503/504 responses. v7.1 · Oct 2025 · source · release history
  • New -rl/--rate-limit flag sets a maximum requests-per-second cap to respect bug bounty scope rate limits. v7.0 · Sep 2025 · source · release history

example

  • Scrape a target that rate-limits aggressively by retrying up to 5 times on 429 or transient 5xx errors before giving up. xnLinkFinder -i https://target.example.com -r 5 v7.1 · Oct 2025 · source
  • Crawl a target while staying within a bug bounty program's stated rate limit to avoid being blocked or violating scope rules. python3 xnLinkFinder.py -i https://target.example.com -rl 5 v7.0 · Sep 2025 · source
Enhanced input handling shipped Supports HAR files, proxy request data, and auto-detection of domain-formatted input sources. 3 releases · 1 other source · first seen Oct 2025

Shared capability: Attack surface inventory

Also counts toward: Command-line interface

release

  • Adds link and parameter extraction from proxy Request data in addition to Responses when a proxy file is passed as input. v7.7 · Dec 2025 · source · release history
  • Supports HAR (HTTP Archive) files as input via -i, extracting links and parameters from both requests and responses. v7.8 · Dec 2025 · source · release history
  • Adds is_domain_format() function to detect domain/subdomain-formatted lines (e.g., example.com, sub.example.com, example.co.uk), enabling input files and STDIN starting with bare domains to be correctly identified and processed as URL files rather than content files. v7.3 · Oct 2025 · source · release history

example

  • Extract links and parameters from a recorded browser session exported as a HAR file — useful for mapping attack surface from authenticated app traffic. xnLinkFinder -i session.har v7.8 · Dec 2025 · source
Performance optimizations shipped Improves performance through persistent requests sessions, HTTP Keep-Alive, and lazy-loading of heavy imports. 3 releases · first seen Jan 2026

release

  • Faster startup via lazy-loading of heavy imports (playwright, tldextract, inflect) and deferred PDF-related checks — each loaded only when the relevant feature is actually used. v7.18 · Jan 2026 · source · release history
  • Adds init_worker function to initialize a persistent requests.Session in each worker process under multiprocessing, improving throughput in parallel crawls. v7.13 · Jan 2026 · source · release history
  • Implements HTTP Keep-Alive by reusing requests.Session objects across requests, reducing TCP/TLS handshake overhead when crawling multiple URLs on the same host. v7.13 · Jan 2026 · source · release history
PDF link extraction shipped Extracts links and parameters from PDF files by converting content to text using pdftotext, pypdf, or OCR fallback. 3 releases · first seen Jan 2026

release

  • Supports PDF link extraction when a directory or a single .pdf file is passed directly as input. v7.15 · Jan 2026 · source · release history
  • Adds OCR fallback using ocrmypdf to extract links from scanned or image-only PDFs when pdftotext and pypdf yield no text. v7.15 · Jan 2026 · source · release history
  • Extracts links and parameters from PDF files by converting .pdf URL responses to text using pdftotext (if installed) or the pypdf Python library as a fallback. v7.14 · Jan 2026 · source · release history
Custom User-Agent support shipped Allows users to specify a custom User-Agent string to override the default for specific targeting or evasion requirements. 2 releases · 1 other source · first seen May 2024

Also counts toward: Command-line interface

release

  • Excludes any discovered links that begin with a - character. v6.7 · Feb 2025 · source · release history
  • Adds -uc/--user-agent-custom CLI argument to specify a single custom User Agent string that overrides the default -u/--user-agent argument v6.1 · May 2024 · source · release history

example

  • Override the tool's default User-Agent with a custom string for specific target identification requirements. xnLinkFinder -uc 'CustomBot/1.0' https://example.com v6.1 · May 2024 · source
Secret detection in responses verified Identifies and outputs secrets found in HTTP responses to a file or stdout, with support for appending and de-duplication. 1 release · 1 other source · first seen Jan 2026

Also counts toward: Command-line interface

release

  • Detects AWS Keys (AKIA...), GitHub Tokens (ghp_, gho_, ghu_, ghs_, github_pat_), Google API Keys (AIza...), JWTs (eyJ...), OAuth/Bearer Tokens, Private Keys (RSA, DSA, EC, OpenSSH, PGP), Slack Webhooks, Stripe Keys (sk_live_, rk_live_), database connection strings (MongoDB, PostgreSQL, MySQL),… v8.0 · Jan 2026 · source · release history

command line

  • --output-secrets — The file to save any secrets found in responses to, including path if necessary (default: No secrets output). If set to "cli" then output is only written to STDOUT. If the file already exist it will just be appended to (and de-duplicated) unless option -ow is passed. v8.0 · Jan 2026 · command-line history
Secret detection output formats shipped Allows writing discovered secrets to a JSON file grouped by type and value, alongside existing stdout/file append modes. 1 release · 1 other source · first seen Jan 2026

Also counts toward: JSON data export

release

  • New -os / --output-secrets argument writes discovered secrets to a JSON file, grouped by type and value with source URLs and counts. v8.0 · Jan 2026 · source · release history

example

  • Crawl a target and dump all detected secrets (AWS keys, JWTs, Stripe keys, etc.) to a JSON file for triage alongside your link output. python3 xnLinkFinder.py -i https://example.com -o links.txt -os secrets.json v8.0 · Jan 2026 · source
Advanced input intelligence shipped Intelligent handling of URLs, domains, and content files with wordlist pluralization. 1 release · first seen Dec 2025

release

  • Replaces rule-based plural handling with the inflect library, correctly generating irregular plurals (child→children, person→people), -f/-fe words (knife→knives, leaf→leaves), and Latin/Greek plurals (analysis→analyses, criterion→criteria) in wordlist output. v7.9 · Dec 2025 · source · release history
S3 bucket extraction shipped suggested Extracts potential links from S3 bucket file listings by parsing Key tags. 1 release · first seen Apr 2025

Suggested capability: Attack surface inventory. This is our guess, not confirmed.

release

  • Extracts potential links from S3 bucket file listings where file names appear in <Key></Key> XML tags. v6.15 · Apr 2025 · source · release history

Lines in monospace are the tool's own words: help text parsed from its source, or an endpoint from its API document. Under release, a line is our summary of a dated release. Under docs, it is quoted from the tool's own documentation or website. Each links back to the source it came from.

Score card

  1. Shipping velocity releases a month, last 12 months
  2. Documentation quality release-notes rubric, 0–100
  3. Breaking-change discipline how rarely a release breaks users, and notice given
  4. Maintenance risk quiet time against its own cadence, maintainers
  5. Innovation & surface new capabilities, API and MCP surface
  6. Community health
  7. Contributor trend distinct committers, this year against last
  8. Maintainer concentration bus factor now against a year ago
  9. Issue backlog trend issues closed per issue opened, 12 months
  10. Responsiveness median time to a maintainer’s first reply

Nine scores for xnLinkFinder, each built from the releases, notes and API history this site tracks — and, on Researcher and Business, where it stands among every measured tool in its category and how that has moved.

Score cards are part of every paid plan.

See plans →

Each score is 0–100 on a published rubric, derived from data this site already shows. A dimension we cannot measure says so — it is never scored 0 and never enters a rank.

How this is scored
  • Shipping velocity — releases a month over the last 12 months, on a log scale where 16 a month scores 100. Needs 3 releases in the window.
  • Documentation quality — the release-notes rubric published on the analytics page, unchanged.
  • Breaking-change discipline — the share of releases carrying a breaking change (none scores 100, half or more scores 0). Only projects that label breaking changes are measured: a clean record cannot be told from an unlabelled one.
  • Maintenance risk — quiet time measured against the tool's own release cadence (quiet longer than 90 days and three typical gaps scores 0), plus the number of active maintainers and whether contributors are growing, where known. Higher is lower risk.
  • Innovation & surface — new capabilities in the feature ledger this year, API and MCP operations added, and the share of commits that are features: the mean of whichever we hold.
  • Community health (open-source tools only) — each is a direction, not a size: contributors this year against last, the bus factor now against a year ago, and issues closed per issue opened, where steady scores 50, doubled 100 and halved 0; plus the median time to a maintainer's first reply (an hour scores about 100, a month or more 0). A commercial card has no repository and carries none of the four.
  • Documented delivery (commercial tools) — when a vendor's documented new capabilities have slowed against its own baseline, that counts against the overall standing as heavily as two low dimensions. Steady delivery, or too little history to judge, leaves the standing alone; it is never a sixth score.
  • Open-source tools are scored on repository signals; commercial tools on their published changelog. Ranks compare tools within one category and one profile and need at least five measured peers; the overall standing needs three ranked dimensions. Best-in-breed or consolidator is a shape, not a quality, and is never scored.

Release-note detail over time

See how much detail xnLinkFinder puts in its release notes, quarter by quarter, and compare it with tracked tools in the same category. This history uses up to ten retained, reviewed notes per tool; sparse or blank older quarters may reflect that limit.

Checking release-note history…

Explore the full chart →

Releases

25 entries

  1. January 20268
  2. December 20254
  3. October 20252
  4. September 20252
  5. April 20252
  6. March 20252
  7. February 20253
  8. May 20242

    25 entries

    Project health

    Issue, contributor and maintainer activity in xnl-h4ck3r/xnLinkFinder, 2023-12 – 2026-11, as of 2026-11-03. Twelve-month figures first; the trend lines run the whole window.

    1. Contributors 1 −1 vs prior 12 months
    2. Maintainers 1 +0 joined · −0 left, last 12 months
    3. Bus factor 1 committers behind half the commits
    4. Community-filed 100% of issues opened, last 12 months
    5. Median time to close not measured first maintainer reply 15 hours
    6. Open backlog 3 of 36 issues ever filed
    1. Issues opened / month 0 · 0 communitymaintainers
    2. Open backlog 3
    3. Contributors / month 0
    4. Commits / month 0
    5. Stars 1,594
    Issue themes, last 12 months
    • other 100%

    Counts from the project's public repository and git history; no individuals are identified. Maintainers are the committers covering 80% of the last year's commits. how we measure this

    Libraries its release ships

    What its latest release locks, checked against known advisories.

    None of its release's images build from a lockfile we can read.

    Add the badge to your README

    Maintain this project? The badge links readers straight to this page, so they can follow every release here.

    Tracked by Cyber Toolchain Choose a badge style and copy the code →
    browse all tools → score card for your toolchain →