What a Tech-Stack Fingerprint Can and Cannot Tell You
Technology fingerprinting is one of the most tempting forms of technical OSINT.
A page returns a few headers, loads recognizable assets, exposes a generator tag, and suddenly a tool produces a list:
- Cloudflare;
- Next.js;
- WordPress;
- Vercel;
- React;
- nginx;
- Google Analytics.
The list looks precise.
The underlying evidence often is not.
A web fingerprint is best understood as a set of observed signals mapped to hypotheses about technology.
Some signals are explicit self-identification.
Some are vendor-specific edge artifacts.
Some are path conventions.
Some are probabilistic patterns.
Some are merely weak correlations.
The most important analytical question is therefore not:
What technology does this website use?
It is:
Which technologies are supported by which public signals, at which layer, with what confidence, and what alternative explanations remain?
That shift turns fingerprinting from a checklist into evidence analysis.
A website does not have one "stack"
The phrase tech stack sounds singular.
Modern websites are usually layered.
A useful model separates at least the following components.
Edge and CDN
The first infrastructure layer visible to the public may be:
- CDN;
- reverse proxy;
- web application firewall;
- managed edge platform;
- load balancer.
This layer can modify:
- headers;
- caching;
- TLS;
- redirects;
- compression;
- cookies;
- error pages.
If you detect Cloudflare, Fastly, Akamai or CloudFront, you have usually learned something useful about the delivery path.
You have not necessarily learned what runs behind it.
Hosting or deployment platform
A site may be deployed through a managed platform such as:
- Vercel;
- Netlify;
- a cloud hosting service;
- a container platform;
- a traditional hosting provider.
Platform signals can overlap with CDN signals because many modern hosting products also operate edge infrastructure.
Do not assume:
hosting platform detected = origin architecture fully identified.
Frontend framework
Public HTML and asset paths may reveal frameworks such as:
- Next.js;
- Nuxt;
- Astro;
- SvelteKit;
- React;
- Vue.
These signals describe the client-facing application layer.
They may tell you little about:
- databases;
- internal APIs;
- queues;
- authentication services;
- private microservices;
- server-side business logic.
CMS or commerce platform
Strong conventions can reveal systems such as:
- WordPress;
- Ghost;
- Shopify;
- Wix;
- Squarespace.
A CMS may generate the public page while other infrastructure handles:
- search;
- payments;
- forms;
- identity;
- analytics;
- media.
Again, the public surface is only one part of the architecture.
Analytics and third-party services
Scripts and network requests may reveal:
- analytics;
- advertising;
- consent management;
- error monitoring;
- customer support;
- payment systems;
- tag managers.
Those services describe integrations, not necessarily the site's core runtime.
Backend and origin
This is often the layer analysts most want to identify.
It is also the layer the public surface may hide most effectively.
A CDN, reverse proxy or server-rendering platform can prevent direct observation of:
- application runtime;
- database;
- operating system;
- origin IP;
- internal service topology.
A tech fingerprint should therefore distinguish:
what is directly observed
from:
what is inferred behind the public edge.
Build fingerprints from evidence, not labels
A good fingerprint record has at least four fields:
| Field | Question |
|---|---|
| Signal | What exactly was observed? |
| Source | Header, HTML, asset path, script, DNS, third-party scan? |
| Hypothesis | Which technology could explain it? |
| Confidence | How strongly does the signal support that hypothesis? |
Example:
| Signal | Source | Hypothesis | Confidence |
|---|---|---|---|
cf-ray header | HTTP response | Cloudflare in delivery path | High |
/_next/static/ assets | HTML | Next.js-generated frontend | High |
Server: nginx | HTTP response | nginx advertised by responding server layer | Medium |
react-dom string | page source | React may be present | Low |
x-cache header | HTTP response | an HTTP cache is involved | Low |
This format makes uncertainty visible.
That is far better than returning:
Stack: Cloudflare + Next.js + nginx + React
as though every item carried the same evidentiary weight.
Explicit self-identification is useful — but still bounded
Some technologies identify themselves directly.
One example is the HTML metadata name:
<meta name="generator" content="ExampleCMS 7.2">
The WHATWG HTML Standard defines generator as a metadata name whose value identifies one of the software packages used to generate the document.
That makes it a strong signal.
A page declaring:
<meta name="generator" content="WordPress 6.x">
supports the statement:
The document declares WordPress as software used to generate the page.
That is stronger than:
This organization runs WordPress everywhere.
The metadata may be:
- inserted by a template;
- cached;
- stale;
- intentionally modified;
- generated by one component in a larger system.
Explicit self-identification increases confidence.
It does not remove scope.
The Server header is implementation evidence, not a complete architecture map
HTTP defines the Server response header as information about software used by the server handling the request.
Example:
Server: nginx
This is useful evidence.
But modern delivery paths complicate interpretation.
The response observed by a public client may be produced or modified by:
- an edge network;
- reverse proxy;
- application gateway;
- managed hosting layer.
So the safe conclusion is:
The observed response advertised
Server: nginx.
A more ambitious claim:
The application's origin server definitely runs nginx version X.
needs more evidence.
RFC 9110 also recommends avoiding needlessly detailed Server values because fine-grained product information can expose implementation details.
This means absence is expected in many well-configured environments.
X-Powered-By is a hint, not a standard truth oracle
Some applications expose fields such as:
X-Powered-By: Express
or other implementation-specific headers.
These are useful when present.
But unlike standards-defined semantics such as Server, many framework-specific headers are conventions.
They can be:
- disabled;
- rewritten;
- injected by middleware;
- copied by proxies;
- spoofed.
Treat them as technology hints.
Do not make them the sole basis for exact attribution.
Vendor-specific edge headers can be strong layer-specific clues
Managed delivery platforms often produce recognizable response fields.
OSINT.dev's current Tech Stack Snapshot uses selected headers as clues for platforms such as:
- Cloudflare;
- Vercel;
- Amazon CloudFront;
- Fastly;
- Akamai.
These can be high-confidence edge or delivery-path indicators when several vendor-specific fields agree.
The analytical boundary is important.
If a response contains a Cloudflare-specific request identifier, the strong statement is:
Cloudflare is visible in the public response path.
The weaker statement is:
The website's backend runs on Cloudflare.
A CDN can sit in front of almost any backend.
Generic cache headers need lower confidence
Some signals are shared across technologies.
For example:
X-Cache
may appear in several caching or delivery systems.
Likewise:
X-Served-By
may be associated with particular caching architectures without uniquely identifying one implementation.
A fingerprinting system should therefore give generic headers lower weight than vendor-specific combinations.
This is a general rule:
The more technologies can generate the same signal, the less discriminating that signal is.
Asset paths can be highly diagnostic
Frameworks often generate recognizable static paths.
Examples include patterns such as:
/_next/static/
for Next.js, or:
/_nuxt/
for Nuxt.
CMS platforms may expose paths such as:
/wp-content/
or:
/wp-includes/
These are often strong signals because they are deeply connected to default build or content structures.
But they remain observable conventions, not cryptographic proofs.
A custom application could imitate a path.
A proxy could preserve old assets after a migration.
A site may contain remnants from a previous frontend.
So even a high-confidence path fingerprint should be phrased as:
The page exposes assets strongly consistent with Next.js.
rather than:
Every application component is Next.js.
Script strings are not all equally strong
A page can contain recognizable strings in:
- inline JavaScript;
- script URLs;
- bundle names;
- runtime markers;
- HTML attributes.
Some are distinctive.
Others are generic.
For example, a framework-generated bootstrapping structure may be highly diagnostic.
A string such as:
react-dom
is much weaker.
It might indicate:
- React;
- a dependency bundle;
- documentation mentioning React;
- stale source code;
- a package name inside a source map.
OSINT.dev deliberately assigns different confidence levels to different patterns.
That is the right analytical model.
Page source and rendered behavior are different evidence sets
A server-side fetch observes the response body returned over HTTP.
A real browser can additionally observe:
- JavaScript execution;
- dynamically inserted DOM;
- runtime network requests;
- client-side routing;
- browser storage;
- service workers.
These are not equivalent.
A static fingerprinting tool may miss a technology that becomes visible only after JavaScript runs.
Conversely, browser runtime behavior may involve third-party scripts that are not part of the core application stack.
Always record the collection method.
Absence is weak evidence
Suppose a fingerprinting tool finds no recognizable technology signals.
The dangerous conclusion is:
The technology is unknown or custom.
The better conclusion is:
No technology signal recognized by this collection method was observed.
There are many reasons for non-detection:
- identifying headers were removed;
- asset names were customized;
- the response was generated by an edge layer;
- the interesting code loads dynamically;
- the page is minimal;
- the response body was truncated;
- the detector does not know that technology;
- the requested route differs from the application route.
Fingerprinting has asymmetric evidence.
Presence of a distinctive signal can be informative.
Absence of that signal often says much less.
False positives happen
A false positive occurs when the signal exists but the inferred technology is wrong.
Examples:
Stale assets
A migration leaves:
/wp-content/
references on a page that no longer uses WordPress as its primary CMS.
Documentation or examples
A technical article includes:
/_next/static/
as literal text.
A naive regex detector mistakes that text for an application asset.
Proxies and copied headers
An intermediary exposes a header associated with a technology that is not the application origin.
Embedded third parties
A page loads a script from a Shopify or analytics domain even though the site itself is not built on that platform.
Deliberate mimicry
Paths and headers can be intentionally reproduced.
Fingerprinting is inference from patterns.
Patterns can collide.
False negatives happen too
A false negative occurs when the technology is present but the detector misses it.
Common causes include:
- headers stripped;
- custom asset paths;
- minification;
- bundling;
- proprietary frameworks;
- server-side rendering;
- JavaScript-only runtime detection;
- changing vendor conventions;
- body truncation;
- incomplete detector rules.
A detector with 50 rules cannot identify the entire modern web.
This should be reflected in the wording of the output.
Confidence belongs to the signal, not the brand name
A useful system can produce two observations for the same technology:
Next.js — high confidence
because:
/_next/static/
was observed.
and:
React — low confidence
because a generic bundle string appeared.
This does not mean Next.js is inherently more detectable than React.
It means the specific evidence observed in this run has different discriminating power.
Confidence should be attached to:
observation → inference
not permanently to:
technology name.
Do not infer vulnerability from technology alone
This is one of the most damaging fingerprinting mistakes.
Suppose you detect:
WordPress
or:
nginx
or:
Next.js
You have not established:
- vulnerable version;
- vulnerable configuration;
- exploitable endpoint;
- missing patch;
- insecure deployment.
Even an exact version string is not enough by itself.
Security depends on:
- actual deployed code;
- patch state;
- configuration;
- reachable functionality;
- mitigations;
- authentication;
- surrounding infrastructure.
Technology identification can guide research.
It is not a vulnerability finding.
Exact version attribution deserves skepticism
Analysts often want:
nginx 1.24.0
rather than:
nginx.
Exactness feels useful.
It is also fragile.
Version clues can come from:
- Server headers;
- generator tags;
- asset filenames;
- JavaScript comments;
- package metadata;
- network-service banners;
- third-party scan databases.
Each has different provenance.
A version string can be:
- stale;
- generic;
- hidden;
- backported;
- vendor-patched without changing upstream-style version semantics;
- intentionally removed.
Therefore distinguish:
observed version string
from:
confirmed vulnerable software version.
Those are not the same statement.
CDN detection and origin attribution must remain separate
Consider:
cf-ray: ...
server: cloudflare
This is strong evidence of Cloudflare on the public response path.
Now suppose the analyst concludes:
The origin is Cloudflare.
That statement is ambiguous.
Cloudflare may be:
- proxying another host;
- serving an edge application;
- terminating TLS;
- caching content;
- shielding the origin.
The actual origin could be elsewhere.
To reason about the origin, you may need other evidence such as:
- historical DNS;
- certificate history;
- direct organizational documentation;
- old scans;
- architecture disclosures.
Even then, be careful not to convert historical origin clues into instructions for bypassing protective infrastructure.
The research objective matters.
Historical fingerprints can reveal migrations
Technology fingerprinting becomes much more powerful when time is added.
Suppose:
April
Server: nginx
/wp-content/
August
x-vercel-id: ...
/_next/static/
Combined with:
- a changed canonical hostname;
- new DNS;
- new archived page structure;
this pattern can support a migration hypothesis.
A calibrated conclusion might be:
Public technical signals are consistent with a migration from a WordPress-oriented delivery stack to a Next.js/Vercel-oriented frontend.
That is more defensible than:
The company replaced its entire backend with Next.js.
The evidence is strongest at the public presentation layer.
Use independent observation channels
One fingerprinting engine should not become the source of truth.
Useful corroboration channels can include:
BuiltWith
BuiltWith provides current and historical technology information for websites.
That can be useful for:
- checking whether another detection source observed the same technology;
- comparing historical technology changes;
- seeing broader categories of web integrations.
Treat the result as another dataset with its own collection methodology.
Censys
Censys records internet-facing host and service observations, including software-related fields.
This can help correlate web-layer findings with:
- host services;
- software observations;
- certificates;
- network exposure.
A Censys service observation and a page-source fingerprint are different kinds of evidence.
Agreement between them can increase confidence.
urlscan.io
urlscan results include metadata about scans as well as requests, responses, domains, IPs, URLs and other derived fields.
This can provide a rich historical or third-party view of how a website behaved during a scan.
It also helps reveal technologies visible through network requests that a simple static HTML fetch may miss.
Wayback Machine
Archived pages can show:
- old generator tags;
- old asset paths;
- old branding;
- previous page structures.
Archive coverage is incomplete.
Absence from an archive does not prove absence from the live site at that time.
SecurityTrails
Historical DNS can help place technology observations in infrastructure context.
A change in hosting or DNS can corroborate a frontend or platform migration.
DNS history does not itself identify the application framework.
Agreement is strongest when the sources are genuinely independent
Suppose three tools all report Next.js.
That sounds like three confirmations.
But perhaps all three rely on the same signal:
/_next/static/
Then you do not really have three independent pieces of evidence.
You have one observation reproduced by three detectors.
This matters.
A stronger combination is:
- current HTML exposes Next.js asset structure;
- a third-party historical scan observed Next.js-related requests;
- deployment headers independently suggest a platform commonly associated with the current architecture;
- an archived previous version lacked those signals.
The confidence increases because the evidence comes from different channels and times.
A worked example
Suppose OSINT.dev's Tech Stack Snapshot returns:
Vercel — high confidence
Next.js — high confidence
React — low confidence
Server — medium confidence: Vercel
Step 1 — record the direct observations
You might have:
x-vercel-id: ...
/_next/static/...
react-dom...
Server: Vercel
Do not begin with the technology labels.
Begin with those raw observations.
Step 2 — map them to layers
x-vercel-id
supports:
Vercel visible in the delivery/deployment path.
/_next/static/
supports:
Next.js-generated frontend assets.
react-dom
supports only a weaker React-related hypothesis.
Server: Vercel
is additional self-identification from the response layer.
Step 3 — ask whether the signals are independent
The Vercel headers may represent one evidence family.
The Next.js asset path is another.
The React string may be downstream of Next.js rather than independent evidence.
Step 4 — corroborate externally
BuiltWith may report current or historical technology information.
urlscan may show:
- page requests;
- script paths;
- domains;
- historical scans.
Wayback may show an older frontend.
SecurityTrails may show a hosting-related DNS change.
Step 5 — write a calibrated conclusion
Good:
The current public page exposes high-confidence signals consistent with a Next.js frontend delivered through Vercel. A weaker React-related signal is also present. These observations describe the public delivery and frontend layers and do not identify the private backend or database.
Poor:
The website runs React, Next.js and Vercel, so its backend is Node.js and its database is probably PostgreSQL.
The second conclusion contains unsupported architectural invention.
Fingerprinting should help generate questions
The best use of a fingerprint is often not the answer itself.
A detected technology should generate follow-up questions.
If you detect a CDN:
Did the site previously use another delivery provider?
If you detect a CMS:
Is this consistent across the main site and subdomains?
If you detect a framework change:
Does archival evidence show when the migration occurred?
If you detect a SaaS integration:
Is it used for core infrastructure or only one embedded function?
If you detect an explicit version:
Is that value corroborated by another source, or merely self-advertised?
Fingerprinting is strongest as a hypothesis engine.
A practical evidence hierarchy
A simple ranking can improve consistency.
Stronger signals
Examples:
- explicit generator metadata;
- highly distinctive framework asset structure;
- multiple vendor-specific response headers;
- network-service observations from an independent source;
- repeated observations across time.
These can justify relatively high confidence.
Medium signals
Examples:
- generic Server product token;
- X-Powered-By;
- one moderately distinctive script path;
- a single third-party detector result.
These support hypotheses that should still be corroborated.
Weak signals
Examples:
- generic JavaScript package string;
- shared cache header;
- CSS class conventions;
- vague HTML comments;
- technology names appearing in page text.
These are useful leads, not conclusions.
No hierarchy is universal.
The exact strength depends on how unique and reproducible the signal is.
What the current OSINT.dev Tech Stack Snapshot actually does
OSINT.dev's native Tech Stack Snapshot is intentionally conservative.
It does not try to identify every technology on the internet.
For a submitted public HTTP or HTTPS URL, the current runner:
- validates that the URL targets public internet infrastructure;
- performs one server-side
GET; - does not automatically follow HTTP redirects;
- limits the response body to 512 KiB;
- records the response status and requested URL;
- inspects selected response headers;
- parses a standard
meta name="generator"value when present; - scans the returned body for a small set of known framework and CMS patterns;
- deduplicates repeated technology signals;
- assigns each signal a
high,mediumorlowconfidence label.
Current header signals
The runner currently looks at signals including:
Server;X-Powered-By;- selected Cloudflare headers;
- selected Vercel headers;
- selected CloudFront headers;
- selected Fastly headers;
- selected Akamai headers;
- generic cache-oriented headers with lower confidence.
This is a deliberately small detector set.
Current page-source hints
The runner currently recognizes selected patterns associated with:
- Next.js;
- Nuxt;
- WordPress;
- Ghost;
- Shopify;
- Wix;
- Squarespace;
- Astro;
- SvelteKit;
- React;
- Vue.
Different patterns receive different confidence levels.
For example, a distinctive framework asset path can receive high confidence while a generic library string receives low confidence.
What the current runner does not do
It does not currently:
- execute JavaScript;
- run a browser;
- inspect the rendered DOM;
- analyze cookies as fingerprint rules;
- follow the full request waterfall;
- query DNS as part of the fingerprint;
- scan ports;
- probe private infrastructure;
- enumerate subdomains;
- identify databases;
- identify private APIs;
- discover origin servers behind a CDN;
- verify package versions;
- match CVEs;
- determine whether a detected technology is vulnerable;
- call BuiltWith, Censys, urlscan or other external fingerprinting services automatically.
If the body exceeds the safety cap, the result explicitly warns that some signals may have been missed.
That limitation is a feature.
The tool should prefer a small number of explainable observations over a large opaque list of speculative detections.
Read "no signals" correctly
When the OSINT.dev runner says:
No tech signals identified.
it means:
None of the currently implemented header, metadata or body patterns matched this response.
It does not mean:
- the site uses no recognizable technology;
- the stack is custom;
- the site is hiding something;
- the technology is impossible to identify with another method.
This is an important product contract.
Separate fingerprinting from vulnerability analysis
Technology detection and vulnerability analysis are different workflows.
Fingerprinting asks:
What public signals are consistent with this technology?
Vulnerability analysis asks:
Does a specific reachable component, version and configuration satisfy the conditions for a specific security issue?
Do not silently jump from the first workflow to the second.
If the investigation is ordinary OSINT, remain at the observation layer unless deeper testing is separately justified and authorized.
Common mistakes
Mistake 1 — Treating the detector output as ground truth
Every detection should be traceable to an observation.
Mistake 2 — Collapsing all architecture layers
CDN, hosting, frontend, CMS and backend are not the same thing.
Mistake 3 — Treating absence as evidence of absence
Stripped headers and custom builds create false negatives.
Mistake 4 — Treating a vendor header as origin proof
It usually tells you about the public response path.
Mistake 5 — Assuming exact versions are reliable
Version strings need provenance and corroboration.
Mistake 6 — Inferring vulnerability from a technology name
Technology identification is not a security finding.
Mistake 7 — Counting multiple tools as independent corroboration
If they use the same public signal, the evidence may not be independent.
Mistake 8 — Ignoring time
Technology stacks change during migrations and deployments.
Mistake 9 — Ignoring route differences
The marketing homepage may use a different stack from:
- application;
- documentation;
- login;
- API;
- customer portal.
Mistake 10 — Inventing the invisible backend
A public frontend fingerprint rarely proves database or internal-service architecture.
A repeatable fingerprinting workflow
Use this sequence.
Step 1 — Record the exact URL and time
Fingerprinting is route-specific and time-sensitive.
Step 2 — Capture raw observations
Before labels, save:
- relevant headers;
- generator metadata;
- distinctive asset paths;
- script hints.
Step 3 — Assign each observation to a layer
Classify:
- edge/CDN;
- hosting/platform;
- frontend;
- CMS;
- analytics/integration;
- server software;
- unknown.
Step 4 — Assign confidence
Ask:
- How distinctive is this signal?
- Can multiple technologies produce it?
- Is it explicit self-identification?
- Could an intermediary have generated it?
Step 5 — Look for contradictions
Example:
Server: nginx
x-vercel-id: ...
This is not necessarily contradictory.
It may reflect multiple layers.
Do not force the observations into a single-stack story.
Step 6 — Corroborate through another evidence channel
Depending on the question:
- BuiltWith;
- Censys;
- urlscan.io;
- Wayback Machine;
- SecurityTrails;
- official technical documentation.
Step 7 — Add history
Ask whether the same signals existed earlier.
Step 8 — Write the narrowest supported conclusion
Prefer:
The observed page is strongly consistent with a Next.js frontend, and Vercel is visible in the public delivery path.
over:
The company uses a full Vercel/Node/Postgres stack.
The first is evidence-based.
The second invents invisible components.
Related OSINT.dev tools
Tech Stack Snapshot
Primary native tool for a small, explainable fingerprint of one public HTTP response.
Its confidence labels are part of the finding and should not be discarded.
BuiltWith
Useful as an external source of current and historical technology observations for websites.
Compare its findings with the raw signals observed directly.
Censys
Useful for internet-facing host, service, certificate and software observations.
This can add a network/service layer that a page-source fingerprint does not provide.
urlscan.io
Useful for third-party web scans containing page metadata, requests, responses, domains, IPs and other scan artifacts.
It can reveal evidence not visible in one static fetch.
Wayback Machine
Useful for comparing historical page structure, generator metadata and asset conventions.
SecurityTrails
Useful for historical DNS context around infrastructure and hosting changes that may accompany a platform migration.
The core principle
A tech-stack fingerprint is not an inventory.
It is an argument.
The argument should be reconstructable:
I observed signal A and signal B. Those signals are strongly consistent with technology X at layer Y. Signal C provides weaker support. I did not observe evidence for the private backend. Independent source D partially corroborates the public-layer hypothesis.
That is reference-grade fingerprinting.
The objective is not to maximize the number of detected logos.
It is to maximize the explainability and defensibility of each technology claim.
When uncertainty is visible, fingerprints become more useful — not less.
References
Primary standards and official service documentation used in this guide:
-
RFC 9110 — HTTP Semantics (
Serverresponse field)
https://www.rfc-editor.org/rfc/rfc9110.html -
WHATWG HTML Standard —
meta name="generator"
https://html.spec.whatwg.org/multipage/semantics.html -
BuiltWith API — current and historical website technology information
https://api.builtwith.com/ -
Censys Documentation — software fields and internet-facing service observations
https://docs.censys.com/docs/ls-software -
urlscan.io Result API — scan metadata, requests, responses, domains, IPs and derived fields
https://docs.urlscan.io/pages/result-api-reference -
SecurityTrails API — historical DNS records
https://docs.securitytrails.com/reference/dns-history-by-record-type-old-1 -
Internet Archive — Wayback Machine
https://web.archive.org/
OSINT.dev · Published Apr 20, 2026 · Updated Aug 18, 2026. Canonical URL: https://osint.dev/articles/tech-stack-fingerprint-interpretation
Related articles.
Editorial pieces that share a tool context or type with this one.
Passive First: When Public Web Research Should Stay Narrow
A practical argument for staying narrow and passive as long as possible in public web research, before broader or more interaction-heavy methods start adding noise.
Hunchly vs ArchiveBox: Evidence Packaging vs Archive Ownership
Compare Hunchly and ArchiveBox as two different preservation operating models: investigator-centered evidence capture, hashing and reporting versus self-hosted, multi-format archive ownership and recurring URL preservation.
BuiltWith vs urlscan: Stack Hints vs Observed Page Behavior
Compare BuiltWith and urlscan as two different web-research evidence layers: structured current and historical technology profiling versus browser-observed requests, redirects, DOM and page behavior.
A Practical Method for Domain and Infrastructure Recon
A passive-first, layer-by-layer workflow for domain and infrastructure reconnaissance using DNS, certificate transparency, HTTP behavior, technology signals, historical context and broader internet observations without turning discovery into attribution.