Python指南:如何检测域名是否是诈骗
Source: Dev.to
引言
在线购物和注册新网站已经是日常活动,但遇到诈骗域名也同样常见。这些可疑站点可能会骗走你的钱财、窃取敏感信息,或在运营几周后消失。本指南展示如何使用 Python 自动筛选网站的诈骗信号,解释每项检查为何重要,提供可运行的脚本,并教你如何解读结果。
为什么诈骗域名难以辨别
诈骗者可以在几分钟内搭建一个光鲜的网店或假冒的登陆页面。常见伎俩包括:
- 最近一年内(甚至仅几周前)注册的低价或免费域名
- WHOIS 隐私保护(如 WhoisGuard、DomainsByProxy)隐藏所有者身份
- 没有真实的邮箱设置——只有一个网页表单,甚至没有
- HTTPS 缺失或证书已过期
- 通过激进的促销或大幅折扣诱导冲动购买
- 几乎没有“真实”的政策页面、社交证明或公司足迹
当然,许多合法的初创公司在起步阶段也会出现这些信号。红旗越多,风险越高。
最关键的技术信号
| 信号 | 为什么重要 |
|---|---|
| 域名年龄 – 网站是否在最近几个月内注册? | 大多数诈骗使用全新域名。 |
| WHOIS 隐私 – 所有者隐藏在隐私服务后 | 验证变得困难。 |
| 无 MX 记录 – 缺少公共邮箱设置 | 正规企业通常都有 MX 记录。 |
| HTTPS/SSL – 缺失或已过期的证书 | 访问者的信任问题。 |
| 页面内容可疑 – “仅限今日 70% 折扣!”,通用的 “安全结账” 徽章 | 经典诈骗手法。 |
| 缺失或伪造的联系/政策页面 – 没有便捷的联系方式,复制粘贴的政策 | 表明可信度低。 |
单一信号并不能证明是诈骗,但多项信号叠加会大幅提升风险概率。
在 Python 中获取 WHOIS、DNS、HTTPS 与内容信息
必要库
- Python 3.7 或更高
python-whoisrequestsbeautifulsoup4dnspythontldextract
使用以下命令安装:
pip install python-whois requests beautifulsoup4 dnspython tldextract
脚本
下面的脚本:
- 获取 WHOIS 信息以检查域名年龄和隐私情况。
- 检查 DNS 记录中的邮箱(MX)信息。
- 尝试使用 HTTPS 获取首页(若失败回退到 HTTP)。
- 抓取页面内容,寻找可疑文字(闪购、缺失政策、信任徽章等)。
- 将证据合并为风险评分并给出结论。
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))
运行脚本
-
将上述代码保存为
scan.py。 -
打开终端并安装依赖(如果尚未安装):
pip install python-whois requests beautifulsoup4 dnspython tldextract -
测试一个域名:
python scan.py example.com
脚本会输出一个 JSON 对象,包含:
- 域名年龄
- DNS 状态(尤其是 MX/邮箱)
- 对激进折扣、缺失政策、未验证信任徽章的检测
risk_score与风险等级(High Risk、Moderate Risk或Lower Risk)
实际案例
对一家可疑时尚店的审查展示了自动“机器人”检查如何帮助捕获潜在诈骗:
CKlinen.com: A Scam Fashion Store Review (如有实际链接请替换)
结论
只要稍加 Python 与恰当的检查,就能比以往更快、更准确地筛查诈骗域名。保持好奇,分享有效方法,帮助朋友和家人在网上购物时保持安全。如果你有建议或想为此脚本贡献改进,欢迎留言或在 GitHub 上创建 gist——每一点贡献都能帮助抵御网络欺诈。