Python指南:如何检测域名是否是诈骗

发布: (2025年12月15日 GMT+8 01:43)
6 min read
原文: Dev.to

Source: Dev.to

引言

在线购物和注册新网站已经是日常活动,但遇到诈骗域名也同样常见。这些可疑站点可能会骗走你的钱财、窃取敏感信息,或在运营几周后消失。本指南展示如何使用 Python 自动筛选网站的诈骗信号,解释每项检查为何重要,提供可运行的脚本,并教你如何解读结果。

为什么诈骗域名难以辨别

诈骗者可以在几分钟内搭建一个光鲜的网店或假冒的登陆页面。常见伎俩包括:

  • 最近一年内(甚至仅几周前)注册的低价或免费域名
  • WHOIS 隐私保护(如 WhoisGuard、DomainsByProxy)隐藏所有者身份
  • 没有真实的邮箱设置——只有一个网页表单,甚至没有
  • HTTPS 缺失或证书已过期
  • 通过激进的促销或大幅折扣诱导冲动购买
  • 几乎没有“真实”的政策页面、社交证明或公司足迹

当然,许多合法的初创公司在起步阶段也会出现这些信号。红旗越多,风险越高。

最关键的技术信号

信号为什么重要
域名年龄 – 网站是否在最近几个月内注册?大多数诈骗使用全新域名。
WHOIS 隐私 – 所有者隐藏在隐私服务后验证变得困难。
无 MX 记录 – 缺少公共邮箱设置正规企业通常都有 MX 记录。
HTTPS/SSL – 缺失或已过期的证书访问者的信任问题。
页面内容可疑 – “仅限今日 70% 折扣!”,通用的 “安全结账” 徽章经典诈骗手法。
缺失或伪造的联系/政策页面 – 没有便捷的联系方式,复制粘贴的政策表明可信度低。

单一信号并不能证明是诈骗,但多项信号叠加会大幅提升风险概率。

在 Python 中获取 WHOIS、DNS、HTTPS 与内容信息

必要库

  • Python 3.7 或更高
  • python-whois
  • requests
  • beautifulsoup4
  • dnspython
  • tldextract

使用以下命令安装:

pip install python-whois requests beautifulsoup4 dnspython tldextract

脚本

下面的脚本:

  1. 获取 WHOIS 信息以检查域名年龄和隐私情况。
  2. 检查 DNS 记录中的邮箱(MX)信息。
  3. 尝试使用 HTTPS 获取首页(若失败回退到 HTTP)。
  4. 抓取页面内容,寻找可疑文字(闪购、缺失政策、信任徽章等)。
  5. 将证据合并为风险评分并给出结论。
import re
import json
import whois
import requests
import dns.resolver
from bs4 import BeautifulSoup
from datetime import datetime, timezone
import tldextract

HEADERS = {"User-Agent": "Mozilla/5.0 (DomainRisk/0.1)"}
TIMEOUT = 10

def domain_age_days(w):
    created = w.get("creation_date")
    if isinstance(created, list):
        created = created[0] if created else None
    if not isinstance(created, datetime):
        return None
    if created.tzinfo is None:
        created = created.replace(tzinfo=timezone.utc)
    return (datetime.now(timezone.utc) - created).days

def whois_privacy(w):
    text = " ".join(str(w.get(k, "")).lower() for k in ["registrar", "org", "name"])
    return any(t in text for t in ["privacy", "proxy", "whoisguard", "redacted", "withheld"])

def resolve_dns(domain):
    out = {"A": [], "MX": []}
    try:
        out["A"] = [r.to_text() for r in dns.resolver.resolve(domain, "A")]
    except Exception:
        pass
    try:
        out["MX"] = [r.to_text() for r in dns.resolver.resolve(domain, "MX")]
    except Exception:
        pass
    return out

def fetch(url):
    try:
        r = requests.get(url, headers=HEADERS, timeout=TIMEOUT)
        if 200 = 50 else ("Moderate Risk" if score >= 30 else "Lower Risk")
    return {
        "domain": norm,
        "age_days": age,
        "dns": dns,
        "signals": signals,
        "risk_score": score,
        "risk_band": band,
    }

if __name__ == "__main__":
    import sys
    if len(sys.argv) ")
        raise SystemExit(1)
    print(json.dumps(analyze(sys.argv[1]), indent=2))

运行脚本

  1. 将上述代码保存为 scan.py

  2. 打开终端并安装依赖(如果尚未安装):

    pip install python-whois requests beautifulsoup4 dnspython tldextract
  3. 测试一个域名:

    python scan.py example.com

脚本会输出一个 JSON 对象,包含:

  • 域名年龄
  • DNS 状态(尤其是 MX/邮箱)
  • 对激进折扣、缺失政策、未验证信任徽章的检测
  • risk_score 与风险等级(High RiskModerate RiskLower Risk

实际案例

对一家可疑时尚店的审查展示了自动“机器人”检查如何帮助捕获潜在诈骗:
CKlinen.com: A Scam Fashion Store Review (如有实际链接请替换)

结论

只要稍加 Python 与恰当的检查,就能比以往更快、更准确地筛查诈骗域名。保持好奇,分享有效方法,帮助朋友和家人在网上购物时保持安全。如果你有建议或想为此脚本贡献改进,欢迎留言或在 GitHub 上创建 gist——每一点贡献都能帮助抵御网络欺诈。

Back to Blog

相关文章

阅读更多 »

Python 与测量工程的结合

介绍 嗨,测量和 GIS 爱好者们!我一直在深入研究 Python 如何为日常测量工程任务提供强大动力,我想…