diff --git a/router/java/src/net/i2p/router/transport/TransportUtil.java b/router/java/src/net/i2p/router/transport/TransportUtil.java index 12bd153d47a18b1d0af46a8061fe681c3abab0da..2eabdeeab1b440b8d62baa16c339be955887a79b 100644 --- a/router/java/src/net/i2p/router/transport/TransportUtil.java +++ b/router/java/src/net/i2p/router/transport/TransportUtil.java @@ -120,9 +120,17 @@ public abstract class TransportUtil { if (a0 == 169 && a1 == 254) return false; // 5/8 allocated to RIPE (30 November 2010) //if ((addr[0]&0xFF) == 5) return false; // Hamachi + // Hamachi moved to 25/8 Nov. 2012 + // Assigned to UK Ministry of Defence + // http://blog.logmein.com/products/changes-to-hamachi-on-november-19th + if (a0 == 25) return false; return true; // or at least possible to be true } else if (addr.length == 16) { if (allowIPv6) { + // loopback, broadcast, + // IPv4 compat ::xxxx:xxxx + if (addr[0] == 0) + return false; // disallow 2002::/16 (6to4 RFC 3056) if (addr[0] == 0x20 && addr[1] == 0x02) return false; @@ -133,6 +141,9 @@ public abstract class TransportUtil { // disallow 2001:0::/32 (Teredo RFC 4380) if (addr[0] == 0x20 && addr[1] == 0x01 && addr[2] == 0x00 && addr[3] == 0x00) return false; + // Hamachi IPv6 + if (addr[0] == 0x26 && addr[1] == 0x20 && addr[2] == 0x00 && (addr[3] & 0xff) == 0x9b) + return false; try { InetAddress ia = InetAddress.getByAddress(addr); return