add dns proxy option
This commit is contained in:
+2
-2
@@ -2,8 +2,8 @@
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="com.github.shadowsocks"
|
||||
android:installLocation="auto"
|
||||
android:versionCode="5"
|
||||
android:versionName="1.1.1">
|
||||
android:versionCode="6"
|
||||
android:versionName="1.1.2">
|
||||
|
||||
<uses-permission android:name="android.permission.INTERNET"/>
|
||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>com.github.shadowsocks</groupId>
|
||||
<artifactId>shadowsocks</artifactId>
|
||||
<version>1.1.1</version>
|
||||
<version>1.1.2</version>
|
||||
<packaging>apk</packaging>
|
||||
<name>Shadowsocks</name>
|
||||
|
||||
|
||||
@@ -160,6 +160,9 @@
|
||||
only works for Wifi on Android 4.0 and above.</string>
|
||||
|
||||
<string name="remote_port">Remote Port</string>
|
||||
<string name="remote_port_summary">Remote port of shadowsocks server</string>
|
||||
<string name="remote_port_summary">Remote port of shadowsocks server.</string>
|
||||
|
||||
<string name="dns_proxy">DNS Proxy</string>
|
||||
<string name="dns_proxy_summary">Redirect DNS queries to remote server.</string>
|
||||
|
||||
</resources>
|
||||
|
||||
@@ -41,6 +41,13 @@
|
||||
</EditTextPreference>
|
||||
</PreferenceCategory>
|
||||
<PreferenceCategory android:title="@string/fearute_cat">
|
||||
<CheckBoxPreference
|
||||
android:dependency="isRunning"
|
||||
android:defaultValue="true"
|
||||
android:key="isDNSProxy"
|
||||
android:summary="@string/dns_proxy_summary"
|
||||
android:title="@string/dns_proxy">
|
||||
</CheckBoxPreference>
|
||||
<CheckBoxPreference
|
||||
android:dependency="isRunning"
|
||||
android:defaultValue="true"
|
||||
|
||||
@@ -163,6 +163,7 @@ public class ShadowsocksService extends Service {
|
||||
private boolean isGlobalProxy = false;
|
||||
private boolean isGFWList = false;
|
||||
private boolean isBypassApps = false;
|
||||
private boolean isDNSProxy = false;
|
||||
private ProxyedApp apps[];
|
||||
private Method mSetForeground;
|
||||
private Method mStartForeground;
|
||||
@@ -203,7 +204,7 @@ public class ShadowsocksService extends Service {
|
||||
new Thread() {
|
||||
@Override
|
||||
public void run() {
|
||||
final String cmd = String.format(BASE +
|
||||
final String cmd = String.format(BASE +
|
||||
"shadowsocks -s \"%s\" -p \"%d\" -l \"%d\" -k \"%s\"",
|
||||
appHost, remotePort, port, sitekey);
|
||||
Node.exec(cmd);
|
||||
@@ -251,6 +252,7 @@ public class ShadowsocksService extends Service {
|
||||
isGlobalProxy = settings.getBoolean("isGlobalProxy", false);
|
||||
isGFWList = settings.getBoolean("isGFWList", false);
|
||||
isBypassApps = settings.getBoolean("isBypassApps", false);
|
||||
isDNSProxy = settings.getBoolean("isDNSProxy", false);
|
||||
|
||||
new Thread(new Runnable() {
|
||||
@Override
|
||||
@@ -258,16 +260,20 @@ public class ShadowsocksService extends Service {
|
||||
|
||||
boolean resolved = false;
|
||||
|
||||
if (appHost != null) {
|
||||
InetAddress addr = null;
|
||||
try {
|
||||
addr = InetAddress.getByName(appHost);
|
||||
} catch (UnknownHostException ignored) {
|
||||
}
|
||||
if (addr != null) {
|
||||
appHost = addr.getHostAddress();
|
||||
resolved = true;
|
||||
if (isDNSProxy) {
|
||||
if (appHost != null) {
|
||||
InetAddress addr = null;
|
||||
try {
|
||||
addr = InetAddress.getByName(appHost);
|
||||
} catch (UnknownHostException ignored) {
|
||||
}
|
||||
if (addr != null) {
|
||||
appHost = addr.getHostAddress();
|
||||
resolved = true;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
resolved = true;
|
||||
}
|
||||
|
||||
handler.sendEmptyMessage(MSG_CONNECT_START);
|
||||
@@ -519,17 +525,17 @@ public class ShadowsocksService extends Service {
|
||||
|
||||
StringBuilder http_sb = new StringBuilder();
|
||||
|
||||
StringBuilder https_sb = new StringBuilder();
|
||||
|
||||
init_sb.append(Utils.getIptables()).append(" -t nat -F OUTPUT\n");
|
||||
|
||||
String cmd_bypass = Utils.getIptables() + CMD_IPTABLES_RETURN;
|
||||
|
||||
init_sb.append(cmd_bypass.replace("-d 0.0.0.0", "--dport " + remotePort));
|
||||
//init_sb.append(cmd_bypass.replace("-d 0.0.0.0", "--dport " + 53));
|
||||
init_sb.append(cmd_bypass.replace("0.0.0.0", "127.0.0.1"));
|
||||
//init_sb.append(cmd_bypass.replace("-d 0.0.0.0", "-m owner --uid-owner "
|
||||
//+ getApplicationInfo().uid));
|
||||
if (!isDNSProxy) {
|
||||
init_sb.append(cmd_bypass.replace("-d 0.0.0.0", "--dport " + 53));
|
||||
init_sb.append(cmd_bypass.replace("-d 0.0.0.0", "-m owner --uid-owner "
|
||||
+ getApplicationInfo().uid));
|
||||
}
|
||||
|
||||
if (hasRedirectSupport) {
|
||||
init_sb.append(Utils.getIptables()).append(" -t nat -A OUTPUT -p udp --dport 53 -j REDIRECT --to ").append(DNS_PORT).append("\n");
|
||||
@@ -577,8 +583,6 @@ public class ShadowsocksService extends Service {
|
||||
|
||||
String redt_rules = http_sb.toString();
|
||||
|
||||
redt_rules += https_sb.toString();
|
||||
|
||||
Utils.runRootCommand(redt_rules);
|
||||
|
||||
return true;
|
||||
|
||||
Reference in New Issue
Block a user