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 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 al = new ArrayList(Addresses.getAllAddresses()); + // Exclude IPv6 temporary + ArrayList al = new ArrayList(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 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 getAddresses(boolean includeSiteLocal, + boolean includeLoopbackAndWildcard, + boolean includeIPv6, + boolean includeIPv6Temporary) { boolean haveIPv4 = false; boolean haveIPv6 = false; SortedSet rv = new TreeSet(); @@ -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()));