forked from I2P_Developers/i2p.i2p
address check cleanup
This commit is contained in:
@@ -131,25 +131,29 @@ public abstract class TransportUtil {
|
|||||||
// IPv4 compat ::xxxx:xxxx
|
// IPv4 compat ::xxxx:xxxx
|
||||||
if (addr[0] == 0)
|
if (addr[0] == 0)
|
||||||
return false;
|
return false;
|
||||||
|
if (addr[0] == 0x20) {
|
||||||
// disallow 2002::/16 (6to4 RFC 3056)
|
// disallow 2002::/16 (6to4 RFC 3056)
|
||||||
if (addr[0] == 0x20 && addr[1] == 0x02)
|
if (addr[1] == 0x02)
|
||||||
return false;
|
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)
|
// disallow fc00::/8 and fd00::/8 (Unique local addresses RFC 4193)
|
||||||
// not recognized as local by InetAddress
|
// not recognized as local by InetAddress
|
||||||
if ((addr[0] & 0xfe) == 0xfc)
|
if ((addr[0] & 0xfe) == 0xfc)
|
||||||
return false;
|
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
|
// Hamachi IPv6
|
||||||
if (addr[0] == 0x26 && addr[1] == 0x20 && addr[2] == 0x00 && (addr[3] & 0xff) == 0x9b)
|
if (addr[0] == 0x26 && addr[1] == 0x20 && addr[2] == 0x00 && (addr[3] & 0xff) == 0x9b)
|
||||||
return false;
|
return false;
|
||||||
// 6bone RFC 2471
|
// 6bone RFC 2471
|
||||||
if (addr[0] == 0x3f && (addr[1] & 0xff) == 0xfe)
|
if (addr[0] == 0x3f && (addr[1] & 0xff) == 0xfe)
|
||||||
return false;
|
return false;
|
||||||
// Documenation (example) RFC 3849
|
|
||||||
if (addr[0] == 0x20 && addr[1] == 0x01 && addr[2] == 0x0d && (addr[3] & 0xff) == 0xb8)
|
|
||||||
return false;
|
|
||||||
try {
|
try {
|
||||||
InetAddress ia = InetAddress.getByAddress(addr);
|
InetAddress ia = InetAddress.getByAddress(addr);
|
||||||
return
|
return
|
||||||
|
|||||||
Reference in New Issue
Block a user