開発者向けリファレンス
サブドメイン ファインダー APIドキュメント
サブドメイン ファインダー APIドキュメント: Certificate Transparency (CT) ログを使ってサブドメインを検出します。prefer_cache=1 を使うとキャッシュ結果をポーリングできます。コールドミスでは HTTP 202 を返し、バックグラウンド更新をキューに入れ、クレジットは消費しません。
サブドメイン ファインダー
Certificate Transparency (CT) ログを使ってサブドメインを検出します。prefer_cache=1 を使うとキャッシュ結果をポーリングできます。コールドミスでは HTTP 202 を返し、バックグラウンド更新をキューに入れ、クレジットは消費しません。
GET
/v1/subdomains
クエリパラメータ
| パラメータ | タイプ | 説明 |
|---|---|---|
| domain 必須 | string | サブドメインを検出するルート ドメイン(例:"github.com") |
| prefer_cache オプション | boolean | キャッシュ済みの結果だけを返します。新しいキャッシュも古いキャッシュもない場合、API は 202 を返し、バックグラウンド更新をキューに入れ、課金は 0 クレジットです。 |
| sources オプション | string | カンマ区切りのデータソース。現在は ct (Certificate Transparency) のみ受け付けます。 |
| verify オプション | boolean | DNS 経由で各サブドメインが解決することを確認(遅いがより正確)。デフォルト: false |
| limit オプション | number | 返すサブドメインの最大数。デフォルト: 500、最大: 2000 |
ユースケース
- 攻撃面マッピングとセキュリティ監査
- 忘れられた、またはシャドー IT サブドメインを検出
- 買収前の技術デューディリジェンス
- インフラストラクチャの競合分析
- バグ報奨金調査
レスポンスフィールド
| フィールド | 説明 |
|---|---|
subdomains[].name | 検出されたサブドメイン ホスト名 |
subdomains[].source | データソース(例:"ct") |
subdomains[].first_seen | このサブドメインが最初に観察された場合 |
subdomains[].verified | DNS 解決が確認されたかどうか(verify=true の場合) |
subdomains[].dns_records | 見つかった DNS レコード(verify=true の場合) |
summary.total_found | 制限前に検出されたサブドメインの総数 |
summary.verified_count | 検証済み(ライブ)サブドメインの数 |
HTTP ステータスコード
| HTTP ステータスコード | 説明 |
|---|---|
200 成功 | リクエスト成功 |
202 受理済み | キャッシュ専用のサブドメイン要求でキャッシュ未命中となり、バックグラウンド更新を受理しました。クレジットは消費されません。Retry-After の時間後に再試行してください。 |
400 不正なリクエスト | 無効なパラメータ |
402 支払いが必要 | このリクエストを実行するためのクレジットが不足しています。 |
503 サービス利用不可 | 上流サービスが利用できないか、一時的にレート制限しています。 |
504 ゲートウェイタイムアウト | 上流の問い合わせがタイムアウトしました。 |
リクエスト例
# 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}`));
レスポンス例
{
"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 受理済み
{
"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"
}