BGPKIT - Open-Source BGP Data Toolkit - BGPKIT

4 min read Original article ↗

High-performance tools for BGP data discovery, parsing, and investigation. Built by network operators, for network operators.

Step 1

Discover files (Broker)

Select a time window, collectors, and dump type to get deterministic URLs.

ts_start / ts_end → URL list

Step 2

Parse data (Parser)

Stream parse MRT/BGP/BMP and apply filters early to reduce CPU and output.

BgpElem iterator + filters

Step 3

Investigate (Monocle)

Use a single CLI for search, parse, inspect, and RPKI validation with local caching.

inspect / search / rpki

discover parse investigate

Get Started with BGPKIT SDKs

Search BGP archives and parse data with our SDKs. Available in Rust and Python.

Search BGP files and find relevant announcements

use bgpkit_broker::BgpkitBroker;
use bgpkit_parser::BgpkitParser;

// Find UPDATE files within a time window, then parse them.
// Broker timestamps accept RFC3339, unix, or pure dates.
let broker = BgpkitBroker::new()
    .ts_start("2024-01-01T00:00:00Z")
    .ts_end("2024-01-01T01:00:00Z")
    .data_type("updates");

// Parse each matching file and print elements originated from AS13335.
for item in broker.into_iter().take(3) {
    let parser = BgpkitParser::new(&item.url)
        .unwrap()
        .add_filter("origin_asn", "13335").unwrap();

    for elem in parser {
        println!("{}", elem);
    }
}

Search BGP files and find relevant announcements

import bgpkit

# Parse an MRT file with filters (remote URL)
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

All-in-one CLI tool for BGP investigation

# Install (macOS Homebrew)
brew install monocle

# Search for announcements for a prefix during a time window
monocle search -t 2024-01-01T00:00:00Z -T 2024-01-01T00:01:00Z   -c rrc00 -p 1.1.1.0/24 -m a

# Parse a single (remote) MRT file with filters
monocle parse https://data.ris.ripe.net/rrc00/2024.01/updates.20240101.0000.gz   -p 1.1.1.0/24 -m a | head -5

# Unified AS / prefix inspection
monocle inspect 13335
monocle inspect 1.1.1.0/24

# RPKI validation (prefix + ASN)
monocle rpki validate 1.1.1.0/24 13335

# Help
monocle --help

Why Choose BGPKIT?

Built for performance, designed for simplicity

High Performance

Built in Rust for maximum speed. Comparable to C-based implementations like bgpdump.

Easy to Use

Ergonomic SDKs that get you started with just a few lines of code. Battery-included with remote file support.

Actively Maintained

Regular updates, bug fixes, and support for the latest BGP RFCs. Community-driven development.

Open Source

MIT licensed and completely open source. Use it anywhere, contribute back, or build commercial products.

High-performance MRT/BGP/BMP message parsing library with ergonomic SDKs. Built for speed, designed for simplicity.

Multiple Formats

Supports MRT, BGP, BMP messages. Handles both local and remote files with automatic decompression.

Powerful Filtering

Built-in filter system for prefix, ASN, peer, time range, and AS path filtering.

Real-time Streaming

Support for real-time data streams including RIS-Live and BMP/OpenBMP messages.

Parse BGP data with filters

use bgpkit_parser::BgpkitParser;

// Filter by IP prefix during parsing (built-in filter mechanism)
let parser = BgpkitParser::new(
    "http://archive.routeviews.org/bgpdata/2021.10/UPDATES/updates.20211001.0000.bz2"
).unwrap()
    .add_filter("prefix", "211.98.251.0/24").unwrap();

for elem in parser {
    println!("{}", elem);
}

Search BGP archives with advanced filters

use bgpkit_broker::BgpkitBroker;

// Configure broker with builder pattern
let broker = BgpkitBroker::new()
    .ts_start("2022-01-01")              // RFC3339, Unix epoch, or pure dates
    .ts_end("2022-01-02T00:00:00Z")
    .collector_id("rrc00,route-views2")  // comma-separated collectors
    .project("riperis")                   // "riperis" or "routeviews"
    .data_type("rib")                     // "rib" or "updates"
    .page_size(100)                       // 1-100000
    .page(1);

// Iterate (auto-pagination)
for item in &broker {
    println!("{}", item);
}

Search and discover BGP archive files across public data collection projects. Real-time indexing with powerful filtering capabilities.

Real-time Indexing

BGP data files are indexed in near real-time with less than 2 minutes delay.

Multiple Data Sources

Indexes data from RouteViews and RIPE RIS with 70+ collectors and 1000+ full-feed peers.

Self-hostable

Deploy your own broker instance with Docker or CLI for custom data sources and privacy.

See through all Border Gateway Protocol (BGP) data with a monocle. All-in-one CLI tool for BGP data investigation, analysis, and monitoring.

All-in-One Tool

Parse, search, analyze - everything you need for BGP data investigation in one command.

RPKI Integration

Built-in RPKI validation, ROA parsing, and prefix origin validation using Cloudflare's validator.

Rich Utilities

Time conversion, country lookups, AS information, and IP address details - all built-in.

One tool, infinite possibilities

# Search for BGP announcements for a prefix during a time window
monocle search -t 2024-01-01T00:00:00Z -T 2024-01-01T00:01:00Z   -c rrc00 -p 1.1.1.0/24 -m a

# Inspect an ASN (unified lookup)
monocle inspect 13335

# Validate a prefix-ASN pair with cached RPKI data
monocle rpki validate 1.1.1.0/24 13335

Trusted by Industry Leaders

Organizations worldwide rely on BGPKIT for BGP data analysis

Using BGPKIT in production? Let us know!

Open-Source Sponsors

Thanks to our amazing sponsors who support BGPKIT development

BlackHOST logo

Want to support BGPKIT development?

Become a Sponsor

Ready to Get Started?

Join thousands of developers and researchers using BGPKIT for BGP data analysis. Start your journey into BGP data processing today.