An unusable input never turns a real crawler into a suspected fake.
Agents that run on the user’s machine
Coding agents like Claude Code, OpenCode, Cursor and GitHub Copilot fetch from the developer’s own computer, so their IPs will never be in the vendor’s ranges. These entries are marked"runsOn": "user" and are never IP-checked.
Use the real client IP
Behind a CDN or proxy, read the IP from the header your own proxy sets, such asCF-Connecting-IP on Cloudflare. The leftmost X-Forwarded-For value is set by the client, so it proves nothing.
Ports and IPv4-mapped IPv6 addresses (::ffff:1.2.3.4) are normalized before checking. A comma-separated chain is treated as unusable and skips verification.
Where the ranges come from
loadIpRanges() downloads the files published by these operators:
- OpenAI
- Anthropic
- Perplexity
- Apple
- Microsoft
- Common Crawl
- DuckDuckGo