diff --git a/app/src/main/java/com/emanuelef/remote_capture/CaptureService.java b/app/src/main/java/com/emanuelef/remote_capture/CaptureService.java
index 1e376c5e..4fbd6b6f 100644
--- a/app/src/main/java/com/emanuelef/remote_capture/CaptureService.java
+++ b/app/src/main/java/com/emanuelef/remote_capture/CaptureService.java
@@ -375,16 +375,19 @@ public class CaptureService extends VpnService implements Runnable {
/* In order to see the DNS packets into the VPN we must set an internal address as the DNS
* server. */
Builder builder = new Builder()
- .addAddress(vpn_ipv4, 30) // using a random IP as an address is needed
- .addRoute("0.0.0.0", 1)
- .addRoute("128.0.0.0", 1)
- .setMtu(VPN_MTU)
- .addDnsServer(vpn_dns);
+ .setMtu(VPN_MTU);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q)
builder.setMetered(false);
- if (mSettings.ipv6_enabled) {
+ if (getIPv4Enabled() == 1) {
+ builder.addAddress(vpn_ipv4, 30)
+ .addRoute("0.0.0.0", 1)
+ .addRoute("128.0.0.0", 1)
+ .addDnsServer(vpn_dns);
+ }
+
+ if (getIPv6Enabled() == 1) {
builder.addAddress(VPN_IP6_ADDRESS, 128);
// Route unicast IPv6 addresses
@@ -1105,7 +1108,9 @@ public class CaptureService extends VpnService implements Runnable {
public String getSocks5ProxyAuth() { return(mSocks5Auth); }
- public int getIPv6Enabled() { return(mSettings.ipv6_enabled ? 1 : 0); }
+ public int getIPv4Enabled() { return((mSettings.ip_mode != Prefs.IpMode.IPV6_ONLY) ? 1 : 0); }
+
+ public int getIPv6Enabled() { return((mSettings.ip_mode != Prefs.IpMode.IPV4_ONLY) ? 1 : 0); }
public int isRootCapture() { return(mSettings.root_capture ? 1 : 0); }
diff --git a/app/src/main/java/com/emanuelef/remote_capture/activities/SettingsActivity.java b/app/src/main/java/com/emanuelef/remote_capture/activities/SettingsActivity.java
index bcf66e00..b7cefa9f 100644
--- a/app/src/main/java/com/emanuelef/remote_capture/activities/SettingsActivity.java
+++ b/app/src/main/java/com/emanuelef/remote_capture/activities/SettingsActivity.java
@@ -128,7 +128,7 @@ public class SettingsActivity extends BaseActivity implements PreferenceFragment
private SwitchPreference mAutoBlockPrivateDNS;
private EditTextPreference mSocks5ProxyIp;
private EditTextPreference mSocks5ProxyPort;
- private Preference mIpv6Enabled;
+ private DropDownPreference mIpMode;
private DropDownPreference mCapInterface;
private SwitchPreference mMalwareDetectionEnabled;
private Billing mIab;
@@ -359,7 +359,7 @@ public class SettingsActivity extends BaseActivity implements PreferenceFragment
} else
mRootCaptureEnabled.setVisible(false);
- mIpv6Enabled = requirePreference(Prefs.PREF_IPV6_ENABLED);
+ mIpMode = requirePreference(Prefs.PREF_IP_MODE);
Preference ctrlPerm = requirePreference("control_permissions");
if(!PCAPdroid.getInstance().getCtrlPermissions().hasRules())
@@ -389,7 +389,7 @@ public class SettingsActivity extends BaseActivity implements PreferenceFragment
socks5ProxyHideShow(mTlsDecryption.isChecked(), mSocks5Enabled.isChecked());
}
- mIpv6Enabled.setVisible(!enabled);
+ mIpMode.setVisible(!enabled);
mCapInterface.setVisible(enabled);
}
}
diff --git a/app/src/main/java/com/emanuelef/remote_capture/model/CaptureSettings.java b/app/src/main/java/com/emanuelef/remote_capture/model/CaptureSettings.java
index 3f8fe3a8..8543fb74 100644
--- a/app/src/main/java/com/emanuelef/remote_capture/model/CaptureSettings.java
+++ b/app/src/main/java/com/emanuelef/remote_capture/model/CaptureSettings.java
@@ -16,7 +16,7 @@ public class CaptureSettings implements Serializable {
public boolean tls_decryption;
public String socks5_proxy_address;
public int socks5_proxy_port;
- public boolean ipv6_enabled;
+ public Prefs.IpMode ip_mode;
public boolean root_capture;
public boolean pcapdroid_trailer;
public boolean full_payload;
@@ -37,7 +37,7 @@ public class CaptureSettings implements Serializable {
socks5_enabled = Prefs.getSocks5Enabled(prefs);
socks5_proxy_address = Prefs.getSocks5ProxyAddress(prefs);
socks5_proxy_port = Prefs.getSocks5ProxyPort(prefs);
- ipv6_enabled = Prefs.getIPv6Enabled(prefs);
+ ip_mode = Prefs.getIPMode(prefs);
root_capture = Prefs.isRootCaptureEnabled(prefs);
pcapdroid_trailer = Prefs.isPcapdroidTrailerEnabled(prefs);
capture_interface = Prefs.getCaptureInterface(prefs);
@@ -57,7 +57,7 @@ public class CaptureSettings implements Serializable {
socks5_enabled = getBool(intent, Prefs.PREF_SOCKS5_ENABLED_KEY, false);
socks5_proxy_address = getString(intent, Prefs.PREF_SOCKS5_PROXY_IP_KEY, "0.0.0.0");
socks5_proxy_port = getInt(intent, Prefs.PREF_SOCKS5_PROXY_PORT_KEY, 8080);
- ipv6_enabled = getBool(intent, Prefs.PREF_IPV6_ENABLED, false);
+ ip_mode = Prefs.getIPMode(getString(intent, Prefs.PREF_IP_MODE, Prefs.IP_MODE_DEFAULT));
root_capture = getBool(intent, Prefs.PREF_ROOT_CAPTURE, false);
pcapdroid_trailer = getBool(intent, Prefs.PREF_PCAPDROID_TRAILER, false);
capture_interface = getString(intent, Prefs.PREF_CAPTURE_INTERFACE, "@inet");
diff --git a/app/src/main/java/com/emanuelef/remote_capture/model/Prefs.java b/app/src/main/java/com/emanuelef/remote_capture/model/Prefs.java
index 11b9ddb7..e00732f1 100644
--- a/app/src/main/java/com/emanuelef/remote_capture/model/Prefs.java
+++ b/app/src/main/java/com/emanuelef/remote_capture/model/Prefs.java
@@ -33,6 +33,11 @@ public class Prefs {
public static final String DUMP_PCAP_FILE = "pcap_file";
public static final String DEFAULT_DUMP_MODE = DUMP_NONE;
+ public static final String IP_MODE_IPV4_ONLY = "ipv4";
+ public static final String IP_MODE_IPV6_ONLY = "ipv6";
+ public static final String IP_MODE_BOTH = "both";
+ public static final String IP_MODE_DEFAULT = IP_MODE_IPV4_ONLY;
+
public static final String PAYLOAD_MODE_NONE = "none";
public static final String PAYLOAD_MODE_MINIMAL = "minimal";
public static final String PAYLOAD_MODE_FULL = "full";
@@ -50,7 +55,7 @@ public class Prefs {
public static final String PREF_HTTP_SERVER_PORT = "http_server_port";
public static final String PREF_PCAP_DUMP_MODE = "pcap_dump_mode_v2";
public static final String PREF_PCAP_URI = "pcap_uri";
- public static final String PREF_IPV6_ENABLED = "ipv6_enabled";
+ public static final String PREF_IP_MODE = "ip_mode";
public static final String PREF_APP_LANGUAGE = "app_language";
public static final String PREF_APP_THEME = "app_theme";
public static final String PREF_ROOT_CAPTURE = "root_capture";
@@ -77,6 +82,12 @@ public class Prefs {
UDP_EXPORTER
}
+ public enum IpMode {
+ IPV4_ONLY,
+ IPV6_ONLY,
+ BOTH,
+ }
+
public enum PayloadMode {
NONE,
MINIMAL,
@@ -92,6 +103,14 @@ public class Prefs {
}
}
+ public static IpMode getIPMode(String pref) {
+ switch (pref) {
+ case IP_MODE_IPV6_ONLY: return IpMode.IPV6_ONLY;
+ case IP_MODE_BOTH: return IpMode.BOTH;
+ default: return IpMode.IPV4_ONLY;
+ }
+ }
+
public static PayloadMode getPayloadMode(String pref) {
switch (pref) {
case PAYLOAD_MODE_MINIMAL: return PayloadMode.MINIMAL;
@@ -122,7 +141,7 @@ public class Prefs {
public static String getSocks5ProxyAddress(SharedPreferences p) { return(p.getString(PREF_SOCKS5_PROXY_IP_KEY, "0.0.0.0")); }
public static int getSocks5ProxyPort(SharedPreferences p) { return(Integer.parseInt(p.getString(Prefs.PREF_SOCKS5_PROXY_PORT_KEY, "8080"))); }
public static String getAppFilter(SharedPreferences p) { return(p.getString(PREF_APP_FILTER, "")); }
- public static boolean getIPv6Enabled(SharedPreferences p) { return(p.getBoolean(PREF_IPV6_ENABLED, false)); }
+ public static IpMode getIPMode(SharedPreferences p) { return(getIPMode(p.getString(PREF_IP_MODE, IP_MODE_DEFAULT))); }
public static boolean useEnglishLanguage(SharedPreferences p){ return("english".equals(p.getString(PREF_APP_LANGUAGE, "system")));}
public static boolean isRootCaptureEnabled(SharedPreferences p) { return(Utils.isRootAvailable() && p.getBoolean(PREF_ROOT_CAPTURE, false)); }
public static boolean isPcapdroidTrailerEnabled(SharedPreferences p) { return(p.getBoolean(PREF_PCAPDROID_TRAILER, false)); }
diff --git a/app/src/main/jni/core/capture_vpn.c b/app/src/main/jni/core/capture_vpn.c
index 10018a2e..f6056790 100644
--- a/app/src/main/jni/core/capture_vpn.c
+++ b/app/src/main/jni/core/capture_vpn.c
@@ -147,11 +147,11 @@ static bool check_dns_req_allowed(pcapdroid_t *pd, zdtun_conn_t *conn, pkt_conte
if(new_dns_server != 0) {
// Reload DNS server
- pd->vpn.dns_server = new_dns_server;
+ pd->vpn.ipv4.dns_server = new_dns_server;
new_dns_server = 0;
zdtun_ip_t ip = {0};
- ip.ip4 = pd->vpn.dns_server;
+ ip.ip4 = pd->vpn.ipv4.dns_server;
zdtun_set_dnat_info(pd->zdt, &ip, htons(53), 4);
log_d("Using new DNS server");
@@ -160,9 +160,9 @@ static bool check_dns_req_allowed(pcapdroid_t *pd, zdtun_conn_t *conn, pkt_conte
if(pctx->tuple->ipproto == IPPROTO_ICMP)
return true;
- bool is_internal_dns = (tuple->ipver == 4) && (tuple->dst_ip.ip4 == pd->vpn.internal_dns);
+ bool is_internal_dns = pd->vpn.ipv4.enabled && (tuple->ipver == 4) && (tuple->dst_ip.ip4 == pd->vpn.ipv4.internal_dns);
bool is_dns_server = is_internal_dns
- || ((tuple->ipver == 6) && (memcmp(&tuple->dst_ip.ip6, &pd->ipv6.dns_server, 16) == 0));
+ || (pd->vpn.ipv6.enabled && (tuple->ipver == 6) && (memcmp(&tuple->dst_ip.ip6, &pd->vpn.ipv6.dns_server, 16) == 0));
if(!is_dns_server) {
// try with known DNS servers
@@ -421,12 +421,16 @@ int run_vpn(pcapdroid_t *pd) {
}
#if ANDROID
- pd->vpn.internal_ipv4 = getIPv4Pref(pd->env, pd->capture_service, "getVpnIPv4");
- pd->vpn.internal_dns = getIPv4Pref(pd->env, pd->capture_service, "getVpnDns");
- pd->vpn.dns_server = getIPv4Pref(pd->env, pd->capture_service, "getDnsServer");
pd->vpn.resolver = init_uid_resolver(pd->sdk_ver, pd->env, pd->capture_service);
pd->vpn.known_dns_servers = blacklist_init();
pd->vpn.block_quic = getIntPref(pd->env, pd->capture_service, "blockQuick");
+
+ pd->vpn.ipv4.enabled = (bool) getIntPref(pd->env, pd->capture_service, "getIPv4Enabled");
+ pd->vpn.ipv4.dns_server = getIPv4Pref(pd->env, pd->capture_service, "getDnsServer");
+ pd->vpn.ipv4.internal_dns = getIPv4Pref(pd->env, pd->capture_service, "getVpnDns");
+
+ pd->vpn.ipv6.enabled = (bool) getIntPref(pd->env, pd->capture_service, "getIPv6Enabled");
+ pd->vpn.ipv6.dns_server = getIPv6Pref(pd->env, pd->capture_service, "getIpv6DnsServer");
#endif
zdtun_callbacks_t callbacks = {
@@ -461,9 +465,11 @@ int run_vpn(pcapdroid_t *pd) {
zdtun_set_socks5_userpass(zdt, pd->socks5.proxy_user, pd->socks5.proxy_pass);
}
- zdtun_ip_t ip = {0};
- ip.ip4 = pd->vpn.dns_server;
- zdtun_set_dnat_info(zdt, &ip, ntohs(53), 4);
+ if(pd->vpn.ipv4.enabled) {
+ zdtun_ip_t ip = {0};
+ ip.ip4 = pd->vpn.ipv4.dns_server;
+ zdtun_set_dnat_info(zdt, &ip, ntohs(53), 4);
+ }
pd_refresh_time(pd);
next_purge_ms = pd->now_ms + PERIODIC_PURGE_TIMEOUT_MS;
@@ -508,10 +514,11 @@ int run_vpn(pcapdroid_t *pd) {
goto housekeeping;
}
- if((pkt.tuple.ipver == 6) && (!pd->ipv6.enabled)) {
+ if(((pkt.tuple.ipver == 6) && !pd->vpn.ipv6.enabled) ||
+ ((pkt.tuple.ipver == 4) && !pd->vpn.ipv4.enabled)) {
char buf[512];
- log_d("ignoring IPv6 packet: %s",
+ log_d("ignoring IPv%d packet: %s", pkt.tuple.ipver,
zdtun_5tuple2str(&pkt.tuple, buf, sizeof(buf)));
goto housekeeping;
}
diff --git a/app/src/main/jni/core/jni_impl.c b/app/src/main/jni/core/jni_impl.c
index c260a185..8d334622 100644
--- a/app/src/main/jni/core/jni_impl.c
+++ b/app/src/main/jni/core/jni_impl.c
@@ -567,10 +567,6 @@ Java_com_emanuelef_remote_1capture_CaptureService_runPacketLoop(JNIEnv *env, jcl
.proxy_ip = getIPv4Pref(env, vpn, "getSocks5ProxyAddress"),
.proxy_port = htons(getIntPref(env, vpn, "getSocks5ProxyPort")),
},
- .ipv6 = {
- .enabled = (bool) getIntPref(env, vpn, "getIPv6Enabled"),
- .dns_server = getIPv6Pref(env, vpn, "getIpv6DnsServer"),
- },
.malware_detection = {
.enabled = (bool) getIntPref(env, vpn, "malwareDetectionEnabled"),
},
diff --git a/app/src/main/jni/core/pcapdroid.h b/app/src/main/jni/core/pcapdroid.h
index 02ae7bae..9cf50d96 100644
--- a/app/src/main/jni/core/pcapdroid.h
+++ b/app/src/main/jni/core/pcapdroid.h
@@ -204,11 +204,18 @@ typedef struct pcapdroid {
struct {
int tunfd;
bool block_quic;
- uint32_t dns_server;
- uint32_t internal_dns;
- uint32_t internal_ipv4;
blacklist_t *known_dns_servers;
uid_resolver_t *resolver;
+
+ struct {
+ bool enabled;
+ uint32_t dns_server;
+ uint32_t internal_dns;
+ } ipv4;
+ struct {
+ bool enabled;
+ struct in6_addr dns_server;
+ } ipv6;
} vpn;
struct {
struct pcap_conn_t *connections;
@@ -239,11 +246,6 @@ typedef struct pcapdroid {
char proxy_pass[32];
} socks5;
- struct {
- bool enabled;
- struct in6_addr dns_server;
- } ipv6;
-
struct {
bool enabled;
blacklist_t *bl; // blacklist
diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml
index 514289fe..1246ac2b 100644
--- a/app/src/main/res/values-de/strings.xml
+++ b/app/src/main/res/values-de/strings.xml
@@ -92,7 +92,6 @@
Speichern unter
%1$d älter Verbindungen werden nicht angezeigt
Unbekannt
- IPv6-Verbindungen zum Internet zulassen. Verwende dies nur in Netzwerken mit einem IPv6-Gateway
Fehler
Unerreichbar
Andere
diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml
index 733144f4..3332d7f4 100644
--- a/app/src/main/res/values-es/strings.xml
+++ b/app/src/main/res/values-es/strings.xml
@@ -71,8 +71,6 @@
PCAPdroid es una herramienta de captura y monitorización de red de código abierto que funciona sin privilegios root
Obténgalo:
Desconocido
- IPv6
- Permite las conexiones IPv6 a Internet. Utilízalo solo en redes con una puerta de enlace IPv6
Error
Inalcanzable
Otros
diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
index 6bd04f57..d7966aca 100644
--- a/app/src/main/res/values-fr/strings.xml
+++ b/app/src/main/res/values-fr/strings.xml
@@ -96,7 +96,6 @@
Chercher des applis
Fichier PCAP
Déconnecter l\'application RPV active et continuer \?
- Activer IPv6
Version
Chargement des applis…
Fermer le menu
@@ -109,7 +108,6 @@
Adresse IP du collecteur
Port du collecteur
Créer une fichier PCAP dans l\'espace de stockage
- Autoriser les connexions internet IPv6. À n\'utiliser que sur les réseaux connecté en IPv6
L\'obtenir :
PCAPdroid est un outil open-source de capture et de suivi de réseau qui fonctionne sans un compte administrateur
Port de proxy
diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml
index 1d2cec69..07f0eab4 100644
--- a/app/src/main/res/values-in/strings.xml
+++ b/app/src/main/res/values-in/strings.xml
@@ -211,7 +211,6 @@
Simpan ke file
Tidak diketahui
Log root
- Izinkan koneksi IPv6 ke Internet. Hanya gunakan ini di jaringan dengan gateway IPv6
Sistem
Tidak terjangkau
Alamat IP proxy
@@ -260,7 +259,6 @@
Pembuangan lalu lintas
Aktif
Telepon
- IPv6
SOCKS5
Proksi SOCKS5: %1$s:%2$d
Layanan telepon
diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml
index a36c6c50..2a9ba07a 100644
--- a/app/src/main/res/values-it/strings.xml
+++ b/app/src/main/res/values-it/strings.xml
@@ -71,8 +71,6 @@
PCAPdroid è un software libero per la cattura e il monitoraggio di rete che funziona senza privilegi di root
Scaricala:
Sconosciuta
- Abilita IPv6
- Permetti connessioni internet IPv6. Da abilitare soltanto in reti con gateway IPv6
Errore
Non raggiungibile
Altro
diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml
index 75ea7059..5402b209 100644
--- a/app/src/main/res/values-ja/strings.xml
+++ b/app/src/main/res/values-ja/strings.xml
@@ -71,8 +71,6 @@
PCAPdroid はルート権限なしで動作するオープン ソースのネットワーク キャプチャ、モニタリング ツールです
入手:
不明
- IPv6 を有効にする
- IPv6 インターネット接続を許可します。IPv6 ゲートウェイを搭載したネットワークでのみ有効にする必要があります
エラー
到達不能
その他
diff --git a/app/src/main/res/values-nb-rNO/strings.xml b/app/src/main/res/values-nb-rNO/strings.xml
index 955b20d8..4facfa9f 100644
--- a/app/src/main/res/values-nb-rNO/strings.xml
+++ b/app/src/main/res/values-nb-rNO/strings.xml
@@ -58,7 +58,6 @@
Kopier til utklippstavle
Lagre som fil
Ukjent
- Skru på IPv6
Feil
%1$d eldre tilkoblinger vises ikke
PCAPdroid er et fritt verktøy for nettverksovervåkning og lagring, som fungerer uten rot-tilgang
@@ -177,7 +176,6 @@
Opprett en PCAP-fil i enhetslagring
Alle tilkoblinger
Fangst kjører
- Tillat IPv6-tilkoblinger til Internett. Kun bruk dette på nettverk med en IPv6-portner.
Pakker som ikke kom fram
Installert
Trafikkfangst
diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml
index 73dfb6e0..cb183f3c 100644
--- a/app/src/main/res/values-pt-rBR/strings.xml
+++ b/app/src/main/res/values-pt-rBR/strings.xml
@@ -72,8 +72,6 @@
PCAPdroid é uma ferramenta de software livre de captura e monitoramento de rede que funciona sem acesso root
Baixar:
Desconhecido
- IPv6
- Permitir conexões IPv6. Deveria usar apenas em redes com um gateway IPv6
Erro
Inacessível
Outro
diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml
index c5dda931..0be5b6fb 100644
--- a/app/src/main/res/values-ru/strings.xml
+++ b/app/src/main/res/values-ru/strings.xml
@@ -71,8 +71,6 @@
PCAPdroid это свободный инструмент захвата и отслеживания сетевого трафика, который работает без привилегий суперпользователя
Получить его:
Неизвестное
- Включить IPv6
- Разрешить IPv6 соединения с интернетом. Это следует включать только в сетях с IPv6 шлюзом
Ошибка
Недоступен
Другое
diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml
index 766d17cc..80e8daa5 100644
--- a/app/src/main/res/values-tr/strings.xml
+++ b/app/src/main/res/values-tr/strings.xml
@@ -57,7 +57,6 @@
Kapalı
%1$d eski bağlantı gösterilmiyor
Bilinmeyen
- İnternete IPv6 bağlantıları yapmaya izin verin. Bunu yalnızca IPv6 ağ geçidi olan ağlarda kullanın
Diğer
Uygulama dili
İngilizce
@@ -266,7 +265,6 @@
Telefon
SOCKS5
Telefon hizmetleri
- IPv6
Yapılandır
\"VPN ve uygulamalar\" seçeneğini seçerek PCAPdroid CA sertifikasını kurun. Android, kilit ekranınızı veya parolanızı soracak
Ortadaki adam gerçekleştirerek SSL/TLS trafiğinin şifresini çöz. Bu artık bazı uygulamalarla çalışabilir, kullanım kılavuzuna bakın
diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml
index 4e2f2699..50d5d996 100644
--- a/app/src/main/res/values-zh-rCN/strings.xml
+++ b/app/src/main/res/values-zh-rCN/strings.xml
@@ -97,8 +97,6 @@
PCAPdroid 是一款无需获取根权限便可进行网络捕获和监视的开源工具
获取应用:
未知
- 启用 IPv6
- 允许 IPv6 网络连接。仅在带有 IPv6 网关的网络中使用
错误
不可达
其他
diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml
index e05091ff..122ce756 100644
--- a/app/src/main/res/values/arrays.xml
+++ b/app/src/main/res/values/arrays.xml
@@ -28,6 +28,17 @@
- @string/lang_english
+
+ - ipv4
+ - ipv6
+ - both
+
+
+ - @string/ipv4_only
+ - @string/ipv6_only
+ - @string/ip_both
+
+
- system
- light
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 391d6c20..82b7558b 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -104,8 +104,6 @@
Get it:
Unknown
Phone
- IPv6
- Allow IPv6 connections to the Internet. Only use this on networks with an IPv6 gateway
Error
Unreachable
Other
@@ -369,4 +367,8 @@
Heap usage
Memory usage
To prevent apps from accessing the Internet when PCAPdroid is not running (e.g. after a reboot) you can set PCAPdroid as an always-on VPN in lockdown mode.\n\nDo you want to open the VPN settings now?
+ VPN IP addresses
+ IPv4 only
+ IPv6 only
+ IPv4 and IPv6
diff --git a/app/src/main/res/xml/root_preferences.xml b/app/src/main/res/xml/root_preferences.xml
index 71a4ac43..d1a730a5 100644
--- a/app/src/main/res/xml/root_preferences.xml
+++ b/app/src/main/res/xml/root_preferences.xml
@@ -176,12 +176,14 @@
app:defaultValue="system"
app:useSimpleSummaryProvider="true"/>
-
+ app:defaultValue="ipv4"
+ app:useSimpleSummaryProvider="true" />