Skip to main content

cloud-cdn-detect: passive host ID

Identifies the cloud, CDN, or host behind a site or API using only passive curl, DNS, whois, and TLS clues, then reports evidence with confidence.

Source facts

Repository
armaniacs/cloud-cdn-detect
Last source activity
November 6, 2026 at 02:15
Detected SKILL.md language
English
Stars
0
Forks
0

Examples

Documented 2026-11-04 field example (target withheld): service on AWS S3+CloudFront / API on AWS Tokyo; marketing site on Xserver—confidence high.

Uses

Use for “where is this hosted?” questions when you need an outside estimate with sources. Prefer main site and API over marketing domains, which often differ.

Prerequisites

curl, dig, whois, and openssl available; network access to the target and public registries. Signature table: references/provider-signatures.md.

How to use

Decompose apex/www, app, API, CDN, and marketing hosts → collect headers, DNS, whois/ASN, optional TLS → match provider-signatures.md → cross-check public statements if needed → deliver conclusion, evidence table, caveats, and high/medium/low confidence (high only when independent signatures agree).

Limitations

Passive only: no port scans, directory discovery, vuln probing, or high-volume requests without explicit permission. CDN edge is not the origin. PaaS whois may show a cloud without meaning direct use. Missing signatures are not proof of absence. Conclusions are technical estimates, not official provider statements. Observation traffic leaves your machine to the target and public whois/ASN services.

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

Showing SKILL.md

