Changeset a6e6d29d


Ignore:
Timestamp:
May 18, 2019 1:10:45 PM (11 months ago)
Author:
zzz <zzz@…>
Branches:
master
Children:
11b391b
Parents:
6600f37
Message:

Sybil:
Show routers in analysis even if no RI available
Date format fixes
Put date in ban reason
Show ban reason
Add link to banlist

Location:
apps/routerconsole/java/src/net/i2p/router
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • apps/routerconsole/java/src/net/i2p/router/sybil/Analysis.java

    r6600f37 ra6e6d29d  
    55import java.math.BigInteger;
    66import java.text.DecimalFormat;
     7import java.text.DateFormat;
    78import java.util.ArrayList;
    89import java.util.Collections;
     
    1011import java.util.HashMap;
    1112import java.util.List;
     13import java.util.Locale;
    1214import java.util.Map;
    1315import java.util.Set;
     
    2325import net.i2p.data.router.RouterInfo;
    2426import net.i2p.data.router.RouterKeyGenerator;
     27import net.i2p.router.Banlist;
    2528import net.i2p.router.JobImpl;
    2629import net.i2p.router.RouterContext;
     
    3942import net.i2p.util.Log;
    4043import net.i2p.util.ObjectCounter;
     44import net.i2p.util.SystemVersion;
    4145
    4246/**
     
    354358    private void doBlocking(Map<Hash, Points> points) {
    355359        double threshold = DEFAULT_BLOCK_THRESHOLD;
    356         long blockUntil = _context.getProperty(Analysis.PROP_BLOCKTIME, DEFAULT_BLOCK_TIME) + _context.clock().now();
     360        long now = _context.clock().now();
     361        long blockUntil = _context.getProperty(Analysis.PROP_BLOCKTIME, DEFAULT_BLOCK_TIME) + now;
    357362        try {
    358363            threshold = Double.parseDouble(_context.getProperty(PROP_THRESHOLD, Double.toString(DEFAULT_BLOCK_THRESHOLD)));
     
    360365                threshold = MIN_BLOCK_POINTS;
    361366        } catch (NumberFormatException nfe) {}
     367        DateFormat dfmt = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.SHORT);
     368        dfmt.setTimeZone(SystemVersion.getSystemTimeZone(_context));
     369        String day = dfmt.format(now);
    362370        for (Map.Entry<Hash, Points> e : points.entrySet()) {
    363371            double p = e.getValue().getPoints();
     
    372380                    }
    373381                }
    374                 String reason = "Sybil analysis with " + fmt.format(p) + " threat points";
     382                String reason = "Sybil analysis " + day + " with " + fmt.format(p) + " threat points";
    375383                _context.banlist().banlistRouter(h, reason, null, null, blockUntil);
    376384            }
     
    673681
    674682    public void addProfilePoints(List<RouterInfo> ris, Map<Hash, Points> points) {
     683        Map<Hash, Banlist.Entry> banEntries = _context.banlist().getEntries();
    675684        long now = _context.clock().now();
    676685        RateAverages ra = RateAverages.getTemp();
    677686        for (RouterInfo info : ris) {
    678687            Hash h = info.getHash();
    679             if (_context.banlist().isBanlisted(h))
    680                 addPoints(points, h, POINTS_BANLIST, "Banlisted");
     688            if (_context.banlist().isBanlisted(h)) {
     689                StringBuilder buf = new StringBuilder("Banlisted");
     690                Banlist.Entry entry = banEntries.get(h);
     691                if (entry != null) {
     692                    if (entry.cause != null) {
     693                        buf.append(": ");
     694                        if (entry.causeCode != null)
     695                            buf.append(_t(entry.cause, entry.causeCode));
     696                        else
     697                            buf.append(_t(entry.cause));
     698                    }
     699                }
     700                addPoints(points, h, POINTS_BANLIST, buf.toString());
     701            }
    681702            PeerProfile prof = _context.profileOrganizer().getProfileNonblocking(h);
    682703            if (prof != null) {
     
    778799    }
    779800
     801    private String _t(String s) {
     802        return Messages.getString(s, _context);
     803    }
     804
    780805    /**
    781806     *  translate a string with a parameter
  • apps/routerconsole/java/src/net/i2p/router/web/helpers/SybilRenderer.java

    r6600f37 ra6e6d29d  
    6464    private final RouterContext _context;
    6565    private final DecimalFormat fmt = new DecimalFormat("#0.00");
     66    private final DateFormat dfmt;
    6667
    6768    private static final int PAIRMAX = Analysis.PAIRMAX;
     
    7374    public SybilRenderer(RouterContext ctx) {
    7475        _context = ctx;
     76        dfmt = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.SHORT);
     77        dfmt.setTimeZone(SystemVersion.getSystemTimeZone(_context));
    7578    }
    7679
     
    147150                   "</li><li><a href=\"netdb?f=3&amp;m=14\">Run new analysis</a>" +
    148151                   "</li><li><a href=\"netdb?f=3&amp;m=15\">Configure periodic analysis</a>" +
     152                   "</li><li><a href=\"/profiles?f=3\">Review current bans</a>" +
    149153                   "</li><li><a href=\"netdb?f=3&amp;m=1\">Floodfill Summary</a>" +
    150154                   "</li><li><a href=\"netdb?f=3&amp;m=2\">Same Family</a>" +
     
    246250                       "<select name=\"date\">\n");
    247251            boolean first = true;
    248             DateFormat dfmt = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM);
    249             dfmt.setTimeZone(SystemVersion.getSystemTimeZone(_context));
    250252            for (Long date : dates) {
    251253                buf.append("<option value=\"").append(date).append('\"');
     
    321323        renderRouterInfo(buf, _context.router().getRouterInfo(), null, true, false);
    322324        buf.append("<h3 id=\"known\" class=\"sybils\">Known Floodfills: ").append(ris.size()).append("</h3>");
    323         DateFormat dfmt = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM);
    324         dfmt.setTimeZone(SystemVersion.getSystemTimeZone(_context));
    325325        buf.append("<div id=\"sybils_summary\">\n" +
    326326                   "<b>Average closest floodfill distance:</b> ").append(fmt.format(avgMinDist)).append("<br>\n" +
     
    469469            Collections.sort(warns, new PointsComparator(points));
    470470            ReasonComparator rcomp = new ReasonComparator();
    471             DateFormat dfmt = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM);
    472             dfmt.setTimeZone(SystemVersion.getSystemTimeZone(_context));
    473471            buf.append("<h3 id=\"threats\" class=\"sybils\">Routers with Most Threat Points as of " + dfmt.format(new Date(date)) + "</h3>");
    474472            for (Hash h : warns) {
    475                 RouterInfo ri = _context.netDb().lookupRouterInfoLocally(h);
    476                 if (ri == null)
    477                     continue;
    478473                Points pp = points.get(h);
    479474                double p = pp.getPoints();
     
    491486                }
    492487                buf.append("</ul>");
    493                 renderRouterInfo(buf, ri, null, false, false);
     488                RouterInfo ri = _context.netDb().lookupRouterInfoLocally(h);
     489                if (ri != null) {
     490                    renderRouterInfo(buf, ri, null, false, false);
     491                } else {
     492                    String hash = h.toBase64();
     493                    buf.append("<a name=\"").append(hash, 0, 6).append("\"></a><table class=\"sybil_routerinfo\"><tr>" +
     494                               "<th><b>" + _t("Router") + ":</b> <code>").append(hash).append("</code></th>" +
     495                               "<th><b>Router info not available</b></th><th></th></tr></table>\n");
     496                }
    494497            }
    495498        }
     
    963966        prev = null;
    964967        final int limit = Math.min(10, sybils.size());
    965         DateFormat dfmt = DateFormat.getDateInstance(DateFormat.MEDIUM);
     968        DateFormat utcfmt = DateFormat.getDateInstance(DateFormat.MEDIUM);
    966969        for (int i = start; i <= days; i++) {
    967             out.write("<h3 class=\"tabletitle\">Distance for " + dfmt.format(new Date(now)) +
     970            out.write("<h3 class=\"tabletitle\">Distance for " + utcfmt.format(new Date(now)) +
    968971                      "</h3><table class=\"sybil_distance\"><tr><th>Hash<th>Distance<th>Distance from previous</tr>\n");
    969972            Hash rkey = rkgen.getRoutingKey(from, now);
Note: See TracChangeset for help on using the changeset viewer.