Referência de Programador
Localizador de Subdomínio Documentação da API
Localizador de Subdomínio Documentação da API: Descubra subdomínios usando logs de Certificate Transparency (CT). Use prefer_cache=1 para consultar resultados em cache: falhas frias retornam HTTP 202, enfileiram uma atualização em segundo plano e não consomem créditos.
Localizador de Subdomínio
Descubra subdomínios usando logs de Certificate Transparency (CT). Use prefer_cache=1 para consultar resultados em cache: falhas frias retornam HTTP 202, enfileiram uma atualização em segundo plano e não consomem créditos.
GET
/v1/subdomains
Parâmetros de Consulta
| Parâmetro | Tipo | Descrição |
|---|---|---|
| domain obrigatório | string | Domínio raiz para encontrar subdomínios (ex: "github.com") |
| prefer_cache opcional | boolean | Servir apenas resultados em cache. Se não houver cache novo nem antigo, a API retorna 202, enfileira uma atualização em segundo plano e cobra 0 créditos. |
| sources opcional | string | Fontes de dados separadas por vírgulas. Atualmente apenas ct (Certificate Transparency) é aceito. |
| verify opcional | boolean | Verifique se cada subdomínio se resolve via DNS (mais lento, mas mais preciso). Padrão: false |
| limit opcional | number | Máximo de subdomínios a retornar. Padrão: 500, Máx: 2000 |
Casos de Utilização
- Mapeamento de superfície de ataque e auditorias de segurança
- Descobrir subdomínios de TI esquecidos ou ocultos
- Due diligence técnica pré-aquisição
- Análise competitiva de infraestrutura
- Reconhecimento de bug bounty
Campos de Resposta
| Campo | Descrição |
|---|---|
subdomains[].name | O nome de host do subdomínio descoberto |
subdomains[].source | Fonte de dados (ex: "ct") |
subdomains[].first_seen | Quando este subdomínio foi observado pela primeira vez |
subdomains[].verified | Se a resolução de DNS foi confirmada (se verify=true) |
subdomains[].dns_records | Registros DNS encontrados (se verify=true) |
summary.total_found | Total de subdomínios descobertos antes do limite |
summary.verified_count | Número de subdomínios verificados (ativos) |
Códigos de Estado HTTP
| Códigos de Estado HTTP | Descrição |
|---|---|
200 OK | Pedido bem-sucedido |
202 Aceito | Falha de cache de subdomínios em modo somente cache aceita para atualização em segundo plano. Nenhum crédito é cobrado; tente novamente após o intervalo Retry-After. |
400 Pedido inválido | Parâmetros inválidos |
402 Pagamento necessário | Não tens créditos suficientes para executar este pedido. |
503 Serviço indisponível | O serviço a montante está indisponível ou a limitar temporariamente. |
504 Tempo limite do gateway | A consulta ao serviço a montante expirou. |
Pedido de Exemplo
# Find subdomains (fast, from CT logs)
curl "https://domscan.net/v1/subdomains?domain=github.com&limit=100"
# Find and verify subdomains (slower, confirms DNS resolution)
curl "https://domscan.net/v1/subdomains?domain=github.com&verify=true&limit=50"
curl "https://domscan.net/v1/subdomains?domain=github.com&prefer_cache=1"
import requests
# Enumerate subdomains with verification
response = requests.get(
"https://domscan.net/v1/subdomains",
params={
"domain": "github.com",
"verify": "true",
"limit": 100
}
)
data = response.json()
print(f"Found {data['summary']['total_found']} subdomains")
print(f"Verified: {data['summary']['verified_count']}")
# Filter to only live subdomains
live_subs = [s for s in data['subdomains'] if s['verified']]
for sub in live_subs[:10]:
print(f" {sub['name']}")
const response = await fetch(
'https://domscan.net/v1/subdomains?' + new URLSearchParams({
domain: 'github.com',
verify: 'true',
limit: '100'
})
);
const data = await response.json();
console.log(`Found ${data.summary.total_found} subdomains`);
console.log(`Verified: ${data.summary.verified_count}`);
// List verified subdomains
data.subdomains
.filter(s => s.verified)
.forEach(s => console.log(` ${s.name}`));
Resposta de Exemplo
{
"domain": "github.com",
"subdomains": [
{
"name": "api.github.com",
"source": "ct",
"first_seen": "2024-01-15T00:00:00Z",
"verified": true,
"dns_records": ["A 140.82.112.5"]
},
{
"name": "gist.github.com",
"source": "ct",
"first_seen": "2024-02-01T00:00:00Z",
"verified": true,
"dns_records": ["CNAME github.github.io"]
},
{
"name": "education.github.com",
"source": "ct",
"first_seen": "2023-06-10T00:00:00Z",
"verified": true,
"dns_records": ["A 185.199.108.153"]
}
],
"summary": {
"total_found": 847,
"returned": 3,
"verified_count": 3,
"unverified_count": 0,
"sources_used": ["ct"]
},
"meta": {
"query_time_ms": 1250,
"cached": false
}
}
202 Aceito
{
"status": "pending",
"code": "CACHE_MISS_REFRESH_QUEUED",
"message": "Try again in a moment",
"domain": "github.com",
"retry_after": 30,
"credits_charged": 0,
"billing_status": "not_charged",
"request_id": "m8abc12-x9y8"
}