Improved transproxy code for background service
svn:r24645
This commit is contained in:
parent
79179e28d9
commit
0c60572ef6
|
@ -801,23 +801,29 @@ public final class Api {
|
||||||
boolean changed = false;
|
boolean changed = false;
|
||||||
try {
|
try {
|
||||||
// Check iptables_g1
|
// Check iptables_g1
|
||||||
File file = new File(ctx.getDir("bin",0), "iptables_g1");
|
File file = new File(ctx.getDir("bin",0), "iptables");
|
||||||
|
|
||||||
if ((!file.exists()) && isARMv6()) {
|
if ((!file.exists()) && isARMv6()) {
|
||||||
copyRawFile(ctx, R.raw.iptables_g1, file, "755");
|
copyRawFile(ctx, R.raw.iptables_g1, file, "755");
|
||||||
changed = true;
|
changed = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check iptables_n1
|
// Check iptables_n1
|
||||||
file = new File(ctx.getDir("bin",0), "iptables_n1");
|
file = new File(ctx.getDir("bin",0), "iptables");
|
||||||
if ((!file.exists()) && (!isARMv6())) {
|
if ((!file.exists()) && (!isARMv6())) {
|
||||||
copyRawFile(ctx, R.raw.iptables_n1, file, "755");
|
copyRawFile(ctx, R.raw.iptables_n1, file, "755");
|
||||||
changed = true;
|
changed = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check busybox
|
// Check busybox
|
||||||
|
/*
|
||||||
file = new File(ctx.getDir("bin",0), "busybox_g1");
|
file = new File(ctx.getDir("bin",0), "busybox_g1");
|
||||||
if (!file.exists()) {
|
if (!file.exists()) {
|
||||||
copyRawFile(ctx, R.raw.busybox_g1, file, "755");
|
copyRawFile(ctx, R.raw.busybox_g1, file, "755");
|
||||||
changed = true;
|
changed = true;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
if (changed) {
|
if (changed) {
|
||||||
Toast.makeText(ctx, R.string.status_install_success, Toast.LENGTH_LONG).show();
|
Toast.makeText(ctx, R.string.status_install_success, Toast.LENGTH_LONG).show();
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,6 +37,11 @@ interface ITorService {
|
||||||
* Set configuration
|
* Set configuration
|
||||||
**/
|
**/
|
||||||
boolean updateConfiguration (String name, String value, boolean saveToDisk);
|
boolean updateConfiguration (String name, String value, boolean saveToDisk);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set configuration
|
||||||
|
**/
|
||||||
|
void processSettings();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set configuration
|
* Set configuration
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -6,8 +6,6 @@ public interface TorServiceConstants {
|
||||||
|
|
||||||
public final static String TAG = "ORBOT";
|
public final static String TAG = "ORBOT";
|
||||||
|
|
||||||
public static boolean LOG_OUTPUT_TO_DEBUG = true;
|
|
||||||
|
|
||||||
public final static String TOR_APP_USERNAME = "org.torproject.android";
|
public final static String TOR_APP_USERNAME = "org.torproject.android";
|
||||||
|
|
||||||
public final static String ASSETS_BASE = "assets/";
|
public final static String ASSETS_BASE = "assets/";
|
||||||
|
@ -78,4 +76,9 @@ public interface TorServiceConstants {
|
||||||
|
|
||||||
public final static int PROFILE_OFF = -1;
|
public final static int PROFILE_OFF = -1;
|
||||||
public final static int PROFILE_ON = 1;
|
public final static int PROFILE_ON = 1;
|
||||||
|
|
||||||
|
public static final int STATUS_MSG = 1;
|
||||||
|
public static final int ENABLE_TOR_MSG = 2;
|
||||||
|
public static final int DISABLE_TOR_MSG = 3;
|
||||||
|
public static final int LOG_MSG = 4;
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,22 +34,19 @@ public class TorServiceUtils implements TorServiceConstants {
|
||||||
|
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
//this means that there is no root to be had (normally) so we won't log anything
|
//this means that there is no root to be had (normally) so we won't log anything
|
||||||
|
TorService.logException("Error checking for root access",e);
|
||||||
|
|
||||||
}
|
}
|
||||||
catch (Exception e) {
|
catch (Exception e) {
|
||||||
Log.w(TAG,"Error checking for root access: " + e.getMessage());
|
TorService.logException("Error checking for root access",e);
|
||||||
//this means that there is no root to be had (normally)
|
//this means that there is no root to be had (normally)
|
||||||
}
|
}
|
||||||
|
|
||||||
logNotice("Could not acquire root permissions");
|
TorService.logMessage("Could not acquire root permissions");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private static void logNotice (String msg)
|
|
||||||
{
|
|
||||||
if (LOG_OUTPUT_TO_DEBUG)
|
|
||||||
Log.d(TAG, msg);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int findProcessId(String command)
|
public static int findProcessId(String command)
|
||||||
{
|
{
|
||||||
|
@ -106,7 +103,7 @@ public class TorServiceUtils implements TorServiceConstants {
|
||||||
}
|
}
|
||||||
catch (NumberFormatException e)
|
catch (NumberFormatException e)
|
||||||
{
|
{
|
||||||
logNotice("unable to parse process pid: " + line);
|
TorService.logException("unable to parse process pid: " + line,e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -153,7 +150,7 @@ public class TorServiceUtils implements TorServiceConstants {
|
||||||
|
|
||||||
public static int doShellCommand(String[] cmds, StringBuilder log, boolean runAsRoot, boolean waitFor) throws Exception
|
public static int doShellCommand(String[] cmds, StringBuilder log, boolean runAsRoot, boolean waitFor) throws Exception
|
||||||
{
|
{
|
||||||
logNotice("executing shell cmds: " + cmds[0] + "; runAsRoot=" + runAsRoot);
|
TorService.logMessage("executing shell cmds: " + cmds[0] + "; runAsRoot=" + runAsRoot);
|
||||||
|
|
||||||
|
|
||||||
Process proc = null;
|
Process proc = null;
|
||||||
|
@ -201,7 +198,7 @@ public class TorServiceUtils implements TorServiceConstants {
|
||||||
log.append(exitCode);
|
log.append(exitCode);
|
||||||
log.append("\n");
|
log.append("\n");
|
||||||
|
|
||||||
logNotice("command process exit value: " + exitCode);
|
TorService.logMessage("command process exit value: " + exitCode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -11,55 +11,11 @@ public class TorTransProxy implements TorServiceConstants {
|
||||||
|
|
||||||
private final static String TAG = TorServiceConstants.TAG;
|
private final static String TAG = TorServiceConstants.TAG;
|
||||||
|
|
||||||
//private static String BASE_DIR = "/data/data/" + TorServiceConstants.TOR_APP_USERNAME + "/";
|
|
||||||
|
|
||||||
private static void logNotice (String msg)
|
|
||||||
{
|
|
||||||
if (LOG_OUTPUT_TO_DEBUG)
|
|
||||||
Log.d(TAG, msg);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Check if we have root access
|
|
||||||
* @return boolean true if we have root
|
|
||||||
*/
|
|
||||||
/*
|
|
||||||
public static String getIPTablesVersion() {
|
|
||||||
|
|
||||||
|
|
||||||
StringBuilder log = new StringBuilder();
|
|
||||||
|
|
||||||
try {
|
|
||||||
|
|
||||||
// Run an empty script just to check root access
|
|
||||||
String[] cmd = {"iptables -v"};
|
|
||||||
int code = TorServiceUtils.doShellCommand(cmd, log, true, true);
|
|
||||||
String msg = log.toString();
|
|
||||||
logNotice(cmd[0] + ";errCode=" + code + ";resp=" + msg);
|
|
||||||
|
|
||||||
|
|
||||||
String out = log.toString();
|
|
||||||
if (out.indexOf(" v")!=-1)
|
|
||||||
{
|
|
||||||
|
|
||||||
out = out.substring(out.indexOf(" v")+2);
|
|
||||||
out = out.substring(0,out.indexOf(":"));
|
|
||||||
|
|
||||||
return out.trim();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
} catch (Exception e) {
|
|
||||||
Log.w(TAG,"Error checking iptables version: " + e.getMessage() ,e);
|
|
||||||
}
|
|
||||||
|
|
||||||
logNotice("Could not acquire check iptables: " + log.toString());
|
|
||||||
return null;
|
|
||||||
}*/
|
|
||||||
|
|
||||||
public static int purgeIptables(Context context) throws Exception {
|
public static int purgeIptables(Context context) throws Exception {
|
||||||
|
|
||||||
String ipTablesPath = new File(context.getDir("bin", 0),"iptables_n1").getAbsolutePath();
|
String ipTablesPath = new File(context.getDir("bin", 0),"iptables").getAbsolutePath();
|
||||||
|
|
||||||
final StringBuilder script = new StringBuilder();
|
final StringBuilder script = new StringBuilder();
|
||||||
|
|
||||||
|
@ -78,7 +34,8 @@ public class TorTransProxy implements TorServiceConstants {
|
||||||
String[] cmd = {script.toString()};
|
String[] cmd = {script.toString()};
|
||||||
code = TorServiceUtils.doShellCommand(cmd, res, true, true);
|
code = TorServiceUtils.doShellCommand(cmd, res, true, true);
|
||||||
String msg = res.toString();
|
String msg = res.toString();
|
||||||
logNotice(cmd[0] + ";errCode=" + code + ";resp=" + msg);
|
|
||||||
|
TorService.logMessage(cmd[0] + ";errCode=" + code + ";resp=" + msg);
|
||||||
|
|
||||||
|
|
||||||
return code;
|
return code;
|
||||||
|
@ -90,7 +47,7 @@ public class TorTransProxy implements TorServiceConstants {
|
||||||
|
|
||||||
//restoreDNSResolvConf(); //not working yet
|
//restoreDNSResolvConf(); //not working yet
|
||||||
|
|
||||||
String ipTablesPath = new File(context.getDir("bin", 0),"iptables_n1").getAbsolutePath();
|
String ipTablesPath = new File(context.getDir("bin", 0),"iptables").getAbsolutePath();
|
||||||
|
|
||||||
final StringBuilder script = new StringBuilder();
|
final StringBuilder script = new StringBuilder();
|
||||||
|
|
||||||
|
@ -171,12 +128,14 @@ public class TorTransProxy implements TorServiceConstants {
|
||||||
public static int setTransparentProxyingByApp(Context context, TorifiedApp[] apps, boolean forceAll) throws Exception
|
public static int setTransparentProxyingByApp(Context context, TorifiedApp[] apps, boolean forceAll) throws Exception
|
||||||
{
|
{
|
||||||
|
|
||||||
|
boolean runRoot = true;
|
||||||
|
boolean waitFor = true;
|
||||||
|
|
||||||
//android.os.Debug.waitForDebugger();
|
//android.os.Debug.waitForDebugger();
|
||||||
|
|
||||||
//redirectDNSResolvConf(); //not working yet
|
//redirectDNSResolvConf(); //not working yet
|
||||||
|
|
||||||
//String baseDir = context.getDir("bin", 0).getAbsolutePath() + "/";
|
String ipTablesPath = new File(context.getDir("bin", 0),"iptables").getAbsolutePath();
|
||||||
String ipTablesPath = new File(context.getDir("bin", 0),"iptables_n1").getAbsolutePath();
|
|
||||||
|
|
||||||
boolean ipTablesOld = false;
|
boolean ipTablesOld = false;
|
||||||
|
|
||||||
|
@ -202,17 +161,8 @@ public class TorTransProxy implements TorServiceConstants {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
logNotice("enabling transproxy for app: " + apps[i].getUsername() + "(" + apps[i].getUid() + ")");
|
TorService.logMessage("enabling transproxy for app: " + apps[i].getUsername() + "(" + apps[i].getUid() + ")");
|
||||||
|
|
||||||
/*
|
|
||||||
* iptables -t nat -A OUTPUT -p tcp -m owner --uid-owner anonymous -m tcp --syn -j REDIRECT --to-ports 9040
|
|
||||||
iptables -t nat -A OUTPUT -p udp -m owner --uid-owner anonymous -m udp --dport 53 -j REDIRECT --to-ports 53
|
|
||||||
iptables -t nat -A OUTPUT -m owner --uid-owner anonymous -j DROP
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
//iptables -t nat -A output -p tcp -m owner --uid-owner 100 -m tcp --sync -j REDIRECT --to-ports 9040
|
|
||||||
|
|
||||||
//TCP
|
//TCP
|
||||||
script.append(ipTablesPath);
|
script.append(ipTablesPath);
|
||||||
script.append(" -t nat");
|
script.append(" -t nat");
|
||||||
|
@ -248,7 +198,6 @@ iptables -t nat -A OUTPUT -m owner --uid-owner anonymous -j DROP
|
||||||
script.append(" || exit\n");
|
script.append(" || exit\n");
|
||||||
|
|
||||||
|
|
||||||
//EVERYTHING ELSE - DROP!
|
|
||||||
if (ipTablesOld) //for some reason this doesn't work on iptables 1.3.7
|
if (ipTablesOld) //for some reason this doesn't work on iptables 1.3.7
|
||||||
{
|
{
|
||||||
script.append(ipTablesPath);
|
script.append(ipTablesPath);
|
||||||
|
@ -288,17 +237,16 @@ iptables -t nat -A OUTPUT -m owner --uid-owner anonymous -j DROP
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String[] cmdAdd = {script.toString()};
|
||||||
|
|
||||||
String[] cmdAdd = {script.toString()};
|
code = TorServiceUtils.doShellCommand(cmdAdd, res, runRoot, waitFor);
|
||||||
code = TorServiceUtils.doShellCommand(cmdAdd, res, true, true);
|
|
||||||
String msg = res.toString();
|
String msg = res.toString();
|
||||||
logNotice(cmdAdd[0] + ";errCode=" + code + ";resp=" + msg);
|
TorService.logMessage(cmdAdd[0] + ";errCode=" + code + ";resp=" + msg);
|
||||||
|
|
||||||
|
|
||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
|
@ -311,7 +259,7 @@ iptables -t nat -A OUTPUT -m owner --uid-owner anonymous -j DROP
|
||||||
//redirectDNSResolvConf(); //not working yet
|
//redirectDNSResolvConf(); //not working yet
|
||||||
|
|
||||||
//String baseDir = context.getDir("bin",0).getAbsolutePath() + '/';
|
//String baseDir = context.getDir("bin",0).getAbsolutePath() + '/';
|
||||||
String ipTablesPath = new File(context.getDir("bin", 0),"iptables_n1").getAbsolutePath();
|
String ipTablesPath = new File(context.getDir("bin", 0),"iptables").getAbsolutePath();
|
||||||
|
|
||||||
boolean ipTablesOld = false;
|
boolean ipTablesOld = false;
|
||||||
|
|
||||||
|
@ -380,7 +328,7 @@ iptables -t nat -A OUTPUT -m owner --uid-owner anonymous -j DROP
|
||||||
String[] cmdAdd = {script.toString()};
|
String[] cmdAdd = {script.toString()};
|
||||||
code = TorServiceUtils.doShellCommand(cmdAdd, res, true, true);
|
code = TorServiceUtils.doShellCommand(cmdAdd, res, true, true);
|
||||||
String msg = res.toString();
|
String msg = res.toString();
|
||||||
logNotice(cmdAdd[0] + ";errCode=" + code + ";resp=" + msg);
|
TorService.logMessage(cmdAdd[0] + ";errCode=" + code + ";resp=" + msg);
|
||||||
|
|
||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue