On a five-day run of 1c65656 on the live feed (27 October to 1 November), 27,783 WHOIS lookups failed:
20,673 were RIPE answering %ERROR:201: access denied: RIPE has blocked the test host's address.
About 3,600 were LACNIC refusing the connection.
158 were IANA resetting the connection.
Cause.ASNFetcher in internal/routewatch/asnfetcher.go keeps one interval for every registry. A success at any registry halves it, down to one second. So a registry that refuses is asked again within seconds, about three times a minute for days. RIPE blocks an address for good when it keeps passing its limit (the link is in internal/whois/whois.go).
Recommended fix. When a registry refuses a query, the fetcher asks that registry nothing for an hour. A refusal is an %ERROR:201: or %ERROR:202: line, or a refused or reset connection. Lookups at the other registries go on. An AS whose registry is paused stays due and is fetched after the pause. A lookup an IP page asks for also waits out the pause.
Definition of done.
After a refusal, the fetcher sends that registry no query for an hour, and keeps fetching from the others.
Tests with a fake clock that fail on the current code show both.
The code stays in packages routewatch (its doc: it holds the ASN WHOIS fetcher) and whois (WHOIS lookups). No new package.
README text and comments about the fetcher match the code.
Model: opus-5-5
On a five-day run of `1c65656` on the live feed (27 October to 1 November), 27,783 WHOIS lookups failed:
- 20,673 were RIPE answering `%ERROR:201: access denied`: RIPE has blocked the test host's address.
- About 3,600 were LACNIC refusing the connection.
- 158 were IANA resetting the connection.
**Cause.** `ASNFetcher` in `internal/routewatch/asnfetcher.go` keeps one interval for every registry. A success at any registry halves it, down to one second. So a registry that refuses is asked again within seconds, about three times a minute for days. RIPE blocks an address for good when it keeps passing its limit (the link is in `internal/whois/whois.go`).
**Recommended fix.** When a registry refuses a query, the fetcher asks that registry nothing for an hour. A refusal is an `%ERROR:201:` or `%ERROR:202:` line, or a refused or reset connection. Lookups at the other registries go on. An AS whose registry is paused stays due and is fetched after the pause. A lookup an IP page asks for also waits out the pause.
**Definition of done.**
- After a refusal, the fetcher sends that registry no query for an hour, and keeps fetching from the others.
- Tests with a fake clock that fail on the current code show both.
- The code stays in packages `routewatch` (its doc: it holds the ASN WHOIS fetcher) and `whois` (WHOIS lookups). No new package.
- README text and comments about the fetcher match the code.
Model: opus-5-5
clawbot
self-assigned this 2026-11-02 00:16:15 +01:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
On a five-day run of
1c65656on the live feed (27 October to 1 November), 27,783 WHOIS lookups failed:%ERROR:201: access denied: RIPE has blocked the test host's address.Cause.
ASNFetcherininternal/routewatch/asnfetcher.gokeeps one interval for every registry. A success at any registry halves it, down to one second. So a registry that refuses is asked again within seconds, about three times a minute for days. RIPE blocks an address for good when it keeps passing its limit (the link is ininternal/whois/whois.go).Recommended fix. When a registry refuses a query, the fetcher asks that registry nothing for an hour. A refusal is an
%ERROR:201:or%ERROR:202:line, or a refused or reset connection. Lookups at the other registries go on. An AS whose registry is paused stays due and is fetched after the pause. A lookup an IP page asks for also waits out the pause.Definition of done.
routewatch(its doc: it holds the ASN WHOIS fetcher) andwhois(WHOIS lookups). No new package.Model: opus-5-5