nebula

🌌 A network agnostic DHT crawler, monitor, and measurement tool that exposes timely information about DHT networks.

https://github.com/dennis-tra/nebula

Science Score: 54.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • βœ“
    CITATION.cff file
    Found CITATION.cff file
  • βœ“
    codemeta.json file
    Found codemeta.json file
  • βœ“
    .zenodo.json file
    Found .zenodo.json file
  • β—‹
    DOI references
  • βœ“
    Academic publication links
    Links to: arxiv.org
  • β—‹
    Committers with academic emails
  • β—‹
    Institutional organization owner
  • β—‹
    JOSS paper metadata
  • β—‹
    Scientific vocabulary similarity
    Low similarity (7.3%) to scientific vocabulary

Keywords

cid crawler filecoin golang hacktoberfest ipfs libp2p
Last synced: 6 months ago · JSON representation ·

Repository

🌌 A network agnostic DHT crawler, monitor, and measurement tool that exposes timely information about DHT networks.

Basic Info
  • Host: GitHub
  • Owner: dennis-tra
  • License: apache-2.0
  • Language: Go
  • Default Branch: main
  • Homepage:
  • Size: 15.2 MB
Statistics
  • Stars: 339
  • Watchers: 9
  • Forks: 46
  • Open Issues: 1
  • Releases: 11
Topics
cid crawler filecoin golang hacktoberfest ipfs libp2p
Created over 4 years ago · Last pushed 9 months ago
Metadata Files
Readme Funding License Citation

README.md

Nebula Logo

Nebula

standard-readme compliant go test readme nebula GitHub license Hits

A network agnostic peer crawler and monitor. Nebula starts with a set of bootstrap peers, asks them for other peers in the network and recursively repeats the process until all peers in the network have been contacted. Originally, Nebula only supported DHT networks, but this restriction was lifted.

Currently, Nebula supports the following networks:

You can run nebula networks to get a list of all supported networks

Nebula supports the following storage backends: JSON, Postgres, ClickHouse

The crawler was:

Nebula powers:

  • πŸ“Š the weekly reports for the IPFS Amino DHT here! πŸ“Š
  • 🌐 many graphs on probelab.io for most of the supported networks above 🌐

You can find a demo on YouTube: Nebula: A Network Agnostic DHT Crawler πŸ“Ί

Screenshot from a Grafana dashboard

Grafana Dashboard is not part of this repository

Table of Contents

Project Status

The crawler is powering critical IPFS Amino DHT KPIs, used for Weekly IPFS Reports as well as for many metrics on probelab.io. The main branch will contain the latest changes and should not be considered stable. The latest stable release that is production ready is version 2.4.0.

Install

Precompile Binaries

Head over to the release section and download binaries from the latest stable release.

From source

shell git clone https://github.com/dennis-tra/nebula cd nebula just build

Now you should find the nebula executable in the dist subfolder.

Usage

Nebula is a command line tool and provides the crawl sub-command.

Dry-Run

To simply crawl the IPFS Amino DHT network run:

shell nebula --dry-run crawl

[!NOTE] For backwards compatibility reasons IPFS is the default if no network is specified

The crawler can store its results as JSON documents, in a Postgres, or in a Clickhouse database - the --dry-run flag prevents it from doing any of it. Nebula will just print a summary of the crawl at the end instead. For the IPFS network, a crawl takes ~5-10 min depending on your internet connection. You can also specify the network you want to crawl by appending, e.g., --network FILECOIN and limit the number of peers to crawl by providing the --limit flag with the value of, e.g., 1000. Example:

shell nebula --dry-run crawl --network FILECOIN --limit 1000

To find out which other network values are supported, you can run:

shell nebula networks

JSON Output

To store crawl results as JSON files provide the --json-out command line flag like so:

shell nebula --json-out ./results/ crawl

After the crawl has finished, you will find the JSON files in the ./results/ subdirectory.

