Skip to content

Releases: openasn/openasn-ruby

v0.3.0 — analytics-first ergonomics

Choose a tag to compare

@rameerez rameerez released this 07 Jul 02:50

Ergonomics release, driven by dogfooding the analytics/enrichment use case — surfacing IP origin next to every IP an admin already looks at — in a production Rails app.

New API

r = OpenASN.try_lookup(user.signup_ip)  # nil-safe: nil/blank/garbage in, nil out

r.label        # => "Residential ISP" / "VPN" / "Hosting / datacenter" — for admin UIs
r.flag_names   # => [:bad_asn, :vpn_provider] — ASN signals, decoded to names
r.bad_asn?     # => true — no more FORMAT.md bit arithmetic
r.flag?(:cdn)  # named check for any ASN flag

Result#to_h now includes flag_names (append-only key — shadow logs stay parseable).

Changed

README reframed analytics-first: enriching admin panels and audit trails is the primary documented use case; acting on the signal (step-up verification, rate limits) is the optional later step.

Full details in CHANGELOG.md.

Full Changelog: v0.2.0...v0.3.0

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