SKILL.md
Source instructions · Read-only preview
name
cloud-cdn-detect
description
Identify which cloud, CDN, or hosting provider runs behind a website, API, or domain using passive observation only (curl, dig, whois, TLS certificates, public web info). Use for any request like "Where is this service hosted?", "Which cloud does this run on?", "What CDN does this site use?", "Is this AWS, Cloudflare, Sakura, or Xserver?", 「このサービス、 どこで動いてる?」, 「インフラどこのクラウド?」. Reports separate observed facts from inference and include an evidence table and a confidence level. Never performs active scanning (port scans, vulnerability probing, or high-volume requests).
# cloud-cdn-detect — Identifying cloud / CDN / hosting providers (passive observation) Identify the cloud provider, CDN, or hosting company behind a target web service, API, or domain using only passive observation from the outside, and report the findings with evidence and confidence levels. Use `references/provider-signatures.md` as the signature lookup table. ## Ground rules 1. **Passive observation only.** The only things allowed without permission: - Ordinary requests via `curl` (HEAD, a few GETs if needed, following redirects with `-L`) - `dig` / `whois` / `openssl s_client` (TLS certificate inspection) - Searching and reading public web information 2. **Forbidden**: port scanning, directory discovery, requests that exploit vulnerabilities, high volumes of requests in a short time. Only with explicit permission from the target, and only within the instructed scope. 3. **Separate observation from inference.** Facts (raw header / DNS / whois output) and interpretations ("concluded CloudFront") must correspond in the report; never state conclusions without evidence. 4. Always note that conclusions are technical estimates, not official statements by the provider. ## Evidence hierarchy 1. **whois / ASN** — registered owner of the IP. Nearly conclusive 2. **HTTP headers / CNAME / TLS certificates** — implementation-derived signatures. Strong but can be rewritten or stripped 3. Provider-published IP ranges (`https://ip-ranges.amazonaws.com/` etc.) 4. Public statements on the web (official blogs, case studies, job postings) 5. Third-party databases (Wappalyzer / BuiltWith / Netcraft / bgp.he.net) — indicative only Treat confidence as "high" only when multiple independent signatures agree. ## Workflow ### 1. Decompose the target Distinguish the main site (apex / www), app (app.), API (api.), login, static assets (cdn / assets / static / img), status page, and marketing site (often on a separate domain). When asked about "the service's infrastructure", prioritize the main site and API, and remember the marketing site may be on different infrastructure. ### 2. Observe HTTP headers ```bash curl -sI https://<domain> # HEAD curl -sIL https://<domain> # follow redirects ``` - Headers to check: `server`, `via`, `x-amz-*`, `x-cache`, `x-served-by`, `x-vercel-id`, `cf-*`, `x-azure-ref`, `x-goog-*`, `x-nf-request-id`, `x-shopid`, `x-wix-request-id`, `server-timing` - Some configurations return errors for HEAD (e.g. `x-cache: Error from cloudfront`). Don't jump to conclusions; try GET or another path once - `server-timing` can leak the PaaS backend (`aws-nrt` etc.) ### 3. Resolve DNS ```bash dig +short <host> # A / AAAA dig +short <host> CNAME ``` - Candidates: apex, www, app, api, login, admin, status, cdn, assets, static, img - Root domains can hide CNAMEs behind ALIAS / direct A records (verified example: CloudFront IPs set directly as A records) ### 4. whois (IP ownership) ```bash whois <ip> | grep -iE "orgname|netname|descr|owner" ``` - macOS `whois` follows referrals across registries automatically. Don't confuse ARIN referral records (`OrgName: Asia Pacific Network Information Centre` etc.) with actual data - `owner` can hit ARIN comment lines ("correct owner of the IP address") — skip them ### 5. ASN (Team Cymru) ```bash whois -h whois.cymru.com " -v <ip>" # IP → AS (verbose, includes BGP prefix and registry) whois -h whois.cymru.com AS<number> # AS → organization ``` Comma-separated multiple lookups and piped bulk queries do not work with macOS `whois`. Run them one at a time. ### 6. TLS certificate (optional) ```bash echo | openssl s_client -connect <host>:443 -servername <host> 2>/dev/null \ | openssl x509 -noout -subject -issuer ``` - SAN can contain the CDN provider's domain (`*.cloudfront.net` etc.) - The issuer is a clue too: `Amazon RSA 2048 M01` (AWS ACM), Google Trust Services, Let's Encrypt, etc. ### 7. Match signatures Compare against `references/provider-signatures.md`. **When a signature not in the table appears, verify its origin via web search before appending it to that file** (this skill is designed to grow with every observation). Never append a signature with an unconfirmed origin, and never record the service you observed it on — append the signature and its technical source (official documentation etc.) only, so third-party target names stay out of this repository. ### 8. Cross-check on the web - Provider side: case studies / press releases from AWS / Google Cloud / Azure / Cloudflare etc. - Operator side: official blogs, engineering blogs (Zenn / Qiita / Hatena), engineer job postings - Third party: Wappalyzer, BuiltWith, Netcraft, bgp.he.net - Example queries: `"<domain>" AWS`, `"<company>" case study cloud`, `"<company>" engineer hiring AWS`, `"<社名>" 導入事例 クラウド` ### 9. Report ```markdown ## Conclusion <domain> is estimated to run on <provider> (confidence: high/medium/low) ## Evidence | Observation | Result | Suggests | |---|---|---| | HTTP header | x-amz-cf-id: … | AWS CloudFront | | DNS | A 54.239.163.x | CloudFront edge | | whois | OrgName: Amazon Technologies Inc. | AWS | ## Caveats - … (CDN confirmed but origin unidentified, marketing site on a different provider, etc.) ``` **Confidence definitions** - **High**: multiple independent signatures agree — whois/ASN plus headers/CNAME etc., no contradictions - **Medium**: signatures agree but come from a single source, or public confirmation is missing or outdated - **Low**: weak clues, contradictions, or limited observation scope ## Pitfalls 1. **CDN ≠ origin**: the origin server behind CloudFront / Cloudflare is essentially invisible from outside. The observable fact ends at "uses CloudFront as its CDN" 2. **Marketing sites are separate**: even under the same operator, corporate/marketing sites and the service itself often run on different infrastructure 3. **PaaS sits on top of a cloud**: whois for Vercel / Netlify / Heroku edge IPs returns Amazon etc. That does not mean "uses AWS directly". Prefer CNAME, headers, and `server-timing` 4. **Vanity CNAMEs**: `cdn.example.com` → `dxxx.cloudfront.net` — the company's own domain pointing at a CDN 5. **Multi-CDN**: combinations of multiple CDNs and GSLBs exist. Don't generalize from one or two observations 6. **SaaS is a separate category**: Zendesk / statuspage.io / Stripe / Google speech recognition etc. are reported separately as "external SaaS in use" 7. **Overlapping IP ranges**: whois (netname / descr / OrgName) is authoritative for IP ownership. Never assert from guesswork 8. **Absence of a signature is not evidence of absence**: headers can be removed by reverse proxies and security products 9. **Edge IPs change**: geo-distributed CDN IPs change with each request. Observe multiple times to see the trend 10. **Big players use their own signatures**: Google (`server: gws`), Apple (`server: Apple`) return their own names. Whether they combine downstream CDNs may be unreadable from headers ## Worked example (real observation, target withheld, 2026-11-04) Field observation of a Japanese SaaS, 2026-11-04 (service name, domains, and exact IPs withheld; observation values unchanged): | Target | Observation | Conclusion | |---|---|---| | Service A — main site (www / apex) | `server: AmazonS3` + `x-amz-cf-id` + `x-amz-cf-pop: KIX56-P4` + `via: 1.1 <hash>.cloudfront.net (CloudFront)` + A 54.239.163.x (no CNAME, direct A record) | S3 + CloudFront | | Service A — API (`api.<domain>`) | A 35.73.152.x, whois `OrgName: Amazon Technologies Inc.` / `NetName: AT-88-Z`, AS16509 (AMAZON-02) | AWS Tokyo region | | Service A — marketing site (separate domain) | netname `XSCLD` (Xserver Networks Inc., Osaka), AS131965 | Xserver | → Conclusion: the service itself runs on AWS, the marketing site on Xserver (confidence: high). A typical case of "the marketing site is on separate infrastructure".
View on GitHub