MIT License

技术解读

以下内容由 GitRead 中文社区 编辑团队基于项目 README 与官方资料整理, 结合中文开发者的常见使用场景补充技术选型建议。具体以项目官方文档为准。

深度技术分析:“phishdestroy/destroylist”项目

项目背景与痛点

在互联网威胁日益复杂的今天,针对个人和企业的网络钓鱼攻击和欺诈活动不断增加。为了及时识别并屏蔽这些对网络安全构成巨大威胁的_DOMAINs,phishdestroy/destroylist 项目应运而生,它提供了实时监测并阻止恶意_DOMAINs的解决方案,通过维护一个丰富且不断更新的威胁DOMAINs数据库,来保护广大的互联网用户免受钓鱼和欺诈攻击。

该工程背后的团队深刻理解到威胁情报数据库的及时性和准确性对环境保护的关键作用,故而打造了一个开源自由的API服务,遵循多个形式和标准,便于不同消费者进行整合和使用。通过庞大的社区参与支持,使得该方案变得更加可靠。

技术核心揭秘

phishdestroy/destroylist项目通过一套精心设计的技术架构,达到了高效处理并实时更新威胁情报的目标。一般而言,项目的技术架构如下:

graph TD subgraph "用户接口" A[用户发起请求] end A --> B[参数解析] B --> C{"解析结果"} C -->|"成功"| D[查询威胁数据库] C -->|"失败"| E[返回错误提示] D --> F[返回匹配结果] F --> G[解析返回值] G --> H[返回处理结果] H --> I[与用户交互] I --> J{"交互结果"} J -->|"需继续检测"| K[重定向回D] J -->|"查询结束"| L[返回结果]

首先,每一个用户请求由参数解析环节开始。解析若成功则继续向威胁DOMAINs数据库发起查询,若失败,则直接返回详细错误提示。 查询结果将经过解析器处理,最终构建出完整的返回结果传递给用户界面并进行相关反馈,以确定接下来的操作步骤。

功能亮点与差异

相比于竞品,phishdestroy/destroylist 提供了多项独特的功能:

  • 灵活的API设计:针对不同需求提供多格式返回,还允许用户设定自定义数据匹配条件,提高了灵活性;
  • 多源数据同步:进行实时更新,有效支撑大量对真实网络钓鱼DOMAINs监控和捕获的汇报;
  • 丰富格式支持:除了主流的JSON与CSV支持外,项目还提供了其他多种格式的输出能力,确保能被广泛集成和使用;
  • 社区驱动技术:拥有宽广的技术开放思路,因此它依靠社区巨大的参与者来保证数据的质量和准确性,使得该工程能在快速变化的互联网环境里保持强力的竞争力。

应用场景与落地建议

将phishdestroy/destroylist集成到生产环境的系统时,需要特别注意以下几点:

  • 对于高度依赖实时网络安全的机构,比如金融、电商网站或是企业内部安全防护系统,可以将其作为核心的安全分发点,进行持续的威胁DOMAINs监控与防护;
  • 能够灵活增加自定义的威胁检测逻辑,允许针对特定威胁项做针对性的设计调整;
  • 按照体系的安全级别定期同步更新数据,确保系统的强健性。

综合评价

phishdestroy/destroylist项目凭借其强大的实时更新能力、优质的多方格式输出能力及社区力量,在保护互联网安全构筑的城墙中占据了一席之地。尽管它目前主要聚焦于钓鱼网站发现,但仍有扩展至更全面网络安全防御布局的潜力,这预示着它在未来应用中的更多可能性和成长空间。不过,其保障依赖于志愿者数据的真实性和及时反馈,因此保持数据来源和架构的稳定性是至关重要的因素,并需要持续投入保证系统的活力与连贯性。

关于

GitHub 原始描述(英文)

Real-time phishing & scam domain blocklist — 130k+ curated threats, 888K+ community, free API, multiple formats

描述取自 GitHub 官方 API,保持仓库作者书写的原文。

