move to using meek_lite mode from obfs4client and update/improve proxying code
This commit is contained in:
parent
66a5b7ad26
commit
57855932f4
|
@ -28,7 +28,7 @@ public class OrbotApp extends Application implements OrbotConstants
|
||||||
public static File fileTor;
|
public static File fileTor;
|
||||||
public static File filePolipo;
|
public static File filePolipo;
|
||||||
public static File fileObfsclient;
|
public static File fileObfsclient;
|
||||||
public static File fileMeekclient;
|
// public static File fileMeekclient;
|
||||||
public static File fileXtables;
|
public static File fileXtables;
|
||||||
public static File fileTorRc;
|
public static File fileTorRc;
|
||||||
public static File filePdnsd;
|
public static File filePdnsd;
|
||||||
|
@ -48,13 +48,10 @@ public class OrbotApp extends Application implements OrbotConstants
|
||||||
fileTor= new File(appBinHome, TorServiceConstants.TOR_ASSET_KEY);
|
fileTor= new File(appBinHome, TorServiceConstants.TOR_ASSET_KEY);
|
||||||
filePolipo = new File(appBinHome, TorServiceConstants.POLIPO_ASSET_KEY);
|
filePolipo = new File(appBinHome, TorServiceConstants.POLIPO_ASSET_KEY);
|
||||||
fileObfsclient = new File(appBinHome, TorServiceConstants.OBFSCLIENT_ASSET_KEY);
|
fileObfsclient = new File(appBinHome, TorServiceConstants.OBFSCLIENT_ASSET_KEY);
|
||||||
fileMeekclient = new File(appBinHome, TorServiceConstants.MEEK_ASSET_KEY);
|
|
||||||
fileXtables = new File(appBinHome, TorServiceConstants.IPTABLES_ASSET_KEY);
|
fileXtables = new File(appBinHome, TorServiceConstants.IPTABLES_ASSET_KEY);
|
||||||
fileTorRc = new File(appBinHome, TorServiceConstants.TORRC_ASSET_KEY);
|
fileTorRc = new File(appBinHome, TorServiceConstants.TORRC_ASSET_KEY);
|
||||||
filePdnsd = new File(appBinHome, TorServiceConstants.PDNSD_ASSET_KEY);
|
filePdnsd = new File(appBinHome, TorServiceConstants.PDNSD_ASSET_KEY);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -100,12 +100,13 @@ public class TorResourceInstaller implements TorServiceConstants {
|
||||||
shell.add(new SimpleCommand(COMMAND_RM_FORCE + outFile.getAbsolutePath())).waitForFinish();
|
shell.add(new SimpleCommand(COMMAND_RM_FORCE + outFile.getAbsolutePath())).waitForFinish();
|
||||||
streamToFile(is,outFile, false, true);
|
streamToFile(is,outFile, false, true);
|
||||||
setExecutable(outFile);
|
setExecutable(outFile);
|
||||||
|
/**
|
||||||
is = context.getAssets().open(cpuPath + "/" + MEEK_ASSET_KEY + MP3_EXT);
|
is = context.getAssets().open(cpuPath + "/" + MEEK_ASSET_KEY + MP3_EXT);
|
||||||
outFile = new File(installFolder, MEEK_ASSET_KEY);
|
outFile = new File(installFolder, MEEK_ASSET_KEY);
|
||||||
shell.add(new SimpleCommand(COMMAND_RM_FORCE + outFile.getAbsolutePath())).waitForFinish();
|
shell.add(new SimpleCommand(COMMAND_RM_FORCE + outFile.getAbsolutePath())).waitForFinish();
|
||||||
streamToFile(is,outFile, false, true);
|
streamToFile(is,outFile, false, true);
|
||||||
setExecutable(outFile);
|
setExecutable(outFile);
|
||||||
|
*/
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -61,6 +61,7 @@ import java.io.InputStream;
|
||||||
import java.io.InputStreamReader;
|
import java.io.InputStreamReader;
|
||||||
import java.io.PrintStream;
|
import java.io.PrintStream;
|
||||||
import java.io.PrintWriter;
|
import java.io.PrintWriter;
|
||||||
|
import java.net.InetAddress;
|
||||||
import java.net.InetSocketAddress;
|
import java.net.InetSocketAddress;
|
||||||
import java.net.Proxy;
|
import java.net.Proxy;
|
||||||
import java.net.Socket;
|
import java.net.Socket;
|
||||||
|
@ -482,25 +483,30 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
|
||||||
try {
|
try {
|
||||||
TorServiceUtils.killProcess(OrbotApp.fileObfsclient);
|
TorServiceUtils.killProcess(OrbotApp.fileObfsclient);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
e.printStackTrace();
|
// e.printStackTrace();
|
||||||
|
Log.w(TAG,"could not kill obfsclient",e);
|
||||||
cannotKillFile = OrbotApp.fileObfsclient;
|
cannotKillFile = OrbotApp.fileObfsclient;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
try {
|
try {
|
||||||
TorServiceUtils.killProcess(OrbotApp.fileMeekclient);
|
TorServiceUtils.killProcess(OrbotApp.fileMeekclient);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
cannotKillFile = OrbotApp.fileMeekclient;
|
cannotKillFile = OrbotApp.fileMeekclient;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
try {
|
try {
|
||||||
TorServiceUtils.killProcess(OrbotApp.filePolipo);
|
TorServiceUtils.killProcess(OrbotApp.filePolipo);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
e.printStackTrace();
|
Log.w(TAG,"could not kill polipo",e);
|
||||||
cannotKillFile = OrbotApp.filePolipo;
|
cannotKillFile = OrbotApp.filePolipo;
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
TorServiceUtils.killProcess(OrbotApp.fileTor);
|
TorServiceUtils.killProcess(OrbotApp.fileTor);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
e.printStackTrace();
|
Log.w(TAG,"could not kill tor",e);
|
||||||
cannotKillFile = OrbotApp.fileTor;
|
cannotKillFile = OrbotApp.fileTor;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -743,7 +749,9 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
|
||||||
|
|
||||||
if (Prefs.bridgesEnabled())
|
if (Prefs.bridgesEnabled())
|
||||||
if (Prefs.useVpn() && !mIsLollipop)
|
if (Prefs.useVpn() && !mIsLollipop)
|
||||||
customEnv.add("TOR_PT_PROXY=socks5://127.0.0.1:" + OrbotVpnService.sSocksProxyServerPort);
|
{
|
||||||
|
customEnv.add("TOR_PT_PROXY=socks5://" + OrbotVpnService.sSocksProxyLocalhost + ":" + OrbotVpnService.sSocksProxyServerPort);
|
||||||
|
}
|
||||||
|
|
||||||
String baseDirectory = OrbotApp.fileTor.getParent();
|
String baseDirectory = OrbotApp.fileTor.getParent();
|
||||||
Shell shellUser = Shell.startShell(customEnv, baseDirectory);
|
Shell shellUser = Shell.startShell(customEnv, baseDirectory);
|
||||||
|
@ -1658,7 +1666,9 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
|
||||||
|
|
||||||
}
|
}
|
||||||
catch (Exception ioe){
|
catch (Exception ioe){
|
||||||
debug("error requesting newnym: " + ioe.getLocalizedMessage());
|
|
||||||
|
debug("error requesting newnym: " + ioe.getLocalizedMessage());
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}.start();
|
}.start();
|
||||||
|
@ -1885,8 +1895,7 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
|
||||||
if (!mIsLollipop)
|
if (!mIsLollipop)
|
||||||
{
|
{
|
||||||
String proxyType = "socks5";
|
String proxyType = "socks5";
|
||||||
String proxyHost = "127.0.0.1";
|
extraLines.append(proxyType + "Proxy" + ' ' + OrbotVpnService.sSocksProxyLocalhost + ':' + OrbotVpnService.sSocksProxyServerPort).append('\n');
|
||||||
extraLines.append(proxyType + "Proxy" + ' ' + proxyHost + ':' + OrbotVpnService.sSocksProxyServerPort).append('\n');
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1936,7 +1945,7 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
|
||||||
{
|
{
|
||||||
|
|
||||||
//check if any PT bridges are needed
|
//check if any PT bridges are needed
|
||||||
boolean obfsBridges = bridgeList.contains("obfs3")||bridgeList.contains("obfs4")||bridgeList.contains("scramblesuit");
|
boolean obfsBridges = bridgeList.contains("obfs3")||bridgeList.contains("obfs4")||bridgeList.contains("scramblesuit")||bridgeList.contains("meek");
|
||||||
|
|
||||||
if (obfsBridges)
|
if (obfsBridges)
|
||||||
{
|
{
|
||||||
|
@ -1972,7 +1981,9 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
|
||||||
|
|
||||||
debug ("Using meek bridges");
|
debug ("Using meek bridges");
|
||||||
|
|
||||||
String bridgeConfig = "meek exec " + OrbotApp.fileMeekclient.getCanonicalPath();
|
// String bridgeConfig = "meek exec " + OrbotApp.fileMeekclient.getCanonicalPath();
|
||||||
|
String bridgeConfig = "meek_lite exec " + OrbotApp.fileObfsclient.getCanonicalPath();
|
||||||
|
|
||||||
extraLines.append("ClientTransportPlugin" + ' ' + bridgeConfig).append('\n');
|
extraLines.append("ClientTransportPlugin" + ' ' + bridgeConfig).append('\n');
|
||||||
|
|
||||||
int meekIdx = 2; //let's use Azure by default
|
int meekIdx = 2; //let's use Azure by default
|
||||||
|
|
|
@ -141,7 +141,7 @@ public interface TorServiceConstants {
|
||||||
//obfsproxy
|
//obfsproxy
|
||||||
public static final String OBFSCLIENT_ASSET_KEY = "obfs4proxy";
|
public static final String OBFSCLIENT_ASSET_KEY = "obfs4proxy";
|
||||||
|
|
||||||
public static final String MEEK_ASSET_KEY = "meek-client";
|
// public static final String MEEK_ASSET_KEY = "meek-client";
|
||||||
|
|
||||||
//name of the iptables binary
|
//name of the iptables binary
|
||||||
public final static String IPTABLES_ASSET_KEY = "xtables";
|
public final static String IPTABLES_ASSET_KEY = "xtables";
|
||||||
|
@ -155,9 +155,9 @@ public interface TorServiceConstants {
|
||||||
//MEEK BRIDGEs
|
//MEEK BRIDGEs
|
||||||
public final static String[] BRIDGES_MEEK =
|
public final static String[] BRIDGES_MEEK =
|
||||||
{
|
{
|
||||||
"meek 0.0.2.0:1 url=https://meek-reflect.appspot.com/ front=www.google.com",
|
"meek_lite 0.0.2.0:1 url=https://meek-reflect.appspot.com/ front=www.google.com",
|
||||||
"meek 0.0.2.0:2 url=https://d2zfqthxsdq309.cloudfront.net/ front=a0.awsstatic.com",
|
"meek_lite 0.0.2.0:2 url=https://d2zfqthxsdq309.cloudfront.net/ front=a0.awsstatic.com",
|
||||||
"meek 0.0.2.0:3 url=https://az668014.vo.msecnd.net/ front=ajax.aspnetcdn.com"
|
"meek_lite 0.0.2.0:3 url=https://az668014.vo.msecnd.net/ front=ajax.aspnetcdn.com"
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -178,12 +178,12 @@ public class TorServiceUtils implements TorServiceConstants {
|
||||||
}
|
}
|
||||||
|
|
||||||
catch(ConnectException ce){
|
catch(ConnectException ce){
|
||||||
ce.printStackTrace();
|
//ce.printStackTrace();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
catch (Exception ex) {
|
catch (Exception ex) {
|
||||||
ex.printStackTrace();
|
//ex.printStackTrace();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,6 +22,7 @@ import java.io.FileOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.PrintStream;
|
import java.io.PrintStream;
|
||||||
import java.net.InetAddress;
|
import java.net.InetAddress;
|
||||||
|
import java.net.UnknownHostException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import java.util.concurrent.TimeoutException;
|
import java.util.concurrent.TimeoutException;
|
||||||
|
@ -68,6 +69,7 @@ public class OrbotVpnService extends VpnService implements Handler.Callback {
|
||||||
private int mTorSocks = TorServiceConstants.SOCKS_PROXY_PORT_DEFAULT;
|
private int mTorSocks = TorServiceConstants.SOCKS_PROXY_PORT_DEFAULT;
|
||||||
|
|
||||||
public static int sSocksProxyServerPort = -1;
|
public static int sSocksProxyServerPort = -1;
|
||||||
|
public static String sSocksProxyLocalhost = null;
|
||||||
private ProxyServer mSocksProxyServer;
|
private ProxyServer mSocksProxyServer;
|
||||||
|
|
||||||
|
|
||||||
|
@ -108,11 +110,7 @@ public class OrbotVpnService extends VpnService implements Handler.Callback {
|
||||||
|
|
||||||
if (!mIsLollipop)
|
if (!mIsLollipop)
|
||||||
{
|
{
|
||||||
|
|
||||||
//generate the proxy port that the
|
|
||||||
if (sSocksProxyServerPort == -1)
|
|
||||||
sSocksProxyServerPort = (int)((Math.random()*1000)+10000);
|
|
||||||
|
|
||||||
startSocksBypass();
|
startSocksBypass();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -151,6 +149,24 @@ public class OrbotVpnService extends VpnService implements Handler.Callback {
|
||||||
|
|
||||||
public void run ()
|
public void run ()
|
||||||
{
|
{
|
||||||
|
|
||||||
|
//generate the proxy port that the
|
||||||
|
if (sSocksProxyServerPort == -1)
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
|
||||||
|
sSocksProxyLocalhost = "127.0.0.1";// InetAddress.getLocalHost().getHostAddress();
|
||||||
|
sSocksProxyServerPort = (int)((Math.random()*1000)+10000);
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
Log.e(TAG,"Unable to access localhost",e);
|
||||||
|
throw new RuntimeException("Unable to access localhost: " + e);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
if (mSocksProxyServer != null)
|
if (mSocksProxyServer != null)
|
||||||
{
|
{
|
||||||
stopSocksBypass ();
|
stopSocksBypass ();
|
||||||
|
@ -274,7 +290,6 @@ public class OrbotVpnService extends VpnService implements Handler.Callback {
|
||||||
//start PDNSD daemon pointing to OpenDNS
|
//start PDNSD daemon pointing to OpenDNS
|
||||||
startDNS(DEFAULT_ACTUAL_DNS,53);
|
startDNS(DEFAULT_ACTUAL_DNS,53);
|
||||||
|
|
||||||
|
|
||||||
final String vpnName = "OrbotVPN";
|
final String vpnName = "OrbotVPN";
|
||||||
final String localhost = "127.0.0.1";
|
final String localhost = "127.0.0.1";
|
||||||
|
|
||||||
|
@ -392,8 +407,10 @@ public class OrbotVpnService extends VpnService implements Handler.Callback {
|
||||||
" -c " + baseDirectory + "/pdnsd.conf";
|
" -c " + baseDirectory + "/pdnsd.conf";
|
||||||
|
|
||||||
SimpleCommand shellCommand = new SimpleCommand(cmdString);
|
SimpleCommand shellCommand = new SimpleCommand(cmdString);
|
||||||
|
|
||||||
shell.add(shellCommand).waitForFinish();
|
shell.add(shellCommand).waitForFinish();
|
||||||
|
|
||||||
|
Log.i(TAG,"PDNSD: " + shellCommand.getExitCode() + ": " + shellCommand.getOutput());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue