Riferimento per sviluppatori

Strumento di ricerca sottodomini

Consulta la documentazione API di Strumento di ricerca sottodomini, i parametri delle richieste, i campi delle risposte, gli esempi di codice e la gestione degli errori per le integrazioni DomScan.

Strumento di ricerca sottodomini

Restituisce un insieme best effort di evidenze pubbliche sui nomi host. Il parametro sources=ct seleziona la pipeline di compatibilità, che interroga prima crt.sh e può ripiegare su HackerTarget, ThreatMiner, Wayback Machine e CertSpotter. DomScan non cerca nomi con la forza bruta e non esegue la scansione del sito target, quindi il risultato non è un inventario completo. I mancati risultati in modalità solo cache restituiscono HTTP 202, mentre il mancato funzionamento di tutte le fonti restituisce HTTP 503. I crediti vengono rimborsati in entrambi i casi.

GET /v1/subdomains

Parametri di query

ParametroTipoDescrizione
domain obbligatorio string Dominio radice per il quale trovare sottodomini (ad es. "github.com")
prefer_cache facoltativo boolean token Restituisce solo risultati nella cache. Se non esiste una cache recente o vecchia, l’API restituisce 202, accoda un aggiornamento in background e rimborsa i crediti della richiesta. Valori accettati: true, false, 1, 0, yes e no. Valore predefinito: false.
sources facoltativo string Selettore di compatibilità. È accettato solo ct. Questo valore avvia la pipeline di scoperta passiva, ma ogni risultato indica il provider che ha fornito l’evidenza: crtsh, hackertarget, threatminer, wayback o certspotter. Le vecchie voci nella cache possono indicare ct.
verify facoltativo boolean token Controlla tramite DNS solo i nomi già selezionati per la risposta. La verifica non scopre altri nomi. Valori accettati: true, false, 1, 0, yes e no. Valore predefinito: false.
include_wildcards facoltativo boolean token Restituisce le evidenze dei certificati wildcard in un array wildcards separato. Le wildcard non vengono mescolate con i risultati dei nomi host concreti. Valori accettati: true, false, 1, 0, yes e no. Valore predefinito: false.
limit facoltativo integer Numero massimo di voci di nomi host concreti da restituire. Inserisci un numero intero da 1 a 2000. Valore predefinito: 500.

Casi d'uso

  • Mappatura della superficie di attacco e controlli di sicurezza
  • Esamina possibili nomi host dimenticati o di shadow IT
  • Due diligence tecnica pre-acquisizione
  • Analisi competitiva dell'infrastruttura
  • Ricognizione bug bounty

Campi di risposta

CampoDescrizione
subdomains[].nameNome host restituito. Il dominio apex può apparire quando una fonte lo include.
subdomains[].sourceProvider che ha fornito l’evidenza. I valori possibili sono crtsh, hackertarget, threatminer, wayback, certspotter e ct per le vecchie voci nella cache.
subdomains[].first_seenPer le evidenze di crt.sh e CertSpotter, il primo valore not-before valido del certificato trovato per il nome host. Le fonti passive alternative restituiscono null perché non forniscono una data del certificato comparabile.
subdomains[].verifiedtrue solo quando verify è abilitato e la query DNS per il nome host restituito trova un record A o CNAME. In caso contrario, false.
subdomains[].dns_recordsRecord A o CNAME ottenuti dalla verifica facoltativa del nome host restituito, oppure null. Questo campo non aggiunge nomi al risultato.
summary.total_foundNumero totale di voci di nomi host concreti trovate prima del limite della risposta, incluso il dominio apex quando una fonte lo include.
summary.verified_countNumero di nomi host restituiti per i quali la verifica DNS facoltativa ha trovato un record A o CNAME.

Codici di stato HTTP

Codici di stato HTTPDescrizione
200 OKRichiesta riuscita
202 AccettatoMancato risultato cache-only per i sottodomini accettato per aggiornamento in background. Non vengono addebitati crediti; riprova dopo il ritardo Retry-After.
400 Richiesta non validaParametri non validi
402 Pagamento richiestoCrediti insufficienti per eseguire questa richiesta.
503 Servizio non disponibileIl servizio a monte non è disponibile o sta limitando temporaneamente le richieste.
504 Timeout del gatewayLa richiesta al servizio a monte è scaduta.

Richiesta di esempio

curl -H "X-API-Key: your-api-key" "https://domscan.net/v1/subdomains?domain=example.com&sources=ct&include_wildcards=yes&limit=100"