语言占比

HTML
JavaScript
Python

README

Destroylist: Phishing & Scam Domain Blacklist

Destroylist

Typing SVG

Quick Start Data Feeds API Appeals Website

Last Commit Stars Forks

Quick Start

Add to Pi-hole or AdGuard Home in one click — paste this URL into your blocklist settings:

https://cdn.jsdelivr.net/gh/phishdestroy/destroylist@main/rootlist/formats/primary_active/hosts.txt

CDN link above is recommended — served via jsDelivr global CDN, no rate limits. Raw GitHub mirror (may return 429 on heavy traffic): https://raw.githubusercontent.com/phishdestroy/destroylist/main/rootlist/formats/primary_active/hosts.txt

More formats: Hosts · AdBlock · Dnsmasq · Unbound · RPZ · API

Table of Contents

Live Statistics

Primary

Primary
Primary Live

Primary Live
Primary Content

Primary Content
Community

Community
Community Live

Community Live
Community Content

Community Content

Today / Week / Month

FeedTodayWeekMonth
PrimaryPrimary added todayPrimary added this weekPrimary added this month
CommunityCommunity added todayCommunity added this weekCommunity added this month
How these counts work

Badge values are exact feed-entry counts. The API reports normalized unique domains, so its values can be lower after URL, www and duplicate normalization. See the machine-readable dns/metrics.json definitions.

Data Feeds

Primary JSON Primary TXT Community JSON Community TXT

Feed Description Update Download
Primary Curated phishing domains Real-time JSON TXT
Primary Live DNS verified active 24h JSON TXT
Community Aggregated from 13+ sources 2h JSON TXT
Community Live Community DNS verified 24h JSON TXT
Primary Content Curated + HTTP content verified 12h JSON TXT
Community Content Aggregated + HTTP content verified 24h JSON TXT
Allowlist False positive protection Manual JSON
Tip 提示

Production: list.json or active_domains.json · Max coverage: blocklist.json · Firewall/DNS: root lists

All Download Formats (TXT, Hosts, AdBlock, Dnsmasq, Unbound, RPZ)

Getting 429 errors? Use the jsDelivr CDN links below — they bypass GitHub rate limits.

Via jsDelivr CDN (recommended, no rate limits):

Format Primary Primary Live Community Community Live
TXT Download Download Download Download
Hosts Download Download Download Download
AdBlock Download Download Download Download
Dnsmasq Download Download Download Download
Unbound Download Download Download Download
RPZ Download Download Download Download
Redis Download Download Download Download

Redis one-liner — load the full list into a Redis set (atomic swap, zero-downtime reload):

curl -s https://cdn.jsdelivr.net/gh/phishdestroy/destroylist@main/rootlist/formats/primary/redis.txt | redis-cli --pipe

Then check any domain in O(1): SISMEMBER destroylist:primary evil-domain.com

Via raw.githubusercontent.com (may return 429 under heavy traffic)
Format Primary Primary Live Community Community Live
TXT Download Download Download Download
Hosts Download Download Download Download
AdBlock Download Download Download Download
Dnsmasq Download Download Download Download
Unbound Download Download Download Download
RPZ Download Download Download Download

Hosts → Pi-hole, /etc/hosts, Windows · AdBlock → uBlock Origin, AdGuard · Dnsmasq → dnsmasq DNS · Unbound → pfSense, OPNsense · RPZ → BIND, Knot DNS · Redis → redis-cli --pipe bulk load

Root Lists

Tip: Root domains only — no subdomains, hosting providers excluded

All Roots Live Only Services Only
Primary JSON · TXT JSON · TXT JSON · TXT
Community JSON · TXT JSON · TXT JSON · TXT

All Roots — clean root domains (no infra) · Live Only — DNS-verified active · Services Only — hosting platform subdomains (Vercel, Pages.dev, Netlify, etc.)

Content-Verified Feeds

Note: Real HTTP content verification — not just DNS, but actual phishing page detection

