Skip to content

v0.2.0 — VPN provider expansion

Choose a tag to compare

@rameerez rameerez released this 06 Jul 01:58

OpenASN for Ruby — offline IP origin intelligence: classify any IP as residential, mobile, hosting, VPN, Tor exit, iCloud Private Relay, enterprise gateway, business, education, government, CGNAT, or unknown — in microseconds, with zero API calls and zero runtime dependencies. Data is the CC0 OpenASN dataset, refreshed nightly; every verdict is auditable to its source.

Highlights

  • VPN provider coverage, massively expanded. 34 new provider-published Tier B sources join ProtonVPN, organized into config groups you opt into deliberately:
    • vpn_providers (on by default — exact-IP endpoints published by the providers themselves): Mullvad, IVPN, Private Internet Access, AirVPN, Windscribe, PrivadoVPN, RiseupVPN, WLVPN, WorldVPN, OVPN, Anonine
    • vpn_heavy (opt-in): NordVPN (~35 MB API response)
    • vpn_dns (opt-in — provider-published hostnames resolved via your own DNS): Surfshark, IPVanish, PrivateVPN, PureVPN, TorGuard, FastestVPN, VPNSecure, TunnelBear, StrongVPN, VyprVPN, Giganews, SlickVPN, AzireVPN, VPN.ac, Trust.Zone
    • public_relays (opt-in — volunteer-run, high-churn): VPN Gate, VPNBook, FreeVPN.us
  • New source machinery, still 100% stdlib: bounded ZIP reader for .ovpn archives (64 MB inflate cap), HTML status-page parsers, threaded DNS resolution with an injectable Configuration.dns_resolver hook, and form-POST support with method/header-preserving redirects.
  • Faster lookups: overlay resolution now uses a per-family index precomputed once per snapshot — measurably faster with many overlays enabled.
  • Reliability fix: the default dataset URL is now the tag-addressed releases/download/latest/… form, immune to GitHub's "Latest" badge drifting to a dated snapshot (data repo DECISIONS.md D-REL-1). Pinned by a regression test.

Install

# Gemfile
gem "openasn"
result = OpenASN.lookup("203.0.113.7")
result.verdict          # => :residential_isp
result.infrastructure?  # => false

Full details in CHANGELOG.md.

Full Changelog: v0.1.0...v0.2.0