I sampled 330 IPs from 11 VPS providers | One IP

2026-09-28 · 数据来自公开可复现源 · 作者 One IP

Check an IP's PTR, blocklists, ASN and registration →

After my last post on cloud provider IP ranges, a few people asked the obvious follow-up: what about the VPS companies you actually buy from?

Fair. Those are the names people agonize over when picking a $20 box. So this round I changed the sample frame: instead of cloud providers' published ranges, I sampled the IPv4 space each provider's AS actually announces.

11 providers, 30 IPs each, 330 total. Same seed (20260928), reproducible.

The method, because this round had more traps than the last one

For the provider → ASN mapping I didn't trust memory. Every row has evidence:

ProviderASNEvidence
BandwagonHostAS25820their site footer reads "© 2026 IT7 Networks Inc." = the AS holder name
RackNerdAS36352lg-lax03/lg-ny/lg-dal/lg-sea/lg-atl.racknerd.com all resolve inside this AS
VultrAS20473vultr.com itself resolves there; abuse@constant.com
DigitalOceanAS14061abuse@digitalocean.com; also registered in PeeringDB
LinodeAS63949speedtest.newark.linode.com is in this AS; abuse@linode.com
HetznerAS24940hetzner.com resolves there; abuse@hetzner.com
OVHAS16276ovh.com resolves there; abuse@ovh.net
ContaboAS51167PeeringDB entry; abuse@contabo.de
Oracle CloudAS31898abuse@oracle\* contacts
Alibaba CloudAS45102abuse@alibaba-inc.com
Tencent CloudAS132203abuse@tencent.com

I initially assumed RackNerd sat downstream of MultaCOM (AS35916). Checking their looking glass showed all five regional jump hosts landing in AS36352 ColoCrossing instead. That's exactly why this step gets checked and not remembered.

Sampling: build a /24 candidate pool from each AS's announced prefixes (large prefixes sampled by arithmetic spacing rather than expanded), pick /24s at random, then one random host address inside each.

Then a sanity check on my own work: 330/330 sampled IPs had a BGP origin ASN equal to the target ASN. The sample frame was correct.

Two limitations I have to state up front:

Four measurements: reverse DNS (PTR), eight public blocklists (all.s5h.net, bl.spamcop.net, dnsbl-1.uceprotect.net, dnsbl.dronebl.org, dnsbl.spfbl.net, hostkarma.junkemailfilter.com, psbl.surriel.com, bl.blocklist.de), RDAP registration, and BGP origin from RIPEstat. zen.spamhaus.org is again excluded — it refuses queries from public resolvers.

Finding 1: default reverse DNS is a policy choice, not a probability

ProviderSampleHas PTRPTR rate
BandwagonHost3030100%
Hetzner302996.7%
Contabo302996.7%
RackNerd302376.7%
Vultr301860%
Linode301653.3%
OVH301136.7%
Oracle Cloud30413.3%
DigitalOcean30310%
Alibaba Cloud3000%
Tencent Cloud3000%

163 of 330 have rDNS — 49.4% overall.

But the percentage isn't the interesting part. The naming is:

One group says "we template the whole space"; the other says "if the customer doesn't set it, there isn't one." Two deliberate policies, not luck.

The practical takeaway: if you want reverse DNS for mail, don't expect the provider to hand it to you. Set it in the control panel yourself, with your own domain. BandwagonHost-style blanket coverage is rare, and what you get is *their* template, not yours.

Finding 2: the blocklist number is misleading until you unpack it

40 of 330 hit at least one list — 12.1%. By provider:

ProviderHitsWhich lists
RackNerd24/30dnsbl.spfbl.net ×24, all.s5h.net ×1
Tencent Cloud5/30dnsbl.spfbl.net ×5
DigitalOcean4/30dnsbl.spfbl.net ×3, all.s5h.net ×1, dnsbl.dronebl.org ×1
Vultr2/30dnsbl.spfbl.net ×2
Oracle Cloud2/30hostkarma.junkemailfilter.com ×1, all.s5h.net ×1
BandwagonHost / Hetzner1/30 eachdnsbl.spfbl.net
Alibaba Cloud1/30dnsbl.dronebl.org
Linode / OVH / Contabo0/30—

RackNerd: 24/30. Ugly, right?

Then I looked at where those 24 sit: 24 hits spread across 24 different /24 blocks, one each. Suspiciously even. And 36 of the 40 total hits across all providers come from a single list, dnsbl.spfbl.net.

That pattern doesn't describe 24 spammy machines. It describes a list making a blanket judgement about AS36352's space — wherever you sample, it's listed. That's a property of the list's policy, not of individual hosts. Whether the policy is defensible is not something I can determine from outside.

So "80% listed" and "ColoCrossing is dirty" are separated by one unpacking step. In my previous post, 12 of the 13 hits were also spfbl — same structure.

One inverse observation: Tencent Cloud has 0% reverse DNS but 5/30 listed. No rDNS plus a listing is the combination that actually hurts.