Feed Update Description
Primary Content 12h (06:00 / 18:00 UTC) Curated phishing with verified active content
Community Content 24h (03:00 UTC) Aggregated feeds with verified active content

Download links: see Data Feeds above

Warning: Cloaking Alert: Scammers use cloaking to hide phishing from bots — showing blank/fake pages to scanners. Domain NOT in content list ≠ safe! Use Primary or Community full lists for complete protection.

Threat Intelligence API

API

Live API Stats

Free, open, no API key.

Real-time domain risk scoring (0-100) across the Primary and Community datasets · scheduled sync

Single & bulk check (500/req) · Keyword search · Full feeds

Use the API · endpoints, scoring & integration examples
%%{init: {"themeVariables":{"background":"transparent","primaryBorderColor":"#c52237","lineColor":"#c52237","clusterBkg":"transparent","clusterBorder":"#898999","edgeLabelBackground":"transparent","fontFamily":"system-ui, sans-serif"},"flowchart":{"curve":"basis","htmlLabels":true}}}%% flowchart LR Request["Client Request<br/>(Single / Bulk)"] e1@--> API["Live API<br/>api.destroy.tools"] API e2@--> Engine["Threat Engine<br/>(Risk Score 0-100)"] Engine e3@--> DB[("Destroylist DB<br/>1M+ Threats")] DB e4@--> Engine Engine e5@--> Response["JSON Response<br/>(Severity & Status)"] classDef client fill:transparent,stroke:#898999,stroke-width:2px; classDef api fill:transparent,stroke:#c52237,stroke-width:2px; classDef db fill:transparent,stroke:#898999,stroke-width:2px,stroke-dasharray: 5 5; classDef animate stroke:#c52237,stroke-width:2px,stroke-dasharray:10 5,stroke-dashoffset:900,animation:dash 22s linear infinite; classDef animateDark stroke:#898999,stroke-width:2px,stroke-dasharray:10 5,stroke-dashoffset:900,animation:dash 22s linear infinite; class Request client; class API,Engine,Response api; class DB db; class e1,e2,e3,e5 animate; class e4 animateDark;

Endpoints

Method Endpoint Description
GET /v1/check?domain= Single domain check with risk score & severity
POST /v1/check/bulk Bulk check up to 500 domains per request
GET /v1/search?q= Search blocklisted domains by keyword
GET /v1/feed/{list} Download full domain feeds (primary, community, active)
GET /v1/stats Live statistics & domain counts

Per-IP quotas: 300 data units/minute; intelligence routes have 30 units/minute and 1,000/day. Request costs vary by endpoint. On HTTP 429, respect Retry-After. Current limits and response schemas.

Threat Scoring

Listed-domain results include a risk score (0–100) and the API’s severity verdict. Signals include curated and community listings, DNS/HTTP liveness, multiple sources and naming patterns. Unlisted domains can return separate heuristic signals; a missing listing is not a safety guarantee.

Use the returned threat, severity and flags fields. The current OpenAPI specification defines each response shape.

Critical severity High severity Medium severity Low severity

Quick Integration

cURL

curl "https://api.destroy.tools/v1/check?domain=suspicious-site.xyz"

Python

import requests
domain = "example.com"
r = requests.get("https://api.destroy.tools/v1/check", params={"domain": domain}, timeout=30)
r.raise_for_status()
result = r.json()
if result["threat"]:
    print(f"BLOCKED: {result['severity']} (score: {result['risk_score']})")

JavaScript

const domain = "example.com";
const r = await fetch(`https://api.destroy.tools/v1/check?domain=${encodeURIComponent(domain)}`);
if (!r.ok) throw new Error(`API returned HTTP ${r.status}`);
const data = await r.json();
if (data.threat) console.warn("PHISHING:", data.severity, data.risk_score);

Bulk Check

curl -X POST "https://api.destroy.tools/v1/check/bulk" \
  -H "Content-Type: application/json" \
  -d '{"domains":["site1.com","site2.xyz","site3.top"]}'

