Справочник разработчика

Поиск поддоменов

Изучите документацию API Поиск поддоменов, параметры запросов, поля ответов, примеры кода и обработку ошибок для интеграций DomScan.

Поиск поддоменов

Нет. Это пассивное покрытие с негарантированной полнотой. Внутренние имена и публичные хосты, отсутствующие в наборах данных источников, не появятся, а DNS-проверка не ищет дополнительные имена.

Используйте GET /v1/subdomains?domain=example.com&sources=ct. Значение ct выбирает совместимый конвейер, а в каждой записи указывается фактический источник свидетельства. Промахи в режиме только кэша возвращают 202, отказ всех источников возвращает 503. В обоих случаях кредиты возвращаются.

GET /v1/subdomains

Параметры запроса

ПараметрТипDescription
domain обязателен string Корневой домен для поиска поддоменов (например, "github.com")
prefer_cache опционально boolean token Возвращает только кэшированные результаты. Если нет свежего или устаревшего кэша, API возвращает 202, ставит фоновое обновление в очередь и возвращает кредиты запроса. Принимаются значения true, false, 1, 0, yes и no. По умолчанию: false.
sources опционально string Селектор совместимости. Принимается только ct. Он запускает пассивный конвейер обнаружения, но в каждом результате указывается поставщик свидетельства: crtsh, crtname, hackertarget, threatminer, wayback или certspotter. Старые записи кэша могут указывать ct.
verify опционально boolean token Проверяет DNS только для имён, уже выбранных для ответа. Проверка не обнаруживает дополнительные имена. Принимаются значения true, false, 1, 0, yes и no. По умолчанию: false.
include_wildcards опционально boolean token Возвращает свидетельства wildcard-сертификатов в отдельном массиве wildcards. Wildcard-записи не смешиваются с результатами для конкретных имён хостов. Принимаются значения true, false, 1, 0, yes и no. По умолчанию: false.
limit опционально integer Максимальное число записей конкретных имён хостов в ответе. Укажите целое число от 1 до 2000. По умолчанию: 500.

Сценарии использования

  • Отображение поверхности атаки и аудиты безопасности
  • Проверка возможных забытых или теневых IT-имён хостов
  • Техническая проверка перед приобретением
  • Конкурентный анализ инфраструктуры
  • Разведка программы поиска уязвимостей

Поля ответа

ПолеDescription
subdomains[].nameВозвращённое имя хоста. Apex может присутствовать, если его включает источник.
subdomains[].sourceПроверяйте публичные свидетельства об именах хостов с понятными метками источников
subdomains[].first_seenЗаписи на основе CT содержат самое раннее найденное значение certificate not-before. Записи из пассивных резервных источников могут возвращать null.
subdomains[].verifiedЗначение true только тогда, когда verify включён и DNS-разрешение возвращённого имени хоста успешно. В остальных случаях false.
subdomains[].dns_recordsЗаписи A и CNAME, полученные при необязательной проверке возвращённого имени хоста, или null. Это поле не добавляет имена в результат.
summary.total_foundОбщее число найденных записей конкретных имён хостов до применения лимита ответа, включая apex, если его включает источник.
summary.verified_countЧисло возвращённых имён хостов, разрешившихся во время необязательной DNS-проверки.

Коды статуса HTTP

Коды статуса HTTPDescription
200 OKЗапрос выполнен успешно
202 ПринятоПромах кэша поддоменов в режиме только кэша принят для фонового обновления. Кредиты не списываются; повторите запрос после задержки Retry-After.
400 Неверный запросНедопустимые параметры
402 Требуется оплатаНедостаточно кредитов для выполнения этого запроса.
503 Сервис недоступенВышестоящий сервис недоступен или временно ограничивает запросы.
504 Тайм-аут шлюзаВышестоящий запрос превысил время ожидания.

Пример запроса

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}`));

Пример ответа

{
  "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 Принято

{
  "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

Параметры тела запроса

Параметр Тип обязателен
domains string[] обязателен
verify boolean
По умолчанию false
опционально
include_wildcards boolean
По умолчанию false
опционально
limit integer
По умолчанию 500
опционально

Поля ответа

Поле Тип
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

Пример запроса

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
}'

Пример ответа

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

Используется сотрудниками известных компаний

VercelLLM PulseOLXCasa ModernaPipeCal.comBeehiivSnykTogglRemoteSprigDeel