IP 纯净度检测:自己动手查一个代理 IP 的质量
IP 纯净度检测怎么做:查归属网络、查 Spamhaus 黑名单(附 dig 和 Python 脚本)、比对地理位置数据库、看懂风险评分,以及 IP 不干净时该怎么办。
IP 纯净度检测,查的是四件事:这个地址归哪个网络(ASN)、有没有上公开黑名单、各家地理位置数据库对它的国家是否说法一致、风险评分网站为什么给它打这个分。四项都能用免费工具自己查,不必只信服务商的一句“纯净 IP”。下面一步步讲,附可以直接运行的代码。
“纯净”到底指什么
“纯净 IP”是个营销词,没有统一定义。落到能查的事实上,一个代理 IP 质量好,大致意味着:
- 标签对得上:卖给你的是住宅、ISP 还是数据中心,国家是哪里,查出来和标签一致;
- 没有滥用记录:不在记录垃圾邮件、被入侵主机这类行为的公开黑名单上;
- 位置说法一致:主流地理位置数据库对它在哪个国家大体没有分歧;
- 风险评分可以解释:分数偏高时,你能说出是哪几项信号造成的。
有一点要先接受:代理 IP 本来就是代理。很多数据库会把它标成“proxy”,这不是脏,只是如实。要找的是标签错误和滥用记录,而不是一个在任何数据库里都查不出痕迹的地址。
第一步:找出口 IP,查归属网络
先通过代理问一下回显服务,看目标网站看到的是哪个地址。HOST、PORT、USERNAME 和 PASSWORD 是占位符,真实的值在控制台里每个服务的页面上。
curl -s -x http://USERNAME:PASSWORD@HOST:PORT https://api.ipify.org
拿到地址后,查它归哪个自治系统(ASN)、持有者是谁。这一步在自己查 IP 类型里有完整的脚本和判读方法,这里不重复。归属网络是后面所有判断的基础:一个标成住宅、却属于主机商的地址,后面几项查得再干净也没有意义。
第二步:查公开黑名单(Spamhaus ZEN)
Spamhaus 是最常被邮件服务器和网站引用的黑名单之一。它的 ZEN 列表把几个子列表合在一起,通过 DNS 查询:把 IP 的四段倒过来,接上 zen.spamhaus.org,查它的 A 记录。
- 有返回、而且是
127.0.0.x:这个地址在某个子列表里; - 查无此名(NXDOMAIN):不在列表里。
用 dig 一行就能查。这里用 203.0.113.10 做例子,它属于专门留给文档使用的 TEST-NET 地址段,换成你自己的出口 IP 即可:
IP=203.0.113.10
dig +short "$(echo "$IP" | awk -F. '{print $4"."$3"."$2"."$1}').zen.spamhaus.org"
要批量查、或者想看到每个返回码的含义,用下面这个只依赖 Python 标准库的脚本:
import ipaddress
import socket
import sys
ZEN = {
"127.0.0.2": "SBL: known spam source or spam operation",
"127.0.0.3": "SBL CSS: low-reputation sending",
"127.0.0.4": "XBL: exploited or infected host",
"127.0.0.10": "PBL, ISP maintained: end-user range, not a mail server",
"127.0.0.11": "PBL, Spamhaus maintained: end-user range, not a mail server",
"127.255.255.252": "ERROR: typo in the list name",
"127.255.255.254": "ERROR: queried through a public or open resolver",
"127.255.255.255": "ERROR: too many queries",
}
def zen_name(ip):
octets = str(ipaddress.IPv4Address(ip)).split(".")
return ".".join(reversed(octets)) + ".zen.spamhaus.org"
def zen_lookup(ip):
try:
_, _, answers = socket.gethostbyname_ex(zen_name(ip))
except socket.gaierror:
return []
return sorted(answers)
for ip in sys.argv[1:] or ["203.0.113.10"]:
print(ip, "->", zen_name(ip))
answers = zen_lookup(ip)
if not answers:
print(" no answer: not listed, or the resolver gave nothing back")
for code in answers:
print(" " + code, ZEN.get(code, "listed: look it up on spamhaus.org"))
保存为 zen_check.py,运行 python3 zen_check.py 查示例地址,或者 python3 zen_check.py 你的出口IP 查自己的。查询从你自己的网络发出就行,不需要走代理。
先确认你的 DNS 能查 Spamhaus
这一步最容易踩坑。Spamhaus 的公共镜像只供低流量、非商业的免费使用,而且不接受经由公共或开放 DNS 解析器转来的查询。它的原话是:通过公共解析器查询时,“我们无法判断你的查询量……因此不允许通过这种方式查询我们的 DNSBL”。
实际表现有两种:
- 返回
127.255.255.254:这是错误码,意思是“查询经由公共或开放解析器”,和这个 IP 的名声无关; - 什么都不返回:看上去就像“没上榜”,这是最危险的情况,因为它会让一个脏 IP 显得干净。
所以先做一次自检。DNS 黑名单按惯例(RFC 5782)都为 127.0.0.2 留了一条测试记录:
python3 zen_check.py 127.0.0.2
能看到 127.0.0.2 等返回码,说明你的解析器拿得到真实答案。什么都没有、或者只有 127.255.255.254,就换用你的宽带运营商提供的 DNS,或者自己跑一个解析器。量大或者商业用途,Spamhaus 另有需要注册的数据查询服务(DQS),适用条件以它官网为准。只查一两个地址的话,Spamhaus 网站上的 IP 与域名信誉查询工具更省事,它本来就是为人工查询准备的。
PBL 不等于脏
上面的示例地址会返回 127.0.0.11,也就是 PBL。PBL 列的是“终端用户地址段”:家庭宽带、办公网络这类本来就不该直接发邮件的地址。运营商会主动把自己的家庭地址段登记进去。
所以,住宅或 ISP 代理出现在 PBL 里,往往恰好说明它是真正的宽带地址,而不是滥用记录。真正要在意的是 SBL、CSS 和 XBL:这些列的是垃圾邮件来源、低信誉发信和被入侵的主机。
第三步:比对地理位置数据库
把同一个 IP 丢进几家地理位置数据库(比如 ip-api、ipinfo、MaxMind 的在线演示),国家和城市常常对不上。原因很平常:
- 各家的数据来源不同,有的以地址注册信息为主,有的加入了网络测量和用户上报;
- 地址段会转手,新持有者把它用到另一个国家,数据库要过一段时间才跟上;
- 城市级数据本来就粗,免费库尤其如此。
判读的办法是:看国家,别太看城市。大多数数据库都说是你下单的国家,就没问题;多数说的是另一个国家,才值得拿去问服务商。你无法知道目标网站用的是哪一家数据库,所以“多数一致”比“某一家说对了”更有参考价值。
风险评分网站是什么,为什么每家分数都不一样?
有一类网站会给 IP 打一个“欺诈分”或“风险分”。它们把多种信号加权合成一个数字:是否识别为代理或 VPN、是否属于主机商、是否在黑名单上、自己的蜜罐或客户网络最近有没有看到它作恶,以及这些记录有多新。
分数不一样,是因为每家的数据和权重都不同,而且都不公开。同一个地址,一家给高分、一家给低分,并不矛盾。几条使用建议:
- 看原因,不只看分数。 好的评分页会列出触发了哪些信号。“识别为代理”对代理 IP 来说是预期之内;“近期有滥用报告”才需要警惕。
- 用来横向比较。 同一家网站上,比较几个候选地址谁高谁低,比盯着某个绝对值更有用。
- 别把低分当成目标。 为了让代理 IP 在评分网站上“看起来不像代理”而折腾,偏离了你真正需要的东西:一个标签正确、没有滥用记录的地址。
IP 纯净度检测清单:四项一览
| 检查项 | 用什么查 | 正常 | 需要追问 |
|---|---|---|---|
| 归属网络 | RIPEstat、whois | 和标签一致 | 标住宅,却属于主机商 |
| Spamhaus ZEN | dig 或上面的脚本 |
无返回,或只在 PBL | SBL、CSS 或 XBL |
| 地理位置 | 几家数据库对比 | 多数说是下单的国家 | 多数说是别的国家 |
| 风险评分 | 评分网站 | 高分原因只是“代理” | 高分原因是近期滥用 |
租到的 IP 不干净,怎么办?
先把证据留好:IP、查询时间、每一项查询的原始输出。然后分两种情况。
标签错了。 国家不对,或者网络类型不对(比如住宅地址查出来属于主机商)。在我们这儿,这由实话实说页上的承诺兜底:“报告一个标错的 IP,我们把你花在它上面的流量记回你的账户,把这个 IP 从池子里撤下来,撤完了在 Discord 告诉你。”
标签没错,但上了黑名单。 地址确实是它标的那种、那个国家,只是在 SBL 或 XBL 里。把查询输出带到 Discord,我们会看,也会说明能做什么。这种情况我们没有写下固定的承诺,所以这里也不替它许诺。
两个实用的补充:
- 按 IP 租的线路,拿到就查。 ISP 和数据中心 IP 整个租期都是你的,第一天就把上面的检查跑一遍,有问题趁早说。
- 轮换线路,看比例。 住宅按请求轮换,一个出口上了黑名单只影响一条请求,下一条就换了地址。多取几个样本,看上榜的比例,比盯着某一个地址更能说明池子的质量。
快速问答
IP 纯净度检测免费吗? 本文用到的查询都不收费。Spamhaus 的公共镜像限于低流量、非商业使用,你的用法算不算,以它的条款为准;只查几个地址,用它网站上的查询工具最稳妥。
用 8.8.8.8 这类公共 DNS 查 Spamhaus 可以吗?
不行。Spamhaus 不接受经由公共解析器的查询,你会拿到错误码,或者什么都拿不到。先用 127.0.0.2 自检。
住宅 IP 在 PBL 里,是不是脏了? 不是。PBL 列的是本来就不该直接发邮件的终端用户地址段,家庭宽带出现在里面很正常。要在意的是 SBL、CSS 和 XBL。
为什么同一个 IP 在不同网站上风险分差很多? 每家的数据来源和权重都不同,也不公开。看它给出的原因,比看分数有用。
下一步
充一小笔,在你需要的线路上拿几个地址,把本文的检查跑一遍,结果存下来。下大单之前怎么先测一家服务商里有配套的测试方法,价格见价格页。查出不对劲的地方,把输出贴到 Discord,我们公开看。