About Destroylist

Destroylist is a real-time threat intelligence platform by PhishDestroy — protecting firewalls, DNS resolvers, browser extensions, and security teams worldwide.

Every domain is discovered, verified, reported to registrars, and published transparently.

Live feed counts above · 13+ threat sources · 50+ vendor reports · 6 output formats · Free API

Live data collection began on July 1, 2025

Data & integrations

Follow the data · sources → checks → feeds
%%{init: {"themeVariables":{"background":"transparent","primaryBorderColor":"#c52237","lineColor":"#c52237","clusterBkg":"transparent","clusterBorder":"#898999","edgeLabelBackground":"transparent","fontFamily":"system-ui, sans-serif"},"flowchart":{"curve":"basis","htmlLabels":true}}}%% flowchart TB subgraph Sources["Threat Sources"] S1[30+ Parsers] S2[Community Feeds] S3[Telegram Bot] S4[CT Logs / DNS] end subgraph Ingestion["Ingestion"] I1[smart_aggregator.py] I2[validate_and_clean.py] end subgraph Enrichment["Enrichment"] E1[DNS Validation] E2[HTTP Content Check] E3[VirusTotal / GSB] end subgraph Distribution["Distribution"] D1[JSON / TXT] D2[Hosts / AdBlock] D3[RPZ / Unbound] D4[API Feed] end Sources --> Ingestion Ingestion --> Enrichment Enrichment --> Distribution classDef source fill:transparent,stroke:#898999,stroke-width:2px; classDef ingest fill:transparent,stroke:#c52237,stroke-width:2px; classDef enrich fill:transparent,stroke:#c52237,stroke-width:2px; classDef dist fill:transparent,stroke:#c52237,stroke-width:2px,stroke-dasharray: 5 5; class S1,S2,S3,S4 source; class I1,I2 ingest; class E1,E2,E3 enrich; class D1,D2,D3,D4 dist;
Connect your tools · subscribe URLs, curl, Python & Bash

One-Click Subscribe URLs

Tool Format URL
Pi-hole Hosts https://raw.githubusercontent.com/phishdestroy/destroylist/main/rootlist/formats/primary_active/hosts.txt
AdGuard Home AdBlock https://raw.githubusercontent.com/phishdestroy/destroylist/main/rootlist/formats/primary_active/adblock.txt
uBlock Origin AdBlock https://raw.githubusercontent.com/phishdestroy/destroylist/main/rootlist/formats/primary_active/adblock.txt
pfSense / OPNsense (Unbound) Unbound https://raw.githubusercontent.com/phishdestroy/destroylist/main/rootlist/formats/primary_active/unbound.conf
BIND / Knot DNS (RPZ) RPZ https://raw.githubusercontent.com/phishdestroy/destroylist/main/rootlist/formats/primary_active/rpz.zone
Dnsmasq Dnsmasq https://raw.githubusercontent.com/phishdestroy/destroylist/main/rootlist/formats/primary_active/dnsmasq.conf

Pi-hole — Settings > Blocklists > paste the Hosts URL
AdGuard Home — Filters > DNS Blocklists > Add blocklist > paste the AdBlock URL
uBlock Origin — Settings > Filter lists > Import > paste the AdBlock URL
pfSense — Services > DNS Resolver > paste the Unbound URL
BIND/Knot — Add the RPZ URL as a response-policy zone

curl One-Liners

# Plain domain list
curl -fsSL https://raw.githubusercontent.com/phishdestroy/destroylist/main/rootlist/formats/primary_active/domains.txt -o domains.txt

# Hosts format (Pi-hole, /etc/hosts)
curl -fsSL https://raw.githubusercontent.com/phishdestroy/destroylist/main/rootlist/formats/primary_active/hosts.txt -o hosts_blocklist.txt

# AdBlock format (uBlock Origin, AdGuard)
curl -fsSL https://raw.githubusercontent.com/phishdestroy/destroylist/main/rootlist/formats/primary_active/adblock.txt -o adblock.txt