Finding 3: the PTR name, the registrant, and the announcer can be three different companies

Three concrete IPs from the sample:

173.44.54.180    BGP origin AS20473 (Vultr)
                 RDAP registrant = West Coast Internet Provider LLC (block name CC-173-44-54-0-24)
                 PTR = unassigned.quadranet.com

198.20.246.214   BGP origin AS31898 (Oracle)
                 RDAP registrant = HostGator.com LLC (netname HGBLOCK-7)
                 PTR = 198-20-246-214.unifiedlayer.com

204.44.82.41     BGP origin AS36352 (RackNerd/ColoCrossing)
                 PTR = 204.44.82.41.static.quadranet.com

Three names, three different companies. Six of my 330 sample IPs have rDNS pointing at a third-party datacenter domain (quadranet.com shows up once in RackNerd's sample and once in Vultr's; unifiedlayer.com and hostgator.com.br show up in Oracle's space).

The most reasonable explanation is stale rDNS from a previous owner — unassigned.quadranet.com says as much in the name. I can't prove from outside that a customer didn't set it. But one conclusion holds, and it matters more than any number above:

PTR is not ownership evidence. Anyone deciding "whose IP is this" from the reverse name would get burned by this data.

Finding 4: you buy from the brand, someone else holds the addresses

The RDAP registrant distribution says a lot. Within a single provider's 30 sampled IPs:

ProviderRegistrant distribution
RackNerdHostPapa ×16, RackNerd LLC ×9, GCHAO LLC ×1, no registrant ×1
ContaboMNT-CONTABO ×25, Cogent Communications, LLC ×2, LRTC-MNT ×2
Oracle CloudOracle Corporation ×17, HostGator.com LLC ×2, ORCL-MNT ×7
VultrVultr Holdings ×9, The Constant Company ×3, VULTR-MEXICO ×2, no registrant ×4
BandwagonHostIT7 Networks Inc ×24, Cluster Logic Inc ×4, Fiber Logic Inc. ×1
DigitalOceanDigitalOcean, LLC ×28, digitalocean ×2
LinodeLinode ×25, Akamai Technologies ×1, linode-mnt ×4
OVHOVH SAS ×12, OVH Hosting ×4, OVH-MNT ×2, netutils-mnt ×3
Alibaba CloudAlibaba Cloud (Singapore) ×12, Alibaba Cloud LLC ×9, Alibaba Cloud HK ×5
Tencent Cloud27/30 have no registrant entity (APNIC objects carry IRT/technical contacts with individual names)

Look at RackNerd again: 16 blocks registered to HostPapa, only 9 to RackNerd LLC — consistent with the BGP layer, where AS36352's holder is HostPapa's ColoCrossing.

Not a defect. It's how this business works: small providers rent rack space and address space, and handle sales and support themselves. Two practical consequences:

1. The abuse escalation path is one layer longer. Before disputing a misclassified IP, check RDAP to see whether the abuse contact is the provider or the upstream datacenter. 2. Who held this block previously shapes its reputation. The Oracle space still carrying HostGator registrations is the live example: they didn't acquire a clean block, they acquired a block with history.

Tencent's 27 unparsed records turned out to have no registrant entity at all — APNIC-style objects list administrative/technical contacts with individual people's names (James Tian, Jimmy Xiao). Abuse lookup goes through the IRT object. I can only record the structure; I can't verify the names.

One metric I threw away

I had computed "share of IPs whose RDAP discloses an abuse role" and got 330/330 — 100%.

Too clean. I rechecked ten of them with a strict test: 0/10.

The gap: my first check was "does the string abuse appear anywhere in the JSON". It does — in remarks, in email addresses, in IRT reference names. It does not mean "an entity is labelled with the abuse role". The number was fabricated by my own parser, so the metric is gone.

I'm keeping this in the post because it's the failure mode most likely to slip through in work like this: when a ratio comes out exactly 100% or exactly 0%, suspect your check before you write your conclusion.

What I did not measure

The 330 raw records and the sampler are public: data vps-audit-2026-09.json (CC BY 4.0). The sampler and the same dataset are on GitHub: mazihua-lgtm/vps-ip-audit-2026-09. The seed is in the script; re-running reproduces the same sample.

I normally run these checks in my own tool: pureip.app/ip — IP reputation lookup with PTR, blocklists, ASN and registration on one page. This 330-IP sample is a byproduct of it.


Disclosure: I build and maintain pureip.app, an IP lookup and network diagnostics toolbox — these 330 records are a byproduct of it. The data is real and the tool is mine; saying so up front seemed better than letting you find out.

One IP 是面向 VPS 与网络玩家的免费在线工具箱:IP 纯净度查询、风险评分、AI 服务连通性检测、全球 Ping、DNS/CDN、WHOIS。基于 Cloudflare Workers,无需注册。

原始数据与采集脚本:ip-audit-2026-09.json(288 条记录)。想补查别的云厂商,发邮件到 agent@pureip.app。