diff options
author | cyBerta <cyberta@riseup.net> | 2025-02-18 17:03:30 +0100 |
---|---|---|
committer | cyberta <cyberta@riseup.net> | 2025-02-28 10:49:48 +0000 |
commit | c4487cc3ecbae7890a9582f1781ffbb962577863 (patch) | |
tree | 97fabd50a6cb1b73f627977d4b7b3205cc448655 /app | |
parent | c3c7dbaeae8dcbb74b55f634d077d7aab75a9444 (diff) |
extend hopping pt configuarbility. Allow to set min- and maxHopPort, hopJitter and minHopSeconds
Diffstat (limited to 'app')
4 files changed, 68 insertions, 13 deletions
diff --git a/app/src/main/java/se/leap/bitmaskclient/base/models/Constants.java b/app/src/main/java/se/leap/bitmaskclient/base/models/Constants.java index 44fc6e89..cc6f3077 100644 --- a/app/src/main/java/se/leap/bitmaskclient/base/models/Constants.java +++ b/app/src/main/java/se/leap/bitmaskclient/base/models/Constants.java @@ -203,6 +203,10 @@ public interface Constants { String ENDPOINTS = "endpoints"; String PORT_SEED = "port_seed"; String PORT_COUNT = "port_count"; + String HOP_JITTER = "hop_jitter"; + String MIN_HOP_PORT = "min_hop_port"; + String MAX_HOP_PORT = "max_hop_port"; + String MIN_HOP_SECONDS = "min_hop_seconds"; String EXPERIMENTAL = "experimental"; String VERSION = "version"; String NAME = "name"; diff --git a/app/src/main/java/se/leap/bitmaskclient/base/models/Transport.java b/app/src/main/java/se/leap/bitmaskclient/base/models/Transport.java index abd42812..3b695692 100644 --- a/app/src/main/java/se/leap/bitmaskclient/base/models/Transport.java +++ b/app/src/main/java/se/leap/bitmaskclient/base/models/Transport.java @@ -1,10 +1,17 @@ package se.leap.bitmaskclient.base.models; +import static de.blinkt.openvpn.core.connection.Connection.TransportType.OBFS4_HOP; import static de.blinkt.openvpn.core.connection.Connection.TransportType.OPENVPN; import static se.leap.bitmaskclient.base.models.Constants.CAPABILITIES; import static se.leap.bitmaskclient.base.models.Constants.CERT; +import static se.leap.bitmaskclient.base.models.Constants.HOP_JITTER; import static se.leap.bitmaskclient.base.models.Constants.IAT_MODE; +import static se.leap.bitmaskclient.base.models.Constants.MAX_HOP_PORT; +import static se.leap.bitmaskclient.base.models.Constants.MIN_HOP_PORT; +import static se.leap.bitmaskclient.base.models.Constants.MIN_HOP_SECONDS; import static se.leap.bitmaskclient.base.models.Constants.PORTS; +import static se.leap.bitmaskclient.base.models.Constants.PORT_COUNT; +import static se.leap.bitmaskclient.base.models.Constants.PORT_SEED; import static se.leap.bitmaskclient.base.models.Constants.PROTOCOLS; import static se.leap.bitmaskclient.base.models.Constants.TRANSPORT; @@ -21,6 +28,7 @@ import org.json.JSONObject; import java.io.Serializable; import java.util.Map; +import java.util.Objects; import java.util.Vector; import de.blinkt.openvpn.core.connection.Connection; @@ -94,6 +102,14 @@ public class Transport implements Serializable { } Map<String, Object> options = modelsBridge.getOptions(); Transport.Options transportOptions = new Transport.Options((String) options.get(CERT), (String) options.get(IAT_MODE)); + if (OBFS4_HOP.toString().equals(modelsBridge.getType())) { + transportOptions.minHopSeconds = getIntOption(options, MIN_HOP_SECONDS, 5); + transportOptions.minHopPort = getIntOption(options, MIN_HOP_PORT, 49152); + transportOptions.maxHopPort = getIntOption(options, MAX_HOP_PORT, 65535); + transportOptions.hopJitter = getIntOption(options, HOP_JITTER, 10); + transportOptions.portCount = getIntOption(options, PORT_COUNT, 100); + transportOptions.portSeed = getIntOption(options, PORT_SEED, 1); + } Transport transport = new Transport( modelsBridge.getType(), new String[]{modelsBridge.getTransport()}, @@ -103,6 +119,16 @@ public class Transport implements Serializable { return transport; } + private static int getIntOption(Map<String, Object> options, String key, int defaultValue) { + try { + Object o = options.get(key); + return (int) o; + } catch (NullPointerException | ClassCastException e){ + e.printStackTrace(); + return defaultValue; + } + } + public static Transport createTransportFrom(ModelsGateway modelsGateway) { if (modelsGateway == null) { return null; @@ -165,7 +191,6 @@ public class Transport implements Serializable { private final String cert; @SerializedName("iatMode") private final String iatMode; - @Nullable private Endpoint[] endpoints; @@ -174,23 +199,30 @@ public class Transport implements Serializable { private int portSeed; private int portCount; - + private int minHopPort; + private int maxHopPort; + private int minHopSeconds; + private int hopJitter; public Options(String cert, String iatMode) { this.cert = cert; this.iatMode = iatMode; } - public Options(String iatMode, Endpoint[] endpoints, int portSeed, int portCount, boolean experimental) { - this(iatMode, endpoints, null, portSeed, portCount, experimental); + public Options(String iatMode, Endpoint[] endpoints, int portSeed, int portCount, int minHopPort, int maxHopPort, int minHopSeconds, int hopJitter, boolean experimental) { + this(iatMode, endpoints, null, portSeed, portCount, minHopPort, maxHopPort, minHopSeconds, hopJitter, experimental); } - public Options(String iatMode, Endpoint[] endpoints, String cert, int portSeed, int portCount, boolean experimental) { + public Options(String iatMode, Endpoint[] endpoints, String cert, int portSeed, int portCount, int minHopPort, int maxHopPort, int minHopSeconds, int hopJitter, boolean experimental) { this.iatMode = iatMode; this.endpoints = endpoints; this.portSeed = portSeed; this.portCount = portCount; this.experimental = experimental; + this.minHopPort = minHopPort; + this.maxHopPort = maxHopPort; + this.minHopSeconds = minHopSeconds; + this.hopJitter = hopJitter; this.cert = cert; } @@ -221,6 +253,22 @@ public class Transport implements Serializable { return portCount; } + public int getMinHopPort() { + return minHopPort; + } + + public int getMaxHopPort() { + return maxHopPort; + } + + public int getMinHopSeconds() { + return minHopSeconds; + } + + public int getHopJitter() { + return hopJitter; + } + @Override public String toString() { return new Gson().toJson(this); diff --git a/app/src/main/java/se/leap/bitmaskclient/pluggableTransports/ObfsvpnClient.java b/app/src/main/java/se/leap/bitmaskclient/pluggableTransports/ObfsvpnClient.java index 9fdf3670..625bbfd8 100644 --- a/app/src/main/java/se/leap/bitmaskclient/pluggableTransports/ObfsvpnClient.java +++ b/app/src/main/java/se/leap/bitmaskclient/pluggableTransports/ObfsvpnClient.java @@ -42,7 +42,7 @@ public class ObfsvpnClient implements EventLogger { } KcpConfig kcpConfig = new KcpConfig(kcpEnabled); QuicConfig quicConfig = new QuicConfig(quicEnabled); - HoppingConfig hoppingConfig = new HoppingConfig(hoppingEnabled,IP+":"+PORT, options, 10, 10); + HoppingConfig hoppingConfig = new HoppingConfig(hoppingEnabled,IP+":"+PORT, options); ObfsvpnConfig obfsvpnConfig = new ObfsvpnConfig(IP+":"+PORT, hoppingConfig, kcpConfig, quicConfig, options.bridgeIP, options.transport.getPorts()[0], options.transport.getOptions().getCert() ); try { Log.d(TAG, obfsvpnConfig.toString()); diff --git a/app/src/main/java/se/leap/bitmaskclient/pluggableTransports/models/HoppingConfig.java b/app/src/main/java/se/leap/bitmaskclient/pluggableTransports/models/HoppingConfig.java index 96b8c460..0dc2d508 100644 --- a/app/src/main/java/se/leap/bitmaskclient/pluggableTransports/models/HoppingConfig.java +++ b/app/src/main/java/se/leap/bitmaskclient/pluggableTransports/models/HoppingConfig.java @@ -11,14 +11,15 @@ import se.leap.bitmaskclient.base.models.Transport; public class HoppingConfig { /** - * Enabled bool `json:"enabled"` + * Enabled bool `json:"enabled"` * Remotes []string `json:"remotes"` * Obfs4Certs []string `json:"obfs4_certs"` * PortSeed int64 `json:"port_seed"` * PortCount uint `json:"port_count"` + * MinHopPort uint `json:"min_hop_port"` + * MaxHopPort uint `json:"max_hop_port"` * MinHopSeconds uint `json:"min_hop_seconds"` * HopJitter uint `json:"hop_jitter"` - * } */ final boolean enabled; @@ -29,12 +30,12 @@ public class HoppingConfig { final int portCount; final int minHopSeconds; final int hopJitter; + final int minHopPort; + final int maxHopPort; public HoppingConfig(boolean enabled, String proxyAddr, - Obfs4Options options, - int minHopSeconds, - int hopJitter) { + Obfs4Options options) { this.enabled = enabled; this.proxyAddr = proxyAddr; Transport transport = options.transport; @@ -54,8 +55,10 @@ public class HoppingConfig { } this.portSeed = transport.getOptions().getPortSeed(); this.portCount = transport.getOptions().getPortCount(); - this.minHopSeconds = minHopSeconds; - this.hopJitter = hopJitter; + this.minHopSeconds = transport.getOptions().getMinHopSeconds(); + this.hopJitter = transport.getOptions().getHopJitter(); + this.minHopPort = transport.getOptions().getMinHopPort(); + this.maxHopPort = transport.getOptions().getMaxHopPort(); } @NonNull |