From f9571740ae985a2c1cc096e08b51ce8fa99f3ca4 Mon Sep 17 00:00:00 2001 From: zzz <zzz@mail.i2p> Date: Mon, 14 Oct 2013 17:02:08 +0000 Subject: [PATCH] address check cleanup --- .../i2p/router/transport/TransportUtil.java | 22 +++++++++++-------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/router/java/src/net/i2p/router/transport/TransportUtil.java b/router/java/src/net/i2p/router/transport/TransportUtil.java index 61df53e947..0332a9105b 100644 --- a/router/java/src/net/i2p/router/transport/TransportUtil.java +++ b/router/java/src/net/i2p/router/transport/TransportUtil.java @@ -131,25 +131,29 @@ public abstract class TransportUtil { // 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; + if (addr[0] == 0x20) { + // disallow 2002::/16 (6to4 RFC 3056) + if (addr[1] == 0x02) + return false; + if (addr[1] == 0x01) { + // disallow 2001:0::/32 (Teredo RFC 4380) + if (addr[2] == 0x00 && addr[3] == 0x00) + return false; + // Documenation (example) RFC 3849 + if (addr[2] == 0x0d && (addr[3] & 0xff) == 0xb8) + return false; + } + } // disallow fc00::/8 and fd00::/8 (Unique local addresses RFC 4193) // not recognized as local by InetAddress if ((addr[0] & 0xfe) == 0xfc) return false; - // 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; // 6bone RFC 2471 if (addr[0] == 0x3f && (addr[1] & 0xff) == 0xfe) return false; - // Documenation (example) RFC 3849 - if (addr[0] == 0x20 && addr[1] == 0x01 && addr[2] == 0x0d && (addr[3] & 0xff) == 0xb8) - return false; try { InetAddress ia = InetAddress.getByAddress(addr); return -- GitLab