diff --git a/apps/i2psnark/java/src/org/klomp/snark/ConnectionAcceptor.java b/apps/i2psnark/java/src/org/klomp/snark/ConnectionAcceptor.java index 77ba522e6e545b7e3b47452f4f4a6f1b1a237969..29e6e80756d709e98c008fbc00d1d62e246ca211 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/ConnectionAcceptor.java +++ b/apps/i2psnark/java/src/org/klomp/snark/ConnectionAcceptor.java @@ -129,7 +129,7 @@ class ConnectionAcceptor implements Runnable public int getPort() { - return 6881; // serverSocket.getLocalPort(); + return TrackerClient.PORT; // serverSocket.getLocalPort(); } public void run() @@ -166,10 +166,18 @@ class ConnectionAcceptor implements Runnable try { socket.close(); } catch (IOException ioe) {} continue; } - int bad = _badCounter.count(socket.getPeerDestination().calculateHash()); + Hash h = socket.getPeerDestination().calculateHash(); + if (socket.getLocalPort() == 80) { + _badCounter.increment(h); + if (_log.shouldLog(Log.WARN)) + _log.error("Dropping incoming HTTP from " + h); + try { socket.close(); } catch (IOException ioe) {} + continue; + } + int bad = _badCounter.count(h); if (bad >= MAX_BAD) { if (_log.shouldLog(Log.WARN)) - _log.warn("Rejecting connection from " + socket.getPeerDestination().calculateHash() + + _log.warn("Rejecting connection from " + h + " after " + bad + " failures, max is " + MAX_BAD); try { socket.close(); } catch (IOException ioe) {} continue; diff --git a/apps/i2psnark/java/src/org/klomp/snark/ExtensionHandler.java b/apps/i2psnark/java/src/org/klomp/snark/ExtensionHandler.java index fd79e82527c6ed7268e2ad5c64edbb9b251bbf98..6c35dbe3acc4e53afe90fde8899889f9845124dc 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/ExtensionHandler.java +++ b/apps/i2psnark/java/src/org/klomp/snark/ExtensionHandler.java @@ -56,7 +56,7 @@ abstract class ExtensionHandler { } // include the map even if empty so the far-end doesn't NPE handshake.put("m", m); - handshake.put("p", Integer.valueOf(6881)); + handshake.put("p", Integer.valueOf(TrackerClient.PORT)); handshake.put("v", "I2PSnark"); handshake.put("reqq", Integer.valueOf(5)); return BEncoder.bencode(handshake); diff --git a/apps/i2psnark/java/src/org/klomp/snark/I2PSnarkUtil.java b/apps/i2psnark/java/src/org/klomp/snark/I2PSnarkUtil.java index 8e4172265450581a00bbc9cbd257a358be487a9d..6f5401c5443af1794617fca55baeeef1229bdab3 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/I2PSnarkUtil.java +++ b/apps/i2psnark/java/src/org/klomp/snark/I2PSnarkUtil.java @@ -324,6 +324,8 @@ public class I2PSnarkUtil { if (_banlist.contains(dest)) throw new IOException("Not trying to contact " + dest.toBase64() + ", as they are banlisted"); try { + // TODO opts.setPort(xxx); connect(addr, opts) + // DHT moved above 6881 in 0.9.9 I2PSocket rv = _manager.connect(addr); if (rv != null) _banlist.remove(dest); @@ -331,7 +333,9 @@ public class I2PSnarkUtil { } catch (I2PException ie) { _banlist.add(dest); _context.simpleScheduler().addEvent(new Unbanlist(dest), 10*60*1000); - throw new IOException("Unable to reach the peer " + peer + ": " + ie.getMessage()); + IOException ioe = new IOException("Unable to reach the peer " + peer); + ioe.initCause(ie); + throw ioe; } } diff --git a/apps/i2psnark/java/src/org/klomp/snark/PeerID.java b/apps/i2psnark/java/src/org/klomp/snark/PeerID.java index cc71a5f58e82f90c23bfd1a8c69f3518d56620e9..a5f0f65745f6568fb741f5da72b0333ee7aafcaa 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/PeerID.java +++ b/apps/i2psnark/java/src/org/klomp/snark/PeerID.java @@ -58,7 +58,7 @@ class PeerID implements Comparable { this.id = id; this.address = address; - this.port = 6881; + this.port = TrackerClient.PORT; this.destHash = address.calculateHash().getData(); hash = calculateHash(); util = null; @@ -92,7 +92,7 @@ class PeerID implements Comparable if (address == null) throw new InvalidBEncodingException("Invalid destination [" + bevalue.getString() + "]"); - port = 6881; + port = TrackerClient.PORT; this.destHash = address.calculateHash().getData(); hash = calculateHash(); util = null; @@ -106,7 +106,7 @@ class PeerID implements Comparable public PeerID(byte[] dest_hash, I2PSnarkUtil util) throws InvalidBEncodingException { // id and address remain null - port = 6881; + port = TrackerClient.PORT; if (dest_hash.length != 32) throw new InvalidBEncodingException("bad hash length"); destHash = dest_hash; diff --git a/apps/i2psnark/java/src/org/klomp/snark/TrackerClient.java b/apps/i2psnark/java/src/org/klomp/snark/TrackerClient.java index ace18c25de2887afe4ed90ac71c3be3765b3ef1b..ec1352bc04ab03ede0a6932f0adac0fc0820bc32 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/TrackerClient.java +++ b/apps/i2psnark/java/src/org/klomp/snark/TrackerClient.java @@ -86,6 +86,7 @@ public class TrackerClient implements Runnable { private final static int LONG_SLEEP = 30*60*1000; // sleep a while after lots of fails private final static long MIN_TRACKER_ANNOUNCE_INTERVAL = 15*60*1000; private final static long MIN_DHT_ANNOUNCE_INTERVAL = 10*60*1000; + public static final int PORT = 6881; private final I2PSnarkUtil _util; private final MetaInfo meta; @@ -135,7 +136,7 @@ public class TrackerClient implements Runnable { this.coordinator = coordinator; this.snark = snark; - this.port = 6881; //(port == -1) ? 9 : port; + this.port = PORT; //(port == -1) ? 9 : port; this.infoHash = urlencode(snark.getInfoHash()); this.peerID = urlencode(snark.getID()); this.trackers = new ArrayList(2); diff --git a/apps/i2psnark/java/src/org/klomp/snark/dht/KRPC.java b/apps/i2psnark/java/src/org/klomp/snark/dht/KRPC.java index e9fca89b1f94019a66c0115a23856a07bddda23d..3782e28914d261d857de16195faa09601a5863ce 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/dht/KRPC.java +++ b/apps/i2psnark/java/src/org/klomp/snark/dht/KRPC.java @@ -43,6 +43,7 @@ import net.i2p.util.I2PAppThread; import net.i2p.util.Log; import net.i2p.util.SimpleTimer2; +import org.klomp.snark.TrackerClient; import org.klomp.snark.bencode.BDecoder; import org.klomp.snark.bencode.BEncoder; import org.klomp.snark.bencode.BEValue; @@ -176,7 +177,7 @@ public class KRPC implements I2PSessionMuxedListener, DHT { // Construct my NodeInfo // Pick ports over a big range to marginally increase security // If we add a search DHT, adjust to stay out of each other's way - _qPort = 2555 + ctx.random().nextInt(61111); + _qPort = TrackerClient.PORT + 10 + ctx.random().nextInt(65535 - 20 - TrackerClient.PORT); _rPort = _qPort + 1; if (SECURE_NID) { _myNID = NodeInfo.generateNID(session.getMyDestination().calculateHash(), _qPort, _context.random()); @@ -756,7 +757,7 @@ public class KRPC implements I2PSessionMuxedListener, DHT { Map<String, Object> args = new HashMap(); args.put("info_hash", ih.getData()); // port ignored - args.put("port", Integer.valueOf(6881)); + args.put("port", Integer.valueOf(TrackerClient.PORT)); args.put("token", token.getData()); map.put("a", args); // an announce need not be signed, we have a token