Copied from reddit

I built an open-source Python tool that scans the I2P NetDB using nothing but vanilla i2pd floodfills. No patched binaries, no active probing — just parse the routerInfo files i2pd already writes to disk.

Repo: https://github.com/iasds/i2p-network-scanner

How it works

Run a few i2pd floodfill instances with different identities. Each covers a different DHT shard, so together they passively collect RouterInfo from most of the network. A single Python script parses the raw .dat files and extracts ident hashes, IPs, versions, caps flags, transports, and bandwidth tiers. Companion tools handle SQLite import, CLI queries, and GeoIP enrichment.

I ran a scan and published the results

5 floodfills, ~24 hours. The full analysis is in the repo:

  • 17,541 known routers — 5,205 with public IPs, 12,336 behind NAT or firewalled

  • 70% hidden is not a coverage gap — routers behind NAT simply don’t include a host= field. That’s I2P by design.

  • 4,976 unique IPs across 111 countries

  • Top countries: US (1,120), Russia (507), Germany (366), Canada (199), Netherlands (198)

  • China has only 72 public nodes. Iran has 96.

  • 0.9.68 dominates at 47% of routers, but only 11% of them publish an IP. Newer 0.9.69 (20% share) has 55% public rate.

  • Java I2P is essentially extinct — nearly everything runs i2pd.

  • 90 floodfills worldwide, concentrated in US, Russia, and Germany.

  • Only 76 routers declare X-tier bandwidth (>2 MB/s).

Full report: I2P_NETWORK_ANALYSIS.md

If anyone has historical NetDB snapshots I’d love to compare trends over time. PRs welcome.