Python bindings for BGPKIT software. For all software offerings, please check out our GitHub repository at https://github.com/bgpkit.
Original Rust BGPKIT Parser code available at: https://github.com/bgpkit/bgpkit-parser-py
Example:
import bgpkit
parser = bgpkit.Parser(url="https://spaces.bgpkit.org/parser/update-example",
filters={"peer_ips": "185.1.8.65, 2001:7f8:73:0:3:fa4:0:1"})
count = 0
for elem in parser:
count += 1
print(elem)
assert count == 4227
The Parser
constructor takes the following parameters:
url
: the URL or local file path toward an MRT filefilters
: optional a dictionary of filters, available filters are:origin_asn
: origin AS numberprefix
: exact match prefixprefix_super
: exact prefix and its super prefixesprefix_sub
: exact prefix and its sub prefixesprefix_super_sub
: exact prefix and its super and sub prefixes
peer_ip
: peer's IP addresspeer_ips
: peers' IP addressespeer_asn
: peer's ASNtype
: message type (withdraw
orannounce
)ts_start
: start unix timestampts_end
: end unix timestampas_path
: regular expression for AS path string
cache_dir
: optional string for specifying a download cache directory
Each returning item has the following field:
timestamp
: float, unix timestampelem_type
: str,A
, announcement;W
, withdrawnpeer_ip
: str, peer IP addresspeer_asn
: int, peer ASNprefix
: str, the announced/withdrawn IP prefixnext_hop
: str or None, next hop IP addressas_path
: str or None, AS path str, e.g.60924 6939 58715 63969 135490
origin_asns
: [int] or None, array of originating ASNs of the prefixorigin
: str or None,IGP
,EGP
, orINCOMPLETE
local_pref
: int or None, local preferencemed
: int or None, multi-exitmultiple exit discriminatorcommunities
: [str] or None, community values, e.g.['60924:6', '60924:150', '60924:502', '60924:2002', 'ecop:67:0:000000000000']
atomic
: str,AG
for atomic aggregate, andNAG
for non-atomic aggregateaggr_ip
: str or None, aggregator IP addressaggr_asn
: int or None, aggregator ASN
Original Rust version BGPKIT Broker code available at: https://github.com/bgpkit/bgpkit-broker
Example:
import bgpkit
broker = bgpkit.Broker()
items = broker.query(ts_start="1634693400", ts_end="2021-10-20T01:30:00")
for item in items:
print(item)
print(len(items))
assert len(items) == 58
Available fields:
Broker()
api_url
: the base URL for the BGPKIT Broker instance. Default:https://api.broker.bgpkit.com/v2
page_size
: the number of items per API call (no need to change it). Default: 100.
query()
ts_start
: start timestamp for MRT file, UNIX timestamp or string formatts_end
: end timestamp for MRT file, UNIX timestamp or string formatcollector_id
: collector name, e.g.rrc00
orroute-views2
data_type
:rib
orupdate
BGPKIT ROAS lookup API provides lookup for historical RPKI ROAS data lookup. The following example shows a query that
asks for all the validated ROA payload for RIPE NCC on the date of 2018-01-01
.
import bgpkit
roas = bgpkit.Roas()
data = roas.query(debug=True, asn=3333, date="2018-01-01")
for entry in data:
print(entry)
assert len(data) == 10
{'tal': 'ripencc', 'prefix': '193.0.0.0/21', 'asn': 3333, 'max_len': 21, 'date_ranges': [['2015-03-10', '2016-01-26'], ['2016-01-30', '2018-12-27'], ['2019-01-03', '2019-10-21'], ['2019-10-23', '2020-02-23'], ['2020-02-25', '2020-04-05'], ['2020-04-07', '2020-08-02'], ['2020-08-04', '2021-04-21'], ['2021-04-23', '2021-04-24'], ['2021-04-28', '2022-02-26']]}
{'tal': 'ripencc', 'prefix': '193.0.10.0/23', 'asn': 3333, 'max_len': 23, 'date_ranges': [['2015-03-10', '2016-01-26'], ['2016-01-30', '2018-12-27'], ['2019-01-03', '2019-10-21'], ['2019-10-23', '2020-02-23'], ['2020-02-25', '2020-04-05'], ['2020-04-07', '2020-08-02'], ['2020-08-04', '2021-04-21'], ['2021-04-23', '2021-04-24'], ['2021-04-28', '2022-02-26']]}
{'tal': 'ripencc', 'prefix': '193.0.12.0/23', 'asn': 3333, 'max_len': 23, 'date_ranges': [['2015-03-10', '2016-01-26'], ['2016-01-30', '2018-12-27'], ['2019-01-03', '2019-10-21'], ['2019-10-23', '2020-02-23'], ['2020-02-25', '2020-04-05'], ['2020-04-07', '2020-08-02'], ['2020-08-04', '2021-04-21'], ['2021-04-23', '2021-04-24'], ['2021-04-28', '2022-02-26']]}
{'tal': 'ripencc', 'prefix': '193.0.18.0/23', 'asn': 3333, 'max_len': 23, 'date_ranges': [['2015-03-10', '2016-01-26'], ['2016-01-30', '2018-12-27'], ['2019-01-03', '2019-10-21'], ['2019-10-23', '2020-02-23'], ['2020-02-25', '2020-04-05'], ['2020-04-07', '2020-08-02'], ['2020-08-04', '2021-04-21'], ['2021-04-23', '2021-04-24'], ['2021-04-28', '2022-02-26']]}
{'tal': 'ripencc', 'prefix': '193.0.20.0/23', 'asn': 3333, 'max_len': 23, 'date_ranges': [['2015-03-10', '2016-01-26'], ['2016-01-30', '2018-12-27'], ['2019-01-03', '2019-10-21'], ['2019-10-23', '2020-02-23'], ['2020-02-25', '2020-04-05'], ['2020-04-07', '2020-08-02'], ['2020-08-04', '2021-04-21'], ['2021-04-23', '2021-04-24'], ['2021-04-28', '2022-02-26']]}
{'tal': 'ripencc', 'prefix': '193.0.22.0/23', 'asn': 3333, 'max_len': 23, 'date_ranges': [['2015-03-10', '2016-01-26'], ['2016-01-30', '2018-12-27'], ['2019-01-03', '2019-10-21'], ['2019-10-23', '2020-02-23'], ['2020-02-25', '2020-04-05'], ['2020-04-07', '2020-08-02'], ['2020-08-04', '2021-04-21'], ['2021-04-23', '2021-04-24'], ['2021-04-28', '2022-02-26']]}
{'tal': 'ripencc', 'prefix': '193.0.24.0/22', 'asn': 3333, 'max_len': 26, 'date_ranges': [['2017-01-14', '2018-12-27'], ['2019-01-03', '2019-06-24']]}
{'tal': 'ripencc', 'prefix': '193.0.24.0/24', 'asn': 3333, 'max_len': 24, 'date_ranges': [['2017-02-25', '2018-12-27'], ['2019-01-03', '2019-06-24']]}
{'tal': 'ripencc', 'prefix': '2001:610:240::/42', 'asn': 3333, 'max_len': 42, 'date_ranges': [['2015-03-10', '2016-01-26'], ['2016-01-30', '2018-12-27'], ['2019-01-03', '2019-10-21'], ['2019-10-23', '2020-02-23'], ['2020-02-25', '2020-04-05'], ['2020-04-07', '2020-08-02'], ['2020-08-04', '2021-04-21'], ['2021-04-23', '2021-04-24'], ['2021-04-28', '2022-02-26']]}
{'tal': 'ripencc', 'prefix': '2001:67c:2e8::/48', 'asn': 3333, 'max_len': 48, 'date_ranges': [['2015-03-10', '2016-01-26'], ['2016-01-30', '2018-12-27'], ['2019-01-03', '2019-10-21'], ['2019-10-23', '2020-02-23'], ['2020-02-25', '2020-04-05'], ['2020-04-07', '2020-08-02'], ['2020-08-04', '2021-04-21'], ['2021-04-23', '2021-04-24'], ['2021-04-28', '2022-02-26']]}
Available query fields:
Roas()
api_url
: the base URL for the BGPKIT ROAS instance. Default:https://api.roas.bgpkit.com
query()
prefix
: prefix to query instr
asn
: AS number to query inint
tal
: trust anchor to query instr
, available values:ripencc
,arin
,apnic
,afrinic
,lacnic
date
: date to query, format:YYYY-MM-DD
, e.g.2022-01-01
max_len
: filter results to only VRP's with specific max lengthdebug
: boolean toggle to display debug information, defaultFalse
Install python-build
module:
python3 -m pip install build twine
Build current package:
python3 -m build
Upload to PyPi (needs credentials)
python3 -m twine upload dist/*