A Python library for verifying whether an IP address belongs to a specific ASN's announced prefixes. Includes local caching and asynchronous API support using RIPEstat data.
Project description
ipasnmatcher
A Python package to verify if an IP address belongs to a specific ASN's network ranges using RIPEstat data.
Features
- Lazy loads prefix data on first match for faster initialization
- Fast IP-to-ASN matching with optimized network range checks
- Built-in caching to minimize API requests
- Optional strict mode to consider only active prefixes
- Uses accurate data from RIPE NCC
- Supports both synchronous and asynchronous usage
Installation
pip install ipasnmatcher
Usage
Synchronous Example
from ipasnmatcher import ASN
# Create an ASN object (prefix data will be lazy-loaded on first match)
asn = ASN("AS151981")
# The first match triggers data loading from RIPEstat API (and caches it)
print(asn.match("153.53.148.45")) # True or False
Asynchronous Example
import asyncio
from ipasnmatcher import AsyncASN
async def main():
# Create an async ASN object (lazy-loads on first async_match)
async_asn = AsyncASN("AS15169")
# The first async_match call triggers async data loading
result = await async_asn.async_match("8.8.8.8")
print(result) # True or False
asyncio.run(main())
Advanced Usage
asn = ASN(
asn="AS15169", # ASN (e.g., Google)
strict=True, # Only consider active prefixes
cache_max_age=7200 # Cache duration in seconds (2 hours)
)
Combining ASN Objects
You can combine multiple ASNs using the + operator.
When combined:
- If any of the ASNs has
strict=True, the resulting combined ASN will also be strict. - The combined ASN’s
max_cache_agewill be the minimum of the values from the ASNs being merged.
from ipasnmatcher import ASN
google = ASN("AS15169", strict=False, cache_max_age=7200)
cloudflare = ASN("AS13335", strict=True, cache_max_age=3600)
combined = google + cloudflare
# Combined inherits strict=True and cache_max_age=3600
print(combined.match("8.8.8.8")) # True (Google)
print(combined.match("1.1.1.1")) # True (Cloudflare)
repr() shows the full combination:
ASN(asn='AS15169', strict=False, cache_max_age=7200) + ASN(asn='AS13335', strict=True, cache_max_age=3600)
Parameters
ASN(asn: str, strict: bool = False, cache_max_age: int = 3600)
asn: ASN identifier in format"AS12345"strict: IfTrue, only prefixes currently active are considered (default:False)cache_max_age: Cache lifetime in seconds (default:3600)
How it works
- Data is lazy-loaded — the first
match()orasync_match()triggers prefix loading from the RIPEstat API. - Prefix data is cached locally in
.ipasnmatcher_cache/{asn}.json. - Subsequent matches use cached data if it’s fresh (not older than
cache_max_age). - Matching is done efficiently using Python’s
ipaddressmodule.
Use Cases
- Network security and traffic validation
- CDN traffic routing based on ASN ownership
- IP classification by network operators
- Compliance monitoring of network connections
GitHub
Star or fork this project on GitHub.
License
This project is licensed under the MIT License. See the LICENSE file for details.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ipasnmatcher-1.0.0.tar.gz.
File metadata
- Download URL: ipasnmatcher-1.0.0.tar.gz
- Upload date:
- Size: 5.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fbee84b19462c790a52bd5314ad69dcd1b3767fb8f534061ccce4ddb3c0828f0
|
|
| MD5 |
e9d2f7203e44fbb78898fc37a57d0d54
|
|
| BLAKE2b-256 |
537ce4f9132e22a1e43554885eb9ce9f5ea4126a3e410e851ed31b5b78a33f67
|
File details
Details for the file ipasnmatcher-1.0.0-py3-none-any.whl.
File metadata
- Download URL: ipasnmatcher-1.0.0-py3-none-any.whl
- Upload date:
- Size: 7.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ca2ea26a12ff285569dc2ac834dab5f6812027ee6febdf3ad123cf270d3285dd
|
|
| MD5 |
05e571aebd922dea890ab0b7b3dcdbf9
|
|
| BLAKE2b-256 |
99e95cd4990472bf481009fe4bd9783a60d3e971fca164aa46778a3a20eb1e9e
|