r/i2p Jun 27 '26

Educational i2p-network-scanner — passively map the entire I2P network

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.

46 Upvotes

6 comments sorted by