use commons-net instead
This commit is contained in:
@@ -53,7 +53,8 @@ import org.apache.http.conn.util.InetAddressUtils
|
||||
import android.os.Message
|
||||
import scala.Some
|
||||
import scala.concurrent.ops._
|
||||
import be.jvb.iptypes.{IpNetwork, IpAddress}
|
||||
import org.apache.commons.net.util.SubnetUtils
|
||||
import java.net.InetAddress
|
||||
|
||||
object ShadowVpnService {
|
||||
def isServiceStarted(context: Context): Boolean = {
|
||||
@@ -251,10 +252,7 @@ class ShadowVpnService extends VpnService {
|
||||
|
||||
def startVpn() {
|
||||
|
||||
val proxy_address = new IpAddress(config.proxy)
|
||||
|
||||
val private_networks = Array[IpNetwork](new IpNetwork("127.0.0.0/8"),
|
||||
new IpNetwork("10.0.0.0/8"), new IpNetwork("172.16.0.0/12"), new IpNetwork("192.168.0.0/16"))
|
||||
val proxy_address = config.proxy
|
||||
|
||||
val builder = new Builder()
|
||||
builder
|
||||
@@ -267,24 +265,27 @@ class ShadowVpnService extends VpnService {
|
||||
builder.addRoute("0.0.0.0", 0)
|
||||
} else if (config.isGFWList) {
|
||||
val gfwList = getResources.getStringArray(R.array.gfw_list)
|
||||
gfwList.foreach(addr => {
|
||||
val network = new IpNetwork(addr)
|
||||
if (!network.contains(proxy_address)) {
|
||||
builder.addRoute(network.address.toString, network.mask.prefixLength)
|
||||
gfwList.foreach(cidr => {
|
||||
val net = new SubnetUtils(cidr).getInfo
|
||||
if (!net.isInRange(proxy_address)) {
|
||||
val addr = cidr.split('/')
|
||||
builder.addRoute(addr(0), addr(1).toInt)
|
||||
}
|
||||
})
|
||||
} else {
|
||||
for (i <- 1 to 254) {
|
||||
val network = new IpNetwork(i.toString + ".0.0.0/8")
|
||||
if (!network.contains(proxy_address) &&
|
||||
private_networks.forall(range => !network.contains(range))) {
|
||||
builder.addRoute(i + ".0.0.0", 8)
|
||||
val addr = i.toString + ".0.0.0"
|
||||
val cidr = addr + "/8"
|
||||
val net = new SubnetUtils(cidr).getInfo
|
||||
if (!net.isInRange(proxy_address)) {
|
||||
if (!InetAddress.getByName(addr).isSiteLocalAddress) builder.addRoute(addr, 8)
|
||||
} else {
|
||||
for (j <- 0 to 255) {
|
||||
val subNetwork = new IpNetwork(i.toString + "." + j.toString + ".0.0/16")
|
||||
if (!subNetwork.contains(proxy_address) &&
|
||||
private_networks.forall(range => !range.overlaps(subNetwork))) {
|
||||
builder.addRoute(subNetwork.address.toString, subNetwork.mask.prefixLength)
|
||||
val addr = i.toString + "." + j.toString + ".0.0"
|
||||
val cidr = addr + "/16"
|
||||
val net = new SubnetUtils(cidr).getInfo
|
||||
if (!net.isInRange(proxy_address)) {
|
||||
if (!InetAddress.getByName(addr).isSiteLocalAddress) builder.addRoute(addr, 16)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -303,6 +303,8 @@ class ShadowsocksService extends Service {
|
||||
startDnsDaemon()
|
||||
startRedsocksDaemon()
|
||||
setupIptables
|
||||
flushDNS()
|
||||
|
||||
true
|
||||
}
|
||||
|
||||
@@ -496,6 +498,11 @@ class ShadowsocksService extends Service {
|
||||
Service.START_STICKY
|
||||
}
|
||||
|
||||
def flushDNS() {
|
||||
Utils.runRootCommand("ndc resolver flushdefaultif\n"
|
||||
+ "ndc resolver flushif wlan0\n")
|
||||
}
|
||||
|
||||
def setupIptables: Boolean = {
|
||||
val init_sb = new StringBuilder
|
||||
val http_sb = new StringBuilder
|
||||
|
||||
@@ -343,10 +343,14 @@ object Utils {
|
||||
|
||||
private def toggleAboveApiLevel17() {
|
||||
// Android 4.2 and above
|
||||
Utils.runRootCommand("settings put global airplane_mode_on 1\n"
|
||||
+ "am broadcast -a android.intent.action.AIRPLANE_MODE --ez state true\n"
|
||||
+ "settings put global airplane_mode_on 0\n"
|
||||
+ "am broadcast -a android.intent.action.AIRPLANE_MODE --ez state false\n")
|
||||
|
||||
Utils.runRootCommand("ndc resolver flushdefaultif\n"
|
||||
+ "ndc resolver flushif wlan0\n")
|
||||
|
||||
//Utils.runRootCommand("settings put global airplane_mode_on 1\n"
|
||||
// + "am broadcast -a android.intent.action.AIRPLANE_MODE --ez state true\n"
|
||||
// + "settings put global airplane_mode_on 0\n"
|
||||
// + "am broadcast -a android.intent.action.AIRPLANE_MODE --ez state false\n")
|
||||
}
|
||||
|
||||
private def toggleBelowApiLevel17(context: Context) {
|
||||
|
||||
Reference in New Issue
Block a user