When providing only the --json-out command line flag you will see that the *_neighbors.json document is empty. This document would contain the full routing table information of each peer in the network which is quite a bit of data (~250MB for the Amino DHT as of April '23) and is therefore disabled by default

Track Routing Table Information

To populate the document, you'll need to pass the --neighbors flag to the crawl subcommand.

shell nebula --json-out ./results/ crawl --neighbors

The routing table information forms a graph and graph visualization tools often operate with adjacency lists. To convert the *_neighbors.json document to an adjacency list, you can use jq and the following command:

shell jq -r '.NeighborIDs[] as $neighbor | [.PeerID, $neighbor] | @csv' ./results/2025-02-16T14:32_neighbors.json > ./results/2025-02-16T14:32_neighbors.csv

Postgres

If you want to store the information in a proper database, you could run just start-postgres to start a local postgres instance via docker in the background and run Nebula like:

shell nebula --db-user nebula_local --db-name nebula_local crawl --neighbors

At this point, you can also start Nebula's monitoring process, which would periodically probe the discovered peers to track their uptime. Run in another terminal:

shell nebula --db-user nebula_local --db-name nebula_local monitor

When Nebula is configured to store its results in a postgres database, then it also tracks session information of remote peers. A session is one continuous streak of uptime (see below).

However, this is not implemented for all supported networks. The ProbeLab team is using the monitoring feature for the IPFS, Celestia, Filecoin, and Avail networks. Most notably, the Ethereum discv4/discv5 and Bitcoin monitoring implementations still need work.


There are a few more command line flags that are documented when you runnebula --help and nebula crawl --help:

How does it work?

crawl

The crawl sub-command starts by connecting to a set of bootstrap nodes and then requesting the information of other peers in the network using the network-native discovery protocol. For most supported networks these are several Kademlia FIND_NODE RPCs. For Bitcoin-related networks it's a getaddr RPC.

For Kademlia-based networks Nebula constructs the routing tables (kademlia k-buckets) of the remote peer based on its PeerID. Then nebula builds random PeerIDs with common prefix lengths (CPL) that fall in each of the peers' buckets, and asks if it knows any peers that are closer (XOR distance) to the ones nebula just generated. This will effectively yield a list of all PeerIDs that a peer has in its routing table. The process repeats for all found peers until nebula does not find any new PeerIDs.

[!TIP] You can use the crawl sub-command with the global --dry-run option that skips any database operations.

Command line help page:

```text NAME: nebula crawl - Crawls the entire network starting with a set of bootstrap nodes.

USAGE: nebula crawl [command options]

OPTIONS: --addr-dial-type value Which type of addresses should Nebula try to dial (private, public, any) (default: "public") [$NEBULACRAWLADDRDIALTYPE] --addr-track-type value Which type addresses should be stored to the database (private, public, any) (default: "public") [$NEBULACRAWLADDRTRACKTYPE] --bootstrap-peers value [ --bootstrap-peers value ] Comma separated list of multi addresses of bootstrap peers (default: default IPFS) [$NEBULACRAWLBOOTSTRAPPEERS, $NEBULABOOTSTRAPPEERS] --limit value Only crawl the specified amount of peers (0 for unlimited) (default: 0) [$NEBULACRAWLPEERLIMIT] --neighbors Whether to persist all k-bucket entries of a particular peer at the end of a crawl. (default: false) [$NEBULACRAWLNEIGHBORS] --network nebula networks Which network should be crawled. Presets default bootstrap peers and protocol. Run: nebula networks for more information. (default: "IPFS") [$NEBULACRAWLNETWORK] --protocols value [ --protocols value ] Comma separated list of protocols that this crawler should look for [$NEBULACRAWLPROTOCOLS, $NEBULAPROTOCOLS] --workers value How many concurrent workers should dial and crawl peers. (default: 1000) [$NEBULACRAWLWORKERCOUNT]

Network Specific Configuration:

--check-exposed IPFS/AMINO: Whether to check if the Kubo API is exposed. Checking also includes crawling the API. (default: false) [$NEBULACRAWLCHECKEXPOSED] --keep-enr ETHEREUMCONSENSUS: Whether to keep the full ENR. (default: false) [$NEBULACRAWLKEEPENR] --udp-response-timeout value ETHEREUMEXECUTION: The response timeout for UDP requests in the disv4 DHT (default: 3s) [$NEBULACRAWLUDPRESPONSETIMEOUT]

```

monitor

The monitor sub-command is only implemented for libp2p based networks and with the postgres database backend. It polls every 10 seconds all sessions from the database (see above) that are due to be dialed in the next 10 seconds (based on the next_visit_due_at timestamp). It attempts to dial all peers using previously saved multi-addresses and updates their session instances accordingly if they're dialable or not.

The next_visit_due_at timestamp is calculated based on the uptime that nebula has observed for that given peer. If the peer is up for a long time nebula assumes that it stays up and thus decreases the dial frequency aka. sets the next_visit_due_at timestamp to a time further in the future.

Command line help page:

```text NAME: nebula monitor - Monitors the network by periodically dialing previously crawled peers.

USAGE: nebula monitor [command options]

OPTIONS: --workers value How many concurrent workers should dial peers. (default: 1000) [$NEBULAMONITORWORKERCOUNT] --network value Which network belong the database sessions to. Relevant for parsing peer IDs and muti addresses. (default: "IPFS") [$NEBULAMONITOR_NETWORK] --help, -h show help

```

resolve

The resolve sub-command is only available when using the postgres datbaase backend. It goes through all multi addresses that are present in the database and resolves them to their respective IP-addresses. Behind one multi address can be multiple IP addresses due to, e.g., the dnsaddr protocol. Further, it queries the GeoLite2 database from Maxmind to extract country information about the IP addresses and UdgerDB to detect datacenters. The command saves all information alongside the resolved addresses.

Command line help page:

```text NAME: nebula resolve - Resolves all multi addresses to their IP addresses and geo location information

USAGE: nebula resolve [command options] [arguments...]

OPTIONS: --udger-db value Location of the Udger database v3 [$NEBULARESOLVEUDGERDB] --batch-size value How many database entries should be fetched at each iteration (default: 100) [$NEBULARESOLVEBATCHSIZE] --help, -h show help (default: false) ```

Development

To develop this project, you need Go 1.23 and the following tools: github.com/golang-migrate/migrate/v4/cmd/migrate@v4.18.2 github.com/volatiletech/sqlboiler/v4@v4.18.0 github.com/volatiletech/sqlboiler/v4/drivers/sqlboiler-psql@v4.18.0 go.uber.org/mock/mockgen@v0.5.0 mvdan.cc/gofumpt@v0.7.0

To install the necessary tools you can run just tools. This will use the go install command to download and install the tools into your $GOPATH/bin directory. So make sure you have it in your $PATH environment variable.

Database

You need a running Postgres or ClickHouse instance to persist and/or read the crawl results. Run just start-postgres or just start-clickhouse respectively or use one of the following commands:

```shell

for postgres

docker run --rm -d --name nebula-postgres-local -p 5432:5432 -e POSTGRESDB=nebulalocal -e POSTGRESUSER=nebulalocal -e POSTGRESPASSWORD=passwordlocal postgres:14

for clickhouse

docker run --rm -d --name nebula-clickhouse-local -p 8123:8123 -p 9000:9000 -e CLICKHOUSEDB=nebulalocal -e CLICKHOUSEUSER=nebulalocal -e CLICKHOUSEPASSWORD=passwordlocal clickhouse/clickhouse-server:24.12 ```

Then you can connect to the database with:

```shell just repl-postgres

or

just repl-clickhouse ```

To stop the containers:

```shell just stop-postgres

or

just stop-clickhouse ```

for convenience there are also the just restart-postgres and just restart-clickhouse recipes.

[!TIP] You can use the crawl sub-command with the global --dry-run option that skips any database operations or store the results as JSON files with the --json-out flag.

The default database settings for local development are:

```toml Name = "nebulalocal" Password = "passwordlocal" User = "nebula_local" Host = "localhost"

postgres

Port = 5432

clickhouse

Port = 9000 ```

Migrations are applied automatically when nebula starts and successfully establishes a database connection.

To run them manually you can run:

```shell

Up migrations

just migrate-postgres up just migrate-clickhouse up

Down migrations

just migrate-postgres down just migrate-clickhouse down

Generate the ORMs with SQLBoiler (only postgres)

just models # runs: sqlboiler ```

```shell

Create new migration

postgres

migrate create -ext sql -dir db/migrations/pg -seq somemigrationname

clickhouse

migrate create -ext sql -dir db/migrations/chlocal -seq somemigrationname ```

[!NOTE] Make sure to adjust the chlocal migration and copy it over to the chcluster folder. In a clustered clickhouse deployment the table engines need to be prefixed with Replicated, like ReplicatedMergeTree as opposed to just MergeTree.

Tests

To run the tests you need a running test database instance. The following command starts test postgres and clickhouse containers, runs the tests and tears them down again:

shell just test

The test database containers won't interfere with other local containers as all names etc. are suffixed with _test as opposed to _local.

To speed up running database tests you can do the following:

shell just start-postgres test just start-clickhouse test

Then run the plain tests (without starting database containers): shell just test-plain

Eventually, stop the containers again:

shell just stop-postgres test just stop-clickhouse test

Release Checklist

  • [ ] Merge everything into main
  • [ ] Create a new tag with the new version
  • [ ] Push tag to GitHub

This will trigger the goreleaser.yml workflow which pushes creates a new draft release in GitHub.

Related Efforts

Demo

The following presentation shows a ways to use Nebula by showcasing crawls of the Amino, Celestia, and Ethereum DHT's:

Nebula: A Network Agnostic DHT Crawler - Dennis Trautwein

Networks

[!NOTE] This section is work-in-progress and doesn't include information about all networks yet.

The following sections document our experience with crawling the different networks.

Ethereum Execution (disv4)

Under the hood Nebula uses packages from go-ethereum to facilitate peer communication. Mostly, Nebula relies on the discover package. However, we made quite a few changes to the implementation that can be found in our fork of go-ethereum here in the nebula branch.

Most notably, the custom changes include:

  • export of internal constants, functions, methods and types to customize their behaviour or call them directly
  • changes to the response matcher logic. UDP packets won't be forwarded to all matchers. This was required so that concurrent requests to the same peer don't lead to unhandled packets

Deployment recommendations:

  • CPUs: 4 (better 8)
  • Memory > 4 GB
  • UDP Read Buffer size >1 MiB (better 4 MiB) via the --udp-buffer-size=4194304 command line flag or corresponding environment variable NEBULA_UDP_BUFFER_SIZE. You might need to adjust the maximum buffer size on Linux, so that the flag takes effect: shell sysctl -w net.core.rmem_max=8388608 # 8MiB
  • UDP Response timeout of 3s (default)
  • Workers: 3000

Maintainers

@dennis-tra.

Contributing

Feel free to dive in! Open an issue or submit PRs.

Support

It would really make my day if you supported this project through Buy Me A Coffee.

Other Projects

You may be interested in one of my other projects:

  • pcp - Command line peer-to-peer data transfer tool based on libp2p.
  • image-stego - A novel way to image manipulation detection. Steganography-based image integrity - Merkle tree nodes embedded into image chunks so that each chunk's integrity can be verified on its own.

License

Apache License Version 2.0 Β© Dennis Trautwein

Owner

  • Name: Dennis Trautwein
  • Login: dennis-tra
  • Kind: user
  • Location: Kreuzlingen, Switzerland
  • Company: Protocol Labs

BSc./MSc. in extraterrestrial/solid state physics | BackendDev@freiheit.com HamburgGER | Dev@OriginStamp CH | Research Engineer@Protocol Labs

Citation (CITATION.cff)

# YAML 1.2
---
cff-version: 1.2.0
type: software
title: "Nebula -- A crawler for networks based on the libp2p DHT implementation"
repository-code: "https://github.com/dennis-tra/nebula-crawler"
url: "https://github.com/dennis-tra/nebula-crawler"
message: >-
  Please cite this software using the metadata from
  'preferred-citation'.
authors:
  - given-names: Dennis
    family-names: Trautwein
    affiliation: Protocol Labs & University of GΓΆttingen
    orcid: 'https://orcid.org/0000-0002-8567-2353'
preferred-citation:
  title: "Design and Evaluation of IPFS: A Storage Layer for the Decentralized Web"
  type: conference-paper
  authors:
    - given-names: Dennis
      family-names: Trautwein
      affiliation: Protocol Labs & University of GΓΆttingen
      orcid: https://orcid.org/0000-0002-8567-2353
    - given-names: Aravidh
      family-names: Raman
      affiliation: Telefonica Research
    - given-names: Gareth
      family-names: Tyson
      affiliation: Hong Kong University of Science & Technology (GZ)
    - given-names: Ignacio
      family-names: Castro
      affiliation: Queen Mary University of London
    - given-names: Will
      family-names: Scott
      affiliation: Protocol Labs
    - given-names: Moritz
      family-names: Schubotz
      affiliation: FIZ Karlsruhe – Leibniz Institute for Information Infrastructure
    - given-names: Bela
      family-names: Gipp
      affiliation: University of GΓΆttingen
    - given-names: Yiannis
      family-names: Psaras
      affiliation: Protocol Labs
  month: 8
  year: 2022
  publisher: ACM
  conference:
    name: "ACM SIGCOMM 2022 Conference (SIGCOMM '22)"
    country: NL
    city: Amsterdam
    date-start: 2022-08-22
    date-end: 2022-08-26
  copyright: "Β© 2022 Copyright held by the owner/author(s)."
  doi: "10.1145/3544216.3544232"
  scope: "Cite this paper if you want to reference the general concepts of the software."
  isbn: "978-1-4503-9420-8/22/08"

GitHub Events

Total
  • Create event: 14
  • Release event: 2
  • Issues event: 9
  • Watch event: 44
  • Delete event: 15
  • Issue comment event: 13
  • Push event: 107
  • Pull request review event: 12
  • Pull request review comment event: 19
  • Pull request event: 29
  • Fork event: 15
Last Year
  • Create event: 14
  • Release event: 2
  • Issues event: 9
  • Watch event: 44
  • Delete event: 15
  • Issue comment event: 13
  • Push event: 107
  • Pull request review event: 12
  • Pull request review comment event: 19
  • Pull request event: 29
  • Fork event: 15

Committers

Last synced: 9 months ago

All Time
  • Total Commits: 637
  • Total Committers: 13
  • Avg Commits per committer: 49.0
  • Development Distribution Score (DDS): 0.055
Past Year
  • Commits: 124
  • Committers: 10
  • Avg Commits per committer: 12.4
  • Development Distribution Score (DDS): 0.097
Top Committers
Name Email Commits
Dennis Trautwein g****t@d****u 602
Mikel Cortes 4****e 8
Cory Schwartz c****y@p****i 7
guillaumemichel g****e@m****d 6
Prem Chaitanya Prathi c****m@g****m 3
Ian Davis n****m@i****m 3
Javad j****d@l****m 2
kasteph a****o@k****m 1
Ng Wei Han 4****n 1
Mario Apra m****a@g****m 1
Daniel Norman 1****r 1
Bashar Jaan Khan b****n@g****m 1
Alexey Smirnov a****v@s****o 1
Committer Domains (Top 20 + Academic)

Issues and Pull Requests

Last synced: 6 months ago

All Time
  • Total issues: 18
  • Total pull requests: 84
  • Average time to close issues: about 1 year
  • Average time to close pull requests: about 1 month
  • Total issue authors: 10
  • Total pull request authors: 16
  • Average comments per issue: 2.17
  • Average comments per pull request: 0.55
  • Merged pull requests: 62
  • Bot issues: 0
  • Bot pull requests: 0
Past Year
  • Issues: 1
  • Pull requests: 32
  • Average time to close issues: 7 days
  • Average time to close pull requests: 19 days
  • Issue authors: 1
  • Pull request authors: 8
  • Average comments per issue: 2.0
  • Average comments per pull request: 0.59
  • Merged pull requests: 22
  • Bot issues: 0
  • Bot pull requests: 0
Top Authors
Issue Authors
  • dennis-tra (9)
  • wcgcyx (1)
  • yourmoonlight (1)
  • bayareaunicorn (1)
  • ralyodio (1)
  • q9f (1)
  • duythien (1)
  • ckarapapas (1)
  • AnmolBansalDEV (1)
  • kodxana (1)
Pull Request Authors
  • dennis-tra (61)
  • cortze (13)
  • guillaumemichel (10)
  • coryschwartz (4)
  • iand (3)
  • kasteph (2)
  • drwtsn95 (2)
  • weiihann (2)
  • Ja7ad (2)
  • derrix060 (2)
  • jooter (1)
  • Zocker1999NET (1)
  • gpevnev (1)
  • zenyuk (1)
  • thisHermit (1)
Top Labels
Issue Labels
good first issue (6) help wanted (5) enhancement (1) bug (1)
Pull Request Labels

Dependencies

go.mod go
  • contrib.go.opencensus.io/exporter/prometheus v0.4.0
  • contrib.go.opencensus.io/integrations/ocsql v0.1.7
  • github.com/adrg/xdg v0.4.0
  • github.com/beorn7/perks v1.0.1
  • github.com/btcsuite/btcd v0.22.0-beta
  • github.com/cespare/xxhash/v2 v2.1.2
  • github.com/cheekybits/genny v1.0.0
  • github.com/cpuguy83/go-md2man/v2 v2.0.1
  • github.com/davecgh/go-spew v1.1.1
  • github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c
  • github.com/ericlagergren/decimal v0.0.0-20211103172832-aca2edc11f73
  • github.com/flynn/noise v1.0.0
  • github.com/francoispqt/gojay v1.2.13
  • github.com/friendsofgo/errors v0.9.2
  • github.com/fsnotify/fsnotify v1.5.1
  • github.com/go-kit/log v0.2.0
  • github.com/go-logfmt/logfmt v0.5.1
  • github.com/go-ping/ping v0.0.0-20211014180314-6e2b003bffdd
  • github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0
  • github.com/gofrs/uuid v4.1.0+incompatible
  • github.com/gogo/protobuf v1.3.2
  • github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da
  • github.com/golang/protobuf v1.5.2
  • github.com/google/gopacket v1.1.19
  • github.com/google/uuid v1.3.0
  • github.com/gorilla/websocket v1.4.2
  • github.com/hashicorp/errwrap v1.1.0
  • github.com/hashicorp/go-multierror v1.1.1
  • github.com/hashicorp/golang-lru v0.5.4
  • github.com/hashicorp/hcl v1.0.0
  • github.com/huin/goupnp v1.0.2
  • github.com/ipfs/go-cid v0.1.0
  • github.com/ipfs/go-datastore v0.5.0
  • github.com/ipfs/go-ipfs-util v0.0.2
  • github.com/ipfs/go-ipns v0.1.2
  • github.com/ipfs/go-log v1.0.5
  • github.com/ipfs/go-log/v2 v2.3.0
  • github.com/ipld/go-ipld-prime v0.14.0
  • github.com/jackpal/go-nat-pmp v1.0.2
  • github.com/jbenet/go-temp-err-catcher v0.1.0
  • github.com/jbenet/goprocess v0.1.4
  • github.com/kat-co/vala v0.0.0-20170210184112-42e1d8b61f12
  • github.com/klauspost/compress v1.13.6
  • github.com/klauspost/cpuid/v2 v2.0.9
  • github.com/koron/go-ssdp v0.0.2
  • github.com/lib/pq v1.10.4
  • github.com/libp2p/go-addr-util v0.1.0
  • github.com/libp2p/go-buffer-pool v0.0.2
  • github.com/libp2p/go-cidranger v1.1.0
  • github.com/libp2p/go-conn-security-multistream v0.3.0
  • github.com/libp2p/go-eventbus v0.2.1
  • github.com/libp2p/go-flow-metrics v0.0.3
  • github.com/libp2p/go-libp2p v0.16.0
  • github.com/libp2p/go-libp2p-asn-util v0.1.0
  • github.com/libp2p/go-libp2p-autonat v0.6.0
  • github.com/libp2p/go-libp2p-blankhost v0.2.0
  • github.com/libp2p/go-libp2p-core v0.11.0
  • github.com/libp2p/go-libp2p-discovery v0.6.0
  • github.com/libp2p/go-libp2p-kad-dht v0.15.0
  • github.com/libp2p/go-libp2p-kbucket v0.4.7
  • github.com/libp2p/go-libp2p-mplex v0.4.1
  • github.com/libp2p/go-libp2p-nat v0.1.0
  • github.com/libp2p/go-libp2p-netutil v0.1.0
  • github.com/libp2p/go-libp2p-noise v0.3.0
  • github.com/libp2p/go-libp2p-peerstore v0.4.0
  • github.com/libp2p/go-libp2p-pnet v0.2.0
  • github.com/libp2p/go-libp2p-quic-transport v0.15.0
  • github.com/libp2p/go-libp2p-record v0.1.3
  • github.com/libp2p/go-libp2p-swarm v0.8.0
  • github.com/libp2p/go-libp2p-testing v0.5.0
  • github.com/libp2p/go-libp2p-tls v0.3.1
  • github.com/libp2p/go-libp2p-transport-upgrader v0.5.0
  • github.com/libp2p/go-libp2p-yamux v0.6.0
  • github.com/libp2p/go-maddr-filter v0.1.0
  • github.com/libp2p/go-mplex v0.3.0
  • github.com/libp2p/go-msgio v0.1.0
  • github.com/libp2p/go-nat v0.1.0
  • github.com/libp2p/go-netroute v0.1.6
  • github.com/libp2p/go-openssl v0.0.7
  • github.com/libp2p/go-reuseport v0.1.0
  • github.com/libp2p/go-reuseport-transport v0.1.0
  • github.com/libp2p/go-sockaddr v0.1.1
  • github.com/libp2p/go-stream-muxer-multistream v0.3.0
  • github.com/libp2p/go-tcp-transport v0.4.0
  • github.com/libp2p/go-ws-transport v0.5.0
  • github.com/libp2p/go-yamux/v2 v2.3.0
  • github.com/lucas-clemente/quic-go v0.24.0
  • github.com/magiconair/properties v1.8.5
  • github.com/marten-seemann/qtls-go1-16 v0.1.4
  • github.com/marten-seemann/qtls-go1-17 v0.1.0
  • github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd
  • github.com/mattn/go-isatty v0.0.14
  • github.com/matttproud/golang_protobuf_extensions v1.0.1
  • github.com/miekg/dns v1.1.43
  • github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b
  • github.com/mikioh/tcpopt v0.0.0-20190314235656-172688c1accc
  • github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1
  • github.com/minio/sha256-simd v1.0.0
  • github.com/mitchellh/mapstructure v1.4.2
  • github.com/mr-tron/base58 v1.2.0
  • github.com/multiformats/go-base32 v0.0.4
  • github.com/multiformats/go-base36 v0.1.0
  • github.com/multiformats/go-multiaddr v0.4.1
  • github.com/multiformats/go-multiaddr-dns v0.3.1
  • github.com/multiformats/go-multiaddr-fmt v0.1.0
  • github.com/multiformats/go-multibase v0.0.3
  • github.com/multiformats/go-multicodec v0.3.0
  • github.com/multiformats/go-multihash v0.1.0
  • github.com/multiformats/go-multistream v0.2.2
  • github.com/multiformats/go-varint v0.0.6
  • github.com/nxadm/tail v1.4.8
  • github.com/onsi/ginkgo v1.16.5
  • github.com/opentracing/opentracing-go v1.2.0
  • github.com/oschwald/geoip2-golang v1.5.0
  • github.com/oschwald/maxminddb-golang v1.8.0
  • github.com/pelletier/go-toml v1.9.4
  • github.com/pkg/errors v0.9.1
  • github.com/pmezard/go-difflib v1.0.0
  • github.com/polydawn/refmt v0.0.0-20201211092308-30ac6d18308e
  • github.com/prometheus/client_golang v1.11.0
  • github.com/prometheus/client_model v0.2.0
  • github.com/prometheus/common v0.32.1
  • github.com/prometheus/procfs v0.7.3
  • github.com/prometheus/statsd_exporter v0.22.3
  • github.com/russross/blackfriday/v2 v2.1.0
  • github.com/sirupsen/logrus v1.8.1
  • github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572
  • github.com/spaolacci/murmur3 v1.1.0
  • github.com/spf13/afero v1.6.0
  • github.com/spf13/cast v1.4.1
  • github.com/spf13/jwalterweatherman v1.1.0
  • github.com/spf13/pflag v1.0.5
  • github.com/spf13/viper v1.9.0
  • github.com/stretchr/testify v1.7.0
  • github.com/subosito/gotenv v1.2.0
  • github.com/urfave/cli/v2 v2.3.0
  • github.com/volatiletech/inflect v0.0.1
  • github.com/volatiletech/null/v8 v8.1.2
  • github.com/volatiletech/randomize v0.0.1
  • github.com/volatiletech/sqlboiler/v4 v4.8.3
  • github.com/volatiletech/strmangle v0.0.1
  • github.com/whyrusleeping/go-keyspace v0.0.0-20160322163242-5b898ac5add1
  • github.com/whyrusleeping/multiaddr-filter v0.0.0-20160516205228-e903e4adabd7
  • go.opencensus.io v0.23.0
  • go.uber.org/atomic v1.9.0
  • go.uber.org/multierr v1.7.0
  • go.uber.org/zap v1.19.1
  • golang.org/x/crypto v0.0.0-20211117183948-ae814b36b871
  • golang.org/x/mod v0.5.1
  • golang.org/x/net v0.0.0-20211123203042-d83791d6bcd9
  • golang.org/x/sync v0.0.0-20210220032951-036812b2e83c
  • golang.org/x/sys v0.0.0-20211124211545-fe61309f8881
  • golang.org/x/text v0.3.7
  • golang.org/x/tools v0.1.7
  • golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1
  • google.golang.org/grpc v1.40.0
  • google.golang.org/protobuf v1.27.1
  • gopkg.in/ini.v1 v1.63.2
  • gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7
  • gopkg.in/yaml.v2 v2.4.0
  • gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b
  • lukechampine.com/blake3 v1.1.7
go.sum go
  • 1589 dependencies
.github/workflows/pull_request_main.yml actions
  • actions/cache v3 composite
  • actions/checkout v3 composite
  • actions/setup-go v3 composite
  • postgres * docker
.github/workflows/push_main.yml actions
  • actions/checkout v2 composite
  • docker/build-push-action v2 composite
  • docker/login-action v1 composite
  • docker/metadata-action v3 composite
.github/workflows/schedule_codeql_analysis.yml actions
  • actions/checkout v2 composite
  • github/codeql-action/analyze v1 composite
  • github/codeql-action/autobuild v1 composite
  • github/codeql-action/init v1 composite
Dockerfile docker
  • alpine latest build
  • golang 1.19 build
deploy/docker-compose.yml docker
  • dennistra/nebula-crawler sha-ce5c756
  • grafana/grafana 9.2.5
  • postgres 14
  • prom/prometheus v2.40.2
report/Dockerfile docker
  • python 3.10.0 build
report/poetry.lock pypi
  • attrs 22.2.0 develop
  • colorama 0.4.6 develop
  • exceptiongroup 1.0.4 develop
  • iniconfig 1.1.1 develop
  • pluggy 1.0.0 develop
  • pytest 7.2.0 develop
  • Jinja2 3.1.2
  • MarkupSafe 2.1.1
  • Pillow 9.3.0
  • contourpy 1.0.6
  • cycler 0.11.0
  • fonttools 4.38.0
  • kiwisolver 1.4.4
  • matplotlib 3.6.2
  • numpy 1.24.0
  • packaging 22.0
  • pandas 1.5.2
  • psycopg2 2.9.5
  • pyparsing 3.0.9
  • python-dateutil 2.8.2
  • pytz 2022.7
  • seaborn 0.12.1
  • setuptools 65.6.3
  • setuptools-scm 7.1.0
  • six 1.16.0
  • toml 0.10.2
  • tomli 2.0.1
  • typing-extensions 4.4.0
report/pyproject.toml pypi
  • pytest ^7.2.0 develop
  • Jinja2 ^3.0.2
  • matplotlib ^3.6.2
  • numpy ^1.24.0
  • pandas ^1.5.2
  • psycopg2 ^2.9.5
  • python ^3.10
  • seaborn ^0.12.1
  • toml ^0.10.2
analysis/poetry.lock pypi
  • 104 dependencies
analysis/pyproject.toml pypi
  • Jinja2 ^3.0.2
  • jupyter ^1.0.0
  • matplotlib ^3.6.2
  • numpy ^1.24.0
  • pandas ^1.5.2
  • psycopg2 ^2.9.5
  • python ^3.10
  • seaborn ^0.12.1
  • toml ^0.10.2