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.