# Dnsmasq
curl -fsSL https://raw.githubusercontent.com/phishdestroy/destroylist/main/rootlist/formats/primary_active/dnsmasq.conf -o dnsmasq_blocklist.conf

# Unbound (pfSense / OPNsense)
curl -fsSL https://raw.githubusercontent.com/phishdestroy/destroylist/main/rootlist/formats/primary_active/unbound.conf -o unbound_blocklist.conf

# RPZ (BIND / Knot)
curl -fsSL https://raw.githubusercontent.com/phishdestroy/destroylist/main/rootlist/formats/primary_active/rpz.zone -o rpz_blocklist.zone

Python

import requests
blocklist = requests.get('https://raw.githubusercontent.com/phishdestroy/destroylist/main/list.json').json()
is_malicious = "suspicious-domain.com" in blocklist

Bash

curl -s https://raw.githubusercontent.com/phishdestroy/destroylist/main/list.txt | grep -q "suspicious-domain.com" && echo "BLOCKED"

Investigations & evidence

How we hunt · discovery, reports & remediation

Workflow


%%{init: {"themeVariables":{"background":"transparent","primaryBorderColor":"#c52237","lineColor":"#c52237","clusterBkg":"transparent","clusterBorder":"#898999","edgeLabelBackground":"transparent","fontFamily":"system-ui, sans-serif"},"flowchart":{"curve":"basis","htmlLabels":true}}}%% flowchart LR Discover["DISCOVER<br/>30+ Parsers"] e1@--> Report["REPORT<br/>50+ Vendors"] Report e2@--> Legal["LEGAL<br/>ICANN Compliance"] Legal e3@--> Publish["PUBLISH<br/>Real-time Feed"] classDef box fill:transparent,stroke:#898999,stroke-width:2px; classDef animate stroke:#c52237,stroke-width:2px,stroke-dasharray:10 5,stroke-dashoffset:900,animation:dash 22s linear infinite; class Discover,Report,Legal,Publish box; class e1,e2,e3 animate;
DISCOVER REPORT LEGAL PUBLISH
30+ parsers 50+ vendors ICANN compliance Real-time
CT logs, DNS Google, Microsoft Abuse notifications GitHub, Telegram
Social media VirusTotal, Cloudflare Evidence packages Twitter, Mastodon

Phase 1: Pre-emptive Discovery & Ingestion

We utilize a distributed network of 30+ proprietary parsers to identify malicious domains at their earliest stage:

  • Advanced Heuristics: Continuous monitoring of Google Ads (Malvertising), SEO-manipulated search results, and trending social media campaigns on Twitter (X), YouTube, and Telegram
  • Infrastructure Analysis: Leveraging dnstwist and typosquatting detection to catch look-alike domains targeting established brands
  • Community Intelligence: Real-time ingestion of community-reported threats via our Telegram Bot and partner intelligence feeds

Phase 2: Global Ecosystem Contribution

Once a threat is confirmed, we submit data to over 50 industry-leading vendors:

Cloudflare        Google Safe Browsing      Microsoft Security      VirusTotal
Netcraft          ESET                      Bitdefender             Norton Safe Web
Avira             PhishTank                 Dr.Web                  Yandex Safe Browsing
URLScan.io        PolySwarm                 SiteReview              Urlquery
PhishStats        PhishReport               IsItPhish               ThreatCenter

  • Abuse Notifications: Formal alerts to domain registrars and hosting providers
  • Forensic Evidence Disclosure: Complete evidence packages including metadata, screenshots, and PDF reports
  • ICANN Compliance Support: Reports aligned with ICANN standards
  • Conditional Re-Detection Logic: Follow-up reports only while the threat remains active, never sooner than 48 hours after the previous report (current reporting policy)

Phase 4: Public Transparency & Community Alerts

  • Open Database: Real-time commits to this GitHub repository
  • Live Monitoring: Visual intelligence at phishdestroy.io/live
  • Social Broadcasting: Automated alerts on Twitter, Telegram, and Mastodon

