From d38c660c3658f04168ea5f61b538a98bb27e74f3 Mon Sep 17 00:00:00 2001 From: zzz <zzz@mail.i2p> Date: Sun, 1 Mar 2020 15:41:49 +0000 Subject: [PATCH] Console, i2ptunnel: Hide temporary IPv6 addresses from bind options --- .../src/net/i2p/i2ptunnel/web/EditBean.java | 3 +- .../web/helpers/ConfigClientsHelper.java | 3 +- core/java/src/net/i2p/util/Addresses.java | 32 ++++++++++++++++--- 3 files changed, 32 insertions(+), 6 deletions(-) diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/web/EditBean.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/web/EditBean.java index 8dbed73359..3fb3d7f960 100644 --- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/web/EditBean.java +++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/web/EditBean.java @@ -462,7 +462,8 @@ public class EditBean extends IndexBean { /** @since 0.8.3 */ public Set<String> interfaceSet() { - return Addresses.getAllAddresses(); + // exclude IPv6 temporary + return Addresses.getAddresses(true, true, true, false); } /** @since 0.9.12 */ diff --git a/apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigClientsHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigClientsHelper.java index ee7fec3dfe..8e07d426a3 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigClientsHelper.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigClientsHelper.java @@ -82,7 +82,8 @@ public class ConfigClientsHelper extends HelperBase { /** @since 0.8.3 */ public String[] intfcAddresses() { - ArrayList<String> al = new ArrayList<String>(Addresses.getAllAddresses()); + // Exclude IPv6 temporary + ArrayList<String> al = new ArrayList<String>(Addresses.getAddresses(true, true, true, false)); return al.toArray(new String[al.size()]); } diff --git a/core/java/src/net/i2p/util/Addresses.java b/core/java/src/net/i2p/util/Addresses.java index 213340aec6..a846b72705 100644 --- a/core/java/src/net/i2p/util/Addresses.java +++ b/core/java/src/net/i2p/util/Addresses.java @@ -151,6 +151,30 @@ public abstract class Addresses { public static SortedSet<String> getAddresses(boolean includeSiteLocal, boolean includeLoopbackAndWildcard, boolean includeIPv6) { + return getAddresses(includeSiteLocal, includeLoopbackAndWildcard, includeIPv6, includeIPv6); + } + + /** + * Warning: When includeSiteLocal and includeLoopbackAndWildcard are false, + * all returned addresses should be routable, but they are not necessarily + * appropriate for external use. For example, Teredo and 6to4 addresses + * are included with IPv6 results. Additional validation is recommended. + * See e.g. TransportUtil.isPubliclyRoutable(). + * + * Warning, very slow on Windows, appx. 200ms + 50ms/interface + * + * @return a sorted set of all addresses + * @param includeSiteLocal whether to include private like 192.168.x.x + * @param includeLoopbackAndWildcard whether to include 127.x.x.x and 0.0.0.0 + * @param includeIPv6 whether to include IPV6 + * @param includeIPv6Temporary whether to include IPV6 temporary addresses + * @return a Set of all addresses + * @since 0.9.46 + */ + public static SortedSet<String> getAddresses(boolean includeSiteLocal, + boolean includeLoopbackAndWildcard, + boolean includeIPv6, + boolean includeIPv6Temporary) { boolean haveIPv4 = false; boolean haveIPv6 = false; SortedSet<String> rv = new TreeSet<String>(); @@ -165,10 +189,6 @@ public abstract class Addresses { haveIPv4 = true; else haveIPv6 = true; - if (omitDeprecated && !isv4) { - if (isDeprecated((Inet6Address) allMyIps[i])) - continue; - } if (shouldInclude(allMyIps[i], includeSiteLocal, includeLoopbackAndWildcard, includeIPv6)) { rv.add(stripScope(allMyIps[i].getHostAddress())); @@ -207,6 +227,10 @@ public abstract class Addresses { if (isDeprecated((Inet6Address) addr)) continue; } + if (!includeIPv6Temporary && !isv4) { + if (isTemporary((Inet6Address) addr)) + continue; + } if (shouldInclude(addr, includeSiteLocal, includeLoopbackAndWildcard, includeIPv6)) { rv.add(stripScope(addr.getHostAddress())); -- GitLab