curl -H "X-API-Key: your-api-key" "https://domscan.net/v1/subdomains?domain=example.com&sources=ct&verify=yes&limit=50"

curl -H "X-API-Key: your-api-key" "https://domscan.net/v1/subdomains?domain=example.com&prefer_cache=1"
import requests

domscan = requests.Session()
domscan.headers.update({"X-API-Key": "your-api-key"})

response = domscan.get(
    "https://domscan.net/v1/subdomains",
    params={
        "domain": "example.com",
        "sources": "ct",
        "verify": "yes",
        "include_wildcards": "yes",
        "limit": 100
    }
)
data = response.json()

print(f"Returned {data['summary']['returned']} hostname entries")
print(f"Verified: {data['summary']['verified_count']}")

live_subs = [s for s in data['subdomains'] if s['verified']]
for sub in live_subs[:10]:
    print(f"  {sub['name']}")
const domscanFetch = (url, options = {}) =>
  fetch(url, {
    ...options,
    headers: { ...options.headers, "X-API-Key": "your-api-key" },
  });

const response = await domscanFetch(
  'https://domscan.net/v1/subdomains?' + new URLSearchParams({
    domain: 'example.com',
    sources: 'ct',
    verify: 'yes',
    include_wildcards: 'yes',
    limit: '100'
  })
);
const data = await response.json();

console.log(`Returned ${data.summary.returned} hostname entries`);
console.log(`Verified: ${data.summary.verified_count}`);

data.subdomains
  .filter(s => s.verified)
  .forEach(s => console.log(`  ${s.name}`));

Risposta di esempio

{
  "domain": "example.com",
  "subdomains": [
    {
      "name": "api.example.com",
      "source": "crtsh",
      "first_seen": "2025-01-15T00:00:00Z",
      "verified": true,
      "dns_records": {
        "A": ["192.0.2.10"],
        "CNAME": null
      }
    }
  ],
  "wildcards": [
    {
      "pattern": "*.example.com",
      "source": "crtsh",
      "first_seen": "2024-11-20T00:00:00Z"
    }
  ],
  "summary": {
    "total_found": 1,
    "returned": 1,
    "verified_count": 1,
    "unverified_count": 0,
    "sources_used": ["crtsh"],
    "apex_included": false,
    "wildcard_suppressed_count": 1,
    "wildcard_returned_count": 1
  },
  "intelligence_summary": {
    "data_sources": ["crtsh"],
    "source_count": 1,
    "cache_status": "live",
    "returned_count": 1,
    "total_found": 1,
    "truncated": false,
    "limit": 100,
    "verification_requested": true,
    "include_wildcards": true,
    "verified_count": 1,
    "verified_ratio": 1,
    "live_dns_record_count": 1,
    "apex_included": false,
    "wildcard_suppressed_count": 1,
    "wildcard_returned_count": 1,
    "first_seen_oldest": "2025-01-15T00:00:00Z",
    "first_seen_newest": "2025-01-15T00:00:00Z",
    "warning_count": 0
  },
  "meta": {
    "query_time_ms": 184,
    "cached": false
  }
}

202 Accettato

{
  "status": "pending",
  "code": "CACHE_MISS_REFRESH_QUEUED",
  "message": "Try again in a moment",
  "domain": "example.com",
  "retry_after": 30,
  "credits_charged": 0,
  "billing_status": "not_charged",
  "request_id": "m8abc12-x9y8"
}
POST /v1/subdomains/bulk

Parametri del corpo

Parametro Tipo obbligatorio
domains string[] obbligatorio
verify boolean facoltativo
include_wildcards boolean facoltativo
limit integer facoltativo

Campi di risposta

Campo Tipo
results[] unknown[]
meta object
meta.total integer
meta.succeeded integer
meta.failed integer
meta.max_items integer
meta.credits_per_item integer
meta.duration_ms integer

Richiesta di esempio

curl -X POST "https://domscan.net/v1/subdomains/bulk" \
  -H "Content-Type: application/json" \
  -H "X-API-Key: $DOMSCAN_API_KEY" \
  -d '{
  "domains": [
    "example.com",
    "cloudflare.com"
  ],
  "verify": false,
  "limit": 500
}'

Risposta di esempio

{
  "results": [
    null
  ],
  "meta": {
    "total": 1,
    "succeeded": 1,
    "failed": 1,
    "max_items": 10,
    "credits_per_item": 1,
    "duration_ms": 1
  }
}