Changeset 997ef73


Ignore:
Timestamp:
Dec 5, 2015 1:50:00 PM (5 years ago)
Author:
zzz <zzz@…>
Branches:
master
Children:
eaae060
Parents:
ff4d575
Message:

Sybil tool: Test tomorrow's routing keys also
Add netdb stats output
Add avg. ff distance output
Increase penalty for proximity to our keys
Reduce number of RIs output

File:
1 edited

Legend:

Unmodified
Added
Removed
  • apps/routerconsole/java/src/net/i2p/router/web/SybilRenderer.java

    rff4d575 r997ef73  
    2222import net.i2p.data.router.RouterAddress;
    2323import net.i2p.data.router.RouterInfo;
     24import net.i2p.data.router.RouterKeyGenerator;
    2425import net.i2p.router.RouterContext;
    2526import net.i2p.router.TunnelPoolSettings;
     27import net.i2p.router.peermanager.DBHistory;
    2628import net.i2p.router.peermanager.PeerProfile;
    2729import net.i2p.router.tunnel.pool.TunnelPool;
     
    4446    private final RouterContext _context;
    4547
    46     private static final int PAIRMAX = 10;
     48    private static final int PAIRMAX = 20;
    4749    private static final int MAX = 10;
    4850    // multiplied by size - 1, will also get POINTS24 added
     
    5355    private static final double POINTS16 = 0.25;
    5456    private static final double MIN_CLOSE = 242.0;
     57    private static final double OUR_KEY_FACTOR = 4.0;
    5558    private static final double MIN_DISPLAY_POINTS = 3.0;
    5659
     
    182185        buf.append("<h3>Closest Floodfills to Our Routing Key (Where we Store our RI)</h3>");
    183186        renderRouterInfoHTML(out, buf, ourRKey, avgMinDist, ris, points);
     187        RouterKeyGenerator rkgen = _context.routerKeyGenerator();
     188        Hash nkey = rkgen.getNextRoutingKey(us);
     189        buf.append("<h3>Closest Floodfills to Tomorrow's Routing Key (Where we will Store our RI)</h3>");
     190        renderRouterInfoHTML(out, buf, nkey, avgMinDist, ris, points);
    184191
    185192        buf.append("<h3>Closest Floodfills to Our Router Hash (DHT Neighbors if we are Floodfill)</h3>");
     
    202209            TunnelPool in = clientInboundPools.get(client);
    203210            String name = (in != null) ? in.getSettings().getDestinationNickname() : client.toBase64().substring(0,4);
    204             buf.append("<h3>Closest floodfills to the Routing Key for Our Destination " + DataHelper.escapeHTML(name) + " (where we store our LS)</h3>");
     211            buf.append("<h3>Closest floodfills to the Routing Key for " + DataHelper.escapeHTML(name) + " (where we store our LS)</h3>");
    205212            renderRouterInfoHTML(out, buf, rkey, avgMinDist, ris, points);
     213            nkey = rkgen.getNextRoutingKey(ls.getHash());
     214            buf.append("<h3>Closest floodfills to Tomorrow's Routing Key for " + DataHelper.escapeHTML(name) + " (where we store our LS)</h3>");
     215            renderRouterInfoHTML(out, buf, nkey, avgMinDist, ris, points);
    206216        }
    207217
     
    246256
    247257    private void renderPairDistance(Writer out, StringBuilder buf, List<RouterInfo> ris, Map<Hash, Points> points) throws IOException {
    248         buf.append("<h3>Closest Floodfill Pairs by Hash</h3>");
    249258        int sz = ris.size();
    250259        List<Pair> pairs = new ArrayList<Pair>(PAIRMAX);
     260        double total = 0;
    251261        for (int i = 0; i < sz; i++) {
    252262            RouterInfo info1 = ris.get(i);
     
    263273                    Collections.sort(pairs);
    264274                }
    265             }
    266         }
     275                total += biLog2(dist);
     276            }
     277        }
     278
    267279        DecimalFormat fmt = new DecimalFormat("#0.00");
     280        double avg = total / (sz * sz / 2);
     281        buf.append("<h3>Average Floodfill Distance is ").append(fmt.format(avg)).append("</h3>");
     282
     283        buf.append("<h3>Closest Floodfill Pairs by Hash</h3>");
    268284        for (Pair p : pairs) {
    269285            double distance = biLog2(p.dist);
    270             buf.append("<p><b>Hash Distance: ").append(fmt.format(distance)).append(": </b>");
    271             buf.append("</p>");
    272             renderRouterInfo(buf, p.r1, null, false, false);
    273             renderRouterInfo(buf, p.r2, null, false, false);
    274286            double point = MIN_CLOSE - distance;
    275             if (point > 0) {
    276                 addPoints(points, p.r1.getHash(), point, "Very close (" + fmt.format(distance) +
     287            if (point < 0)
     288                break;  // sorted;
     289            if (point >= 2) {
     290                // limit display
     291                buf.append("<p><b>Hash Distance: ").append(fmt.format(distance)).append(": </b>");
     292                buf.append("</p>");
     293                renderRouterInfo(buf, p.r1, null, false, false);
     294                renderRouterInfo(buf, p.r2, null, false, false);
     295            }
     296            addPoints(points, p.r1.getHash(), point, "Very close (" + fmt.format(distance) +
    277297                          ") to other floodfill " + p.r2.getHash().toBase64());
    278                 addPoints(points, p.r2.getHash(), point, "Very close (" + fmt.format(distance) +
     298            addPoints(points, p.r2.getHash(), point, "Very close (" + fmt.format(distance) +
    279299                          ") to other floodfill " + p.r1.getHash().toBase64());
    280             }
    281300        }
    282301        out.write(buf.toString());
     
    450469            int i1 = i & 0xff;
    451470            buf.append("<p><b>").append(count).append(" floodfills in ").append(i0).append('.')
    452                .append(i1).append(".0.0/16:</b></p>");
     471               .append(i1).append(".0.0/16</b></p>");
    453472            for (RouterInfo info : ris) {
    454473                byte[] ip = getIP(info);
     
    460479                    continue;
    461480                found = true;
    462                 renderRouterInfo(buf, info, null, false, false);
     481                // limit display
     482                //renderRouterInfo(buf, info, null, false, false);
    463483                double point = POINTS16 * (count - 1);
    464484                addPoints(points, info.getHash(), point, "Same /16 IP with " + (count - 1) + " other");
     
    509529            double point = MIN_CLOSE - dist;
    510530            if (point > 0) {
    511                 point *= 2.0;
     531                point *= OUR_KEY_FACTOR;
    512532                addPoints(points, ri.getHash(), point, "Very close (" + fmt.format(dist) + ") to our key " + us.toBase64());
    513533            }
     
    600620                       .append(_t("{0} ago", DataHelper.formatDuration2(age))).append("<br>\n");
    601621                }
     622                DBHistory dbh = prof.getDBHistory();
     623                if (dbh != null) {
     624                    heard = dbh.getLastLookupSuccessful();
     625                    if (heard > 0) {
     626                        long age = Math.max(now - heard, 1);
     627                        buf.append("<b>Last lookup successful:</b> ")
     628                           .append(_t("{0} ago", DataHelper.formatDuration2(age))).append("<br>\n");
     629                    }
     630                    heard = dbh.getLastLookupFailed();
     631                    if (heard > 0) {
     632                        long age = Math.max(now - heard, 1);
     633                        buf.append("<b>Last lookup failed:</b> ")
     634                           .append(_t("{0} ago", DataHelper.formatDuration2(age))).append("<br>\n");
     635                    }
     636                    heard = dbh.getLastStoreSuccessful();
     637                    if (heard > 0) {
     638                        long age = Math.max(now - heard, 1);
     639                        buf.append("<b>Last store successful:</b> ")
     640                           .append(_t("{0} ago", DataHelper.formatDuration2(age))).append("<br>\n");
     641                    }
     642                    heard = dbh.getLastStoreFailed();
     643                    if (heard > 0) {
     644                        long age = Math.max(now - heard, 1);
     645                        buf.append("<b>Last store failed:</b> ")
     646                           .append(_t("{0} ago", DataHelper.formatDuration2(age))).append("<br>\n");
     647                    }
     648                }
    602649                // any other profile stuff?
    603650            }
    604651        }
    605         long age = now - info.getPublished();
     652        long age = Math.max(now - info.getPublished(), 1);
    606653        if (isUs && _context.router().isHidden()) {
    607654            buf.append("<b>").append(_t("Hidden")).append(", ").append(_t("Updated")).append(":</b> ")
    608655               .append(_t("{0} ago", DataHelper.formatDuration2(age))).append("<br>\n");
    609         } else if (age > 0) {
     656        } else {
    610657            buf.append("<b>").append(_t("Published")).append(":</b> ")
    611658               .append(_t("{0} ago", DataHelper.formatDuration2(age))).append("<br>\n");
    612         } else {
    613             // shouldnt happen
    614             buf.append("<b>" + _t("Published") + ":</b> in ").append(DataHelper.formatDuration2(0-age)).append("???<br>\n");
    615659        }
    616660        buf.append("<b>").append(_t("Signing Key")).append(":</b> ")
Note: See TracChangeset for help on using the changeset viewer.