IP 标签是什么意思,以及怎么自己查一个 IP 的类型
住宅、ISP 还是数据中心,是服务商贴在 IP 上的标签。这里讲怎么用免费工具查出一个地址归谁所有,并核对这个标签。
服务商卖给你一个「住宅」或者「美国」代理时,这个词是一个标签。你付钱买的就是这个标签,而在廉价代理上,它恰恰是最常出错的部分:把数据中心地址当住宅卖,或者按一个国家收费、却从另一个国家出口。
你不必凭信任接受这个标签。一个 IP 地址归谁所有是公开信息,用免费工具几分钟就能查到。
标签由什么构成
每一个公网 IP 地址都属于某个网络宣告的一个地址段。这个网络有一个自治系统号(ASN)和一个登记的组织名称。由此:
- 数据中心指宣告它的网络是主机商或云服务商。
- ISP 指由家庭宽带运营商宣告、托管在服务器上的静态地址。
- 住宅指家庭宽带运营商分配给某户家庭连接的地址,随着池子轮换而变化。
商业 IP 数据库还会在此之上加上自己的判断:一个「hosting」标记、一个「proxy」标记、一个城市。这些是有用的信号,但常常过时,所以把它们当作第二意见。
第一步:找到你的出口 IP
通过代理,问一个回显服务它看到的是哪个地址。HOST、PORT、USERNAME 和 PASSWORD 是占位符;真实的值在我们控制台里每个服务的页面上。
curl -s -x http://USERNAME:PASSWORD@HOST:PORT https://api.ipify.org
如果是轮换型产品,多跑几次。每次都会显示一个不同的地址,你要查的是其中几个。
第二步:查是谁宣告了它
从你自己的网络运行这些查询。查询本身不需要走代理。
import requests
ip = input("Exit IP from step one: ").strip()
network = requests.get(
"https://stat.ripe.net/data/network-info/data.json",
params={"resource": ip}, timeout=30,
).json()["data"]
asn = network["asns"][0]
holder = requests.get(
"https://stat.ripe.net/data/as-overview/data.json",
params={"resource": f"AS{asn}"}, timeout=30,
).json()["data"]["holder"]
flags = requests.get(
f"http://ip-api.com/json/{ip}",
params={"fields": "status,country,city,isp,org,as,hosting,proxy"}, timeout=30,
).json()
print(f"{ip} AS{asn} {holder}")
print(flags)
RIPEstat 可以查全世界的地址,它返回的 ASN 持有者是最要紧的那条事实。ip-api 的免费接口再补上国家、城市,以及它自己的 hosting 和 proxy 标记。在终端里,whois -h whois.cymru.com " -v EXIT_IP" 一行就能给出 ASN 和持有者。
第三步:读懂结果
- 按数据中心卖的:持有者是主机商或云服务商,
hosting通常为 true。这是对的,也没问题。 - 按 ISP 卖的:持有者应该是一家家庭宽带运营商。有些数据库仍然会把这类地址标成 hosting,因为服务器放在机房里。把 ASN 持有者看得比这个标记更重。
- 按住宅卖的:多取几个样本,你应该看到分散在多家家庭宽带运营商的地址。一连串都来自同一家主机商,是池子被重新贴标签的典型迹象。
- 国家:对支持国家定位的线路,查询结果里的国家应该和你下单时选的一致。免费数据库里的城市数据很粗,所以落在邻近城市不说明任何问题。
单独一个 proxy: true 标记说明不了多少。任何承载过代理流量的地址最后都容易被标上,不管它属于哪个网络。
标签不对的时候
记下 IP、时间,以及查询返回的结果,发给服务商。一家像样的服务商会想要这些信息。
在我们这儿,标错的 IP 由实话实说页上的承诺兜底:告诉我们,我们就把你在这个 IP 上花掉的流量记回你的账户,并把这个地址从池子里撤掉。我们的 ISP 和数据中心线路可以选国家、地区和城市,所以在这两条线路上,国家对不上是我们要修的问题。我们的住宅线路轮换时不能选国家,所以在住宅上要查的是网络类型,而不是国家。
发现了奇怪的结果?把查询输出贴到 Discord,我们公开看。