Is This IP a Proxy? Reading the proxy Signal Without Blanket Blocks
Blanket-blocking every address tagged proxy treats an exit observation as a person-level verdict. On IP99 by ThreatHunter, proxy means something narrower: this address is currently being used as a proxy exit β often beca
Blanket-blocking every address tagged proxy treats an exit observation as a person-level verdict. On IP99 by ThreatHunter, proxy means something narrower: this address is currently being used as a proxy exit β often because it appeared in proxy supply being sold. That is not a static commercial VPN exit, a dial-up rotation pool, or a malware-hijacked household, and not a reason to hard-ban a whole building that shares the egress.
This walkthrough stays on free, no-key GET /v1/ip/{ip}. JSON samples were verified on 11 November 2026 UTC; run the curls yourself for a live snapshot. Notes: IP99, API, detect proxy / VPN, IP risk score.
What proxy is (and what it is not)
IP99's free lookup returns a 0β100 risk.score for freshness and strength of verifiable risk evidence, not attacker probability. risk.level follows the score (0 β none, 1β29 β low, 30β69 β medium, 70β100 β high). Signals appear only when they hit. Always branch on evidence_state (active / stale / none) before the score: score 0 + none is a coverage gap, not a clean bill of health. Official API wording: proxy = this address is currently being used as a proxy exit (often from observed proxy supply).
| slug | Meaning | Typical disposition |
|---|---|---|
proxy |
Address currently used as a proxy exit | Step-up or block by business cost; do not ban a whole building |
vpn |
Static commercial VPN exit | Product decision; often step-up, not refuse |
dialup_pool |
Dial-up / redial rotation pool | Supply-side rotation (often DYN/MOB) |
hijacked_proxy |
Malware-hijacked egress; owner is the victim | Challenge, do not ban the account |
osint |
Listed by a public intelligence source | Step-up; not a synonym for proxy
|
hosting / mobile
|
Network attributes | Not risk verdicts alone |
crawler |
Search crawler egress | Benign; does not score |
False equivalents:
-
proxyβ "this user is an attacker." The score is evidence freshness and strength, not person-level attribution. Shared egress means one ban can be one building. -
proxyβvpn.vpnis a static commercial VPN exit, often in IDC /hostingspace and stable for weeks.proxyis observed exit use, including rotating residential supply. -
proxyβdialup_pool. A dial-up pool is the same address being redialed for new IPs β its own slug, often on DYN or MOB. -
proxyβhijacked_proxy. That slug means compromise; the account holder is typically the victim, so challenge rather than auto-ban. -
hostingon IDC βproxy. Public DNS and ordinary cloud servers sit in hosting space every day with score0and no proxy-class evidence.
Free /v1/ip does not return share_tier, evidence[], historical ?at=, honeypot_scan, honeypot_credential, or ipv6_range (Pulse / professional only). On the free tier, lean on evidence_state, score/level, signal type, usage_type, and your own velocity / device checks.
Hosting without a proxy vs a datacenter proxy exit
curl https://ip99.com/v1/ip/8.8.8.8
Verified 11 November 2026 UTC:
{
"ip": "8.8.8.8",
"computed_at": "2026-11-11T09:58:38Z",
"evidence_state": "none",
"geo": {
"continent": "NA",
"country": "US",
"region": "California",
"city": "Mountain View",
"tz": "America/Los_Angeles"
},
"network": { "asn": 15169, "usage_type": "IDC" },
"risk": {
"score": 0,
"level": "none",
"signals": ["hosting"]
}
}
hosting here is a network attribute on public DNS. evidence_state: none with score 0 means no verifiable proxy-class evidence on file β not "safe," and not proxy. "Block all IDC" would refuse this address for the wrong reason.
Now a Paris datacenter address whose live lookup carries proxy (alongside hosting and osint):
curl https://ip99.com/v1/ip/178.20.30.146
Verified 11 November 2026 UTC:
{
"ip": "178.20.30.146",
"computed_at": "2026-11-11T09:58:39Z",
"evidence_state": "active",
"geo": {
"continent": "EU",
"country": "FR",
"region": "Γle-de-France",
"city": "Paris",
"tz": "Europe/Paris"
},
"network": { "asn": 46475, "usage_type": "IDC" },
"risk": {
"score": 84,
"level": "high",
"signals": ["hosting", "osint", "proxy"]
}
}
Same IDC + hosting space as many VPN exits, but the slugs here are proxy and osint, not vpn. Branch on each matched signal. Scores decay β a documented October capture of this address scored 99 β so re-curl for a live snapshot.
Most new proxy supply is not in that IDC slice. The official API docs include a residential (DYN) demo whose documented capture carried proxy alone (last octet masked: 86.111.136.x, ASN 15547, CH / Valais / Sitten; score 86 / high in the 17 September 2026 sample). A hosting-only blocklist under-covers that majority.
What the weekly capture mix says
Between 4β10 November 2026 (UTC), IP99 captured 10,561,845 new proxy-class exit addresses (+2% vs the previous 7 days). By usage type: 80.0% residential (8,445,664), 12.1% mobile (1,280,337), 3.9% gateway/NAT (412,561), 3.2% datacenter (338,371). 59 upstream sources. Figures generated 11 November 2026, 09:36 UTC. Source: proxy-exits. Aggregates only; no address lists.
That count is first-party proxy-class observation (proxy, VPN, dial-up pool, cloud phone, or hijacked shared proxy) β newly seen in the window, not a global census, same IP counted once. More than 92% of newly seen exits sit in residential or mobile space, so a datacenter blocklist or a blanket proxy ban over-punishes shared egress and still under-covers most new supply.
A practical branch (evidence_state first)
Official triage order: evidence_state β score/level β signal type β usage_type. Generic guidance (not a contract): score 0 β do not stamp "clean"; 1β29 β observe; 30β69 β captcha / throttle / second factor; 70β100 β block only when business cost allows, and not at building scale on shared egress. Score meaning: IP risk score.
- Read
evidence_state, thenrisk.signalsandnetwork.usage_type. - If
proxyisactive: treat it as a current exit, not attacker probability. Prefer step-up plus velocity / device checks over hard-banning shared building egress. Branch separately ifvpn,dialup_pool, orhijacked_proxyalso hit. - If
proxyisstale: weak, expired feature only (score0). The address may already be back with an ordinary subscriber β do not apply an old exit as a fresh ban. -
hostingon IDC withoutproxy/vpn/dialup_poolis a network attribute, not a proxy verdict.vpnwithoutproxyis a static commercial VPN exit, a different playbook than rotating residential supply. - If
hijacked_proxyis also present: challenge; do not ban the account (the owner is the victim). - Never mark score
0+evidence_state: noneas "trusted clean." Re-query at decision time and storecomputed_atrather than caching a verdict for days.
Anonymous quota is 500 lookups/day per client IP (60/min); a free logged-in key raises the daily cap to 5,000/day. Check remaining with GET https://ip99.com/v1/me or the X-Daily-* headers. OpenAPI: https://ip99.com/openapi.json. Pricing: https://ip99.com/en/pricing.
Do not treat IP99 scores as identical to other ThreatHunter datasets β this article only claims what free /v1/ip and the cited product pages document.
Try it
curl https://ip99.com/v1/ip
curl https://ip99.com/v1/ip/8.8.8.8
curl https://ip99.com/v1/ip/178.20.30.146
curl https://ip99.com/v1/me
IP99 is a ThreatHunter product. Use the free lookup to separate a current proxy exit (proxy) from commercial VPN static exits, dial-up rotation pools, hijacked-victim egress, ordinary hosting, and leftover labels after an address changed hands β before a blanket block bans a customer who shares the building's egress. Start at https://ip99.com; read detect proxy / VPN, proxy-exits, and https://ip99.com/api.
Originally published by Dev.to Security. Aggregated on AIWithGhost for educational purposes β full credit and traffic to the original publisher.