The IP lookup now checks the public VPN server lists of Mullvad, NordVPN, Private Internet Access and IVPN, plus X4BNet's community list. Each is downloaded once a day. List gains VPN; each result gains flags.is_vpn and vpn_providers ([] when there are none).
Real downloads gave: ivpn 264 addresses, mullvad 1,143, nordvpn 7,033, pia 1,653, x4bnet 3,330,492 (6,898 ranges), x4bnet_v6 465 ranges.
Beyond the diff:
vpn_providers holds list names, so an address in X4BNet's IPv6 file shows x4bnet_v6.
Listing.VPN is not serialised, so ip_lists entries keep their three fields.
The v2ray addresses of Mullvad and IVPN count as server addresses. An IVPN host's ipv6 object holds only an address inside the VPN, so it is not read.
Disclosures:
Judgement call: X4BNet publishes IPv4 and IPv6 in two files, so they are two lists, following spamhaus_drop and spamhaus_dropv6.
Judgement call: Private Internet Access's signature is neither read nor checked.
Judgement call: a document with no addresses fails the parse, as Onionoo's does.
Rule suppressed: tagliatelle on the structs holding the publishers' field names.
Model: opus-5-5
Closes https://git.eeqj.de/sneak/routewatch/issues/235.
The IP lookup now checks the public VPN server lists of Mullvad, NordVPN, Private Internet Access and IVPN, plus X4BNet's community list. Each is downloaded once a day. `List` gains `VPN`; each result gains `flags.is_vpn` and `vpn_providers` (`[]` when there are none).
Real downloads gave: `ivpn` 264 addresses, `mullvad` 1,143, `nordvpn` 7,033, `pia` 1,653, `x4bnet` 3,330,492 (6,898 ranges), `x4bnet_v6` 465 ranges.
Beyond the diff:
- `vpn_providers` holds list names, so an address in X4BNet's IPv6 file shows `x4bnet_v6`.
- `Listing.VPN` is not serialised, so `ip_lists` entries keep their three fields.
- The v2ray addresses of Mullvad and IVPN count as server addresses. An IVPN host's `ipv6` object holds only an address inside the VPN, so it is not read.
Disclosures:
- Judgement call: X4BNet publishes IPv4 and IPv6 in two files, so they are two lists, following `spamhaus_drop` and `spamhaus_dropv6`.
- Judgement call: Private Internet Access's signature is neither read nor checked.
- Judgement call: a document with no addresses fails the parse, as Onionoo's does.
- Rule suppressed: `tagliatelle` on the structs holding the publishers' field names.
Model: opus-5-5
The IP lookup now checks Mullvad, NordVPN, Private Internet Access, IVPN and X4BNet's community list, each downloaded once a day. Each result has `flags.is_vpn` and `vpn_providers`.
Judgement call: X4BNet publishes IPv4 and IPv6 as two files, so they are two lists, `x4bnet` and `x4bnet_v6`.
Judgement call: Private Internet Access's signature is not read or checked.
Rule suppressed: `tagliatelle` on the structs holding the publishers' field names.
Model: opus-5-5
PASS: the VPN server lists, flags.is_vpn and vpn_providers meet the definition of done of the VPN lists issue and the repo's policies.
Model: opus-5-5
PASS: the VPN server lists, `flags.is_vpn` and `vpn_providers` meet the definition of done of [the VPN lists issue](https://git.eeqj.de/sneak/routewatch/issues/235) and the repo's policies.
Model: opus-5-5
clawbot
merged commit 28ef0275ba into next2026-11-10 12:15:32 +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.
Closes #235.
The IP lookup now checks the public VPN server lists of Mullvad, NordVPN, Private Internet Access and IVPN, plus X4BNet's community list. Each is downloaded once a day.
ListgainsVPN; each result gainsflags.is_vpnandvpn_providers([]when there are none).Real downloads gave:
ivpn264 addresses,mullvad1,143,nordvpn7,033,pia1,653,x4bnet3,330,492 (6,898 ranges),x4bnet_v6465 ranges.Beyond the diff:
vpn_providersholds list names, so an address in X4BNet's IPv6 file showsx4bnet_v6.Listing.VPNis not serialised, soip_listsentries keep their three fields.ipv6object holds only an address inside the VPN, so it is not read.Disclosures:
spamhaus_dropandspamhaus_dropv6.tagliatelleon the structs holding the publishers' field names.Model: opus-5-5
PASS: the VPN server lists,
flags.is_vpnandvpn_providersmeet the definition of done of the VPN lists issue and the repo's policies.Model: opus-5-5