LW IT Solutions logo LW IT Solutions logo LW IT Solutions
« Blog Overview /Digital Marketing/Tutorials / Verifying Crawler Addresses: Reverse DNS, Published Ranges,...

Verifying Crawler Addresses: Reverse DNS, Published Ranges, and Where Each Fails

Verifying Crawler Addresses: Reverse DNS, Published Ranges, and Where Each Fails

Management Summary

Crawlers are automated programs that visit websites for search engines, AI services and other purposes. Their stated name can be copied, so a claimed identity alone is not a reliable basis for access decisions. Checking the connection address against official service information helps establish where a request came from. The article explains the evidence and its limits: a failed lookup is not proof of deception, and a confirmed operator does not mean every request should receive unrestricted access.

Contents
  1. DNS verification: name, boundary and forward check
  2. Range lists and the correct category
  3. What the historical sample establishes
  4. Identity and access policy are separate decisions
  5. A reproducible manual cross-check
  6. Questions and answers
  7. Sources

The User-Agent is a client-supplied label naming the browser or automated program. A user agent such as Googlebot starts as a claim supplied by the client. The requested path also comes from the request. The connection address determined by the server is stronger evidence, provided any upstream proxy has been handled correctly. Only then can the address be compared with the named service’s documented infrastructure.

Two usual checks are a documented DNS naming pattern with forward confirmation and a match against official IP ranges. A registry entry such as “Google LLC” or “Microsoft Corporation” adds context but does not identify a particular crawler.

Crawler verification: evidence before a verdict
A range match confirms the published infrastructure category. Historical examples are not a current allowlist.

DNS verification: name, boundary and forward check

A reverse lookup returns a PTR name for an IP address. That name alone is insufficient: the address block’s administrator can set a PTR without controlling the domain named in the record. Verification therefore needs three steps:

  1. The PTR lookup starts with the actual source address.
  2. The name is compared with the currently documented pattern for the appropriate crawler category. Google’s common crawlers, special crawlers and user-triggered fetchers are distinct categories.
  3. The accepted name is resolved through A or AAAA records. The response must contain the original address.

The domain boundary matters: crawl.example.googlebot.com is beneath googlebot.com; googlebot.com.example.org is not. An arbitrary successful DNS round trip establishes an address-to-name relationship, not Googlebot identity. A google.com suffix alone is also insufficient for that specific classification.

This method does not require a downloaded range list, but still needs maintenance. Naming patterns can change, DNS responses expire, and lookup failures must remain distinct from negative responses.

Range lists and the correct category

Official JSON files contain IPv4 and, for some services, IPv6 prefixes in CIDR notation, such as 66.249.66.0/27. Verification tests whether an address falls within a network. A plain text comparison is insufficient.

Google now links to common-crawlers.json for common crawlers, a separate special-crawler list, and several lists for user-triggered fetchers and agents. A match first establishes membership of the published infrastructure category. A shared list does not necessarily distinguish every individual user agent.

OpenAI publishes separate lists for GPTBot, OAI-SearchBot and ChatGPT-User. The purposes differ: model training, search and certain user actions. A missing PTR is therefore not automatically suspicious. For services without a documented DNS verification method, the corresponding official list is the relevant evidence.

What the historical sample establishes

The saved dataset from 5 September 2026 contains twelve queried lists with 2,560 prefix entries; 2,143 belonged to four Google lists available at the time. These totals were recalculated from the saved counts during this revision. Prefix entries are neither unique IP addresses nor necessarily disjoint networks. The count does not reliably establish traffic volume, architecture or update frequency.

For 20.171.207.1 and 52.230.152.1, the historical output records GPTBot range matches without a resolved PTR. The saved field does not distinguish an absent PTR from a lookup failure. The Microsoft registry entry also does not prove a particular cloud tenancy agreement. All address findings remain historical observations, not a current allowlist.

8.8.8.8 illustrates the difference between organisation and function: Google documents this address as a public DNS resolver. A successful DNS round trip and Google registry entry do not make it Googlebot. “Googlebot” was the selected test claim in that check, not evidence of an actual HTTP request from the resolver.

64.233.173.1 appeared in the historical Google user-triggered fetcher list and had a corresponding google-proxy name. That establishes neither a specific visitor action nor automatic Googlebot identity. The tool’s classification was too broad at precisely this point.

Identity and access policy are separate decisions

robots.txt controls cooperative crawlers and remains useful for that purpose. It is not an access barrier. A verified operator does not mean every service follows the same robots.txt rules: Google distinguishes common crawlers, special cases and user-triggered fetchers. Googlebot does not support crawl-delay, so that directive does not distinguish Googlebot from a user-triggered fetch.

Missing or contradictory verification does not automatically establish malicious behaviour. Depending on the purpose, unwanted requests can be addressed through authentication, rate limits or rules at the web server or upstream protection layer. An IP block is one option, not a complete defence. There is no universal shared crawl budget covering every operator.

A reproducible manual cross-check

The example uses an IPv4 address shown in Google’s documentation. The PTR name must come from the actual response; category and name-boundary checks precede forward resolution. Downloading the JSON file alone does not perform a CIDR match.

Shell
dig +short -x 66.249.66.1
dig +short A crawl-66-249-66-1.googlebot.com
dig +short AAAA crawl-66-249-66-1.googlebot.com
curl --fail --show-error --silent --location --max-time 20 \
  https://developers.google.com/static/crawling/ipranges/common-crawlers.json

The Crawler IP Verifier collects DNS, range and registry findings. Two limitations were reproduced during this revision: a forward-confirmed Google proxy name could be classified too broadly as Googlebot, and a failed list download could still produce a “forged” verdict. Individual evidence and freshness therefore matter more than the summary label. The cache reloads on demand after approximately 24 hours; this does not guarantee a successful update every day.

Questions and answers

Which address applies behind several proxies?

The immediate connection peer must first be an explicitly trusted proxy. The forwarded chain is then processed from right to left while each current sender is trusted to report the preceding address. The result is neither universally the rightmost nor the leftmost entry. An arbitrary incoming X-Forwarded-For header must not replace the source address.

Apache provides mod_remoteip for this purpose. Trust boundaries need suitable RemoteIPTrustedProxy or RemoteIPInternalProxy settings; RemoteIPHeader alone is not a secure configuration. The module can then use the verified client address for logging and access control.

Is DNS verification needed on every request?

Synchronous DNS checks make the request wait for the DNS answer. This adds latency and can stall during failures. A local range check, time-limited DNS caches and later log analysis are usually more suitable. Processing is not free: timeouts, cache age and failure states require planning. Apache disables general HostnameLookups by default.

What does IPv6 require?

Verification must support IPv6 prefixes and the ip6.arpa reverse zone. Equivalent address representations need normalisation: 2001:db8::1 and 2001:0db8:0:0:0:0:0:1 identify the same address. Plain string equality can incorrectly fail.

What does a missing range match mean?

Initially, only that the list used contains no match. A sound assessment also needs the correct category, a successful download, trusted provenance and the copy’s age. Provider publication time, local retrieval time and last successful retrieval are different facts. A documented DNS check can provide additional evidence where available; otherwise a failed check remains “not verified” rather than automatically “forged”.

Lukas Wojcik

Lukas Wojcik

Systems architect and technology enthusiast specializing in scalable tracking solutions, GMP Stack (GA4 & GTM), and robust backend architectures. Advocate for clean code and privacy-first design.

Get in touch

A question or an idea for a web project? Tell me a little about it. This form uses reCAPTCHA to protect against spam.

Write a comment

Practical experience and questions about the implementation are welcome here.

The email address is not published. Required fields are marked with an asterisk.