diff --git a/apps/routerconsole/java/src/net/i2p/router/web/NetDbRenderer.java b/apps/routerconsole/java/src/net/i2p/router/web/NetDbRenderer.java index dc697b5c69bec23d788ff644486e11e4aabfec16..97acfe9c7b8147b66ef0f1d86b2f403cc8ba4954 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/NetDbRenderer.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/NetDbRenderer.java @@ -95,6 +95,21 @@ class NetDbRenderer { } else { boolean notFound = true; Set<RouterInfo> routers = _context.netDb().getRouters(); + int ipMode = 0; + if (ip != null) { + if (ip.endsWith("/24")) { + ipMode = 1; + } else if (ip.endsWith("/16")) { + ipMode = 2; + } else if (ip.endsWith("/8")) { + ipMode = 3; + } + for (int i = 0; i < ipMode; i++) { + int last = ip.lastIndexOf('.'); + if (last > 0) + ip = ip.substring(0, last + 1); + } + } for (RouterInfo ri : routers) { Hash key = ri.getIdentity().getHash(); if ((routerPrefix != null && key.toBase64().startsWith(routerPrefix)) || @@ -106,10 +121,19 @@ class NetDbRenderer { notFound = false; } else if (ip != null) { for (RouterAddress ra : ri.getAddresses()) { - if (ip.equals(ra.getHost())) { - renderRouterInfo(buf, ri, false, true); - notFound = false; - break; + if (ipMode == 0) { + if (ip.equals(ra.getHost())) { + renderRouterInfo(buf, ri, false, true); + notFound = false; + break; + } + } else { + String host = ra.getHost(); + if (host != null && host.startsWith(ip)) { + renderRouterInfo(buf, ri, false, true); + notFound = false; + break; + } } } } diff --git a/apps/routerconsole/java/src/net/i2p/router/web/SybilRenderer.java b/apps/routerconsole/java/src/net/i2p/router/web/SybilRenderer.java index 6dff26ede092dd0df346f83ef9d3a986d9441773..73d59432f739901c98c3721b8c5b9b56f0b52ad9 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/SybilRenderer.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/SybilRenderer.java @@ -501,8 +501,10 @@ class SybilRenderer { int i0 = i >> 16; int i1 = (i >> 8) & 0xff; int i2 = i & 0xff; - buf.append("<p><b>").append(count).append(" floodfills in ").append(i0).append('.') - .append(i1).append('.').append(i2).append(".0/24:</b></p>"); + String sip = i0 + "." + i1 + '.' + i2 + ".0/24"; + buf.append("<p><b>").append(count).append(" floodfills with IP <a href=\"/netdb?ip=") + .append(sip).append("\">").append(sip) + .append("</a>:</b></p>"); for (RouterInfo info : ris) { byte[] ip = getIP(info); if (ip == null) @@ -549,8 +551,10 @@ class SybilRenderer { int i = ii.intValue(); int i0 = i >> 8; int i1 = i & 0xff; - buf.append("<p><b>").append(count).append(" floodfills in ").append(i0).append('.') - .append(i1).append(".0.0/16</b></p>"); + String sip = i0 + "." + i1 + ".0/16"; + buf.append("<p><b>").append(count).append(" floodfills with IP <a href=\"/netdb?ip=") + .append(sip).append("\">").append(sip) + .append("</a></b></p>"); for (RouterInfo info : ris) { byte[] ip = getIP(info); if (ip == null)