For fraud victims · reports, evidence & provider responsibility

Abuse Process


DestroyList aims to disable malicious domains: scams, phishing, and other illicit sites to enhance internet safety.

Before a domain is added, we:

  1. Scan it across cybersecurity platforms for threat intelligence.
  2. Send an official complaint to the registrar and the hosting provider (via WHOIS), including scan results, screenshots, and a request for client investigation. The complaint also notifies them about inclusion in our public database.

ICANN’s 2013 RAA §3.18.1 requires registrars to take reasonable and prompt steps to investigate and respond appropriately to abuse reports. The 24-hour review requirement in §3.18.2 applies to well-founded reports of illegal activity from law enforcement, consumer-protection and other qualifying authorities, sent to the registrar’s dedicated contact.

When reports go ignored

We work hard to eliminate threats quickly. Every malicious domain is analyzed, documented, reported, and published transparently.

However, when a domain receives 10–30+ abuse reports and a registrar still ignores them for months, the situation changes: the registrar is no longer a passive party.

It effectively provides infrastructure for illegal activity.

Some registrars behave as if their internal policies somehow override ICANN requirements and national laws — as if phishing and fraud are “allowed” as long as they personally decide not to act.

We document this publicly so that anyone can see: threats persist not because they were unnoticed, but because the responsible providers simply chose to do nothing.

Requests from private individuals:

DestroyList is an open-source, non-commercial volunteer project.

Private individuals may request the number of abuse reports we have sent for a specific domain, but only through public channels:

We do not respond to private e-mail requests from individuals about report counts.

This is a legal requirement for transparency and equal access to information.

Official government or law-enforcement requests may be answered privately.


If you were defrauded by a domain already listed here, check its addition date using the commit history or via our Telegram/Mastodon channels.

If the fraud happened after the domain was already listed, the registrar’s or host’s delay may indicate they share responsibility for the loss. Future potential victims can also see this negligence documented publicly.

Registrars and hosts that tolerate scam operations may reasonably be expected to assist victims or their legal representatives.

Research the record · use cases & historical vault

Network security · Threat research · AI/ML training · Trend analysis · Automation

Point-in-time history — every state of the list is reconstructable:

Granularity Where Retention
Every change Commit history Forever (41,000+ commits)
Daily added/removed diffs archives/changes/ Forever, searchable in GitHub code search
Weekly & monthly full snapshots archives/ → Release assets Recent in tree, older rotated to the permanent Release

Tip: Historical Vault (500K+ domains, 5+ years archived): [email protected]

Appeals Process

Wrongly listed? Fix it fast:

Appeals Form GitHub Issue

For either route, send the domain and a short explanation. No evidence or proof of ownership is required. Screenshots and links are optional; we review the listing ourselves.

Accuracy first!

Appeals overview

Appeals

Connect With Us

Platform

Website API Ban Service

Reports & contact

Bot Telegram Contact

Updates

Mastodon Medium Twitter

All contact links

Pac-Man Contribution Graph

pacman-contribution-graph

Related Investigations & Repositories
Repository Description
namesilo-evidence Evidence archive — NameSilo registrar abuse investigation
nicenic-evidence Evidence archive — NiceNIC registrar abuse investigation
trustname-evidence Evidence archive — TrustName registrar abuse investigation
ScamIntelLogs Raw scam intelligence logs and IOC data
DestroyScammers Scammer exposure and disruption operations

License

License

MIT — Free, open, yours to use!

Automation status

Rootlist On List Update Update Statistics Deploy GitHub Pages

Join the Fight!

Status License Contributions

Every star helps this project reach more security teams and protect more users.

Star Destroylist Open Issue Submit PR

We welcome contributions

We welcome contributions:

  • Fresh threat intelligence & new blocklist sources
  • Detection algorithm improvements
  • Integration guides for new platforms
  • Translations & documentation

Drop an Issue or PR — let’s crush phishing together!

评论

暂无评论