From cefe9b177047d29690063246cf25c5ab4e8955ea Mon Sep 17 00:00:00 2001 From: Max Lv Date: Sun, 2 Mar 2014 11:32:22 +0800 Subject: [PATCH] refine the iptables setup --- .../shadowsocks/ShadowsocksNatService.scala | 31 ++++++++----------- 1 file changed, 13 insertions(+), 18 deletions(-) diff --git a/src/main/scala/com/github/shadowsocks/ShadowsocksNatService.scala b/src/main/scala/com/github/shadowsocks/ShadowsocksNatService.scala index 4d26e05c..1600a1b2 100644 --- a/src/main/scala/com/github/shadowsocks/ShadowsocksNatService.scala +++ b/src/main/scala/com/github/shadowsocks/ShadowsocksNatService.scala @@ -70,10 +70,10 @@ class ShadowsocksNatService extends Service with BaseService { val TAG = "ShadowsocksNatService" - val CMD_IPTABLES_RETURN = " -t nat -A OUTPUT -p tcp -d 0.0.0.0 -j RETURN\n" - val CMD_IPTABLES_REDIRECT_ADD_SOCKS = " -t nat -A OUTPUT -p tcp " + "-j REDIRECT --to 8123\n" + val CMD_IPTABLES_RETURN = " -t nat -A OUTPUT -p tcp -d 0.0.0.0 -j RETURN" + val CMD_IPTABLES_REDIRECT_ADD_SOCKS = " -t nat -A OUTPUT -p tcp " + "-j REDIRECT --to 8123" val CMD_IPTABLES_DNAT_ADD_SOCKS = " -t nat -A OUTPUT -p tcp " + - "-j DNAT --to-destination 127.0.0.1:8123\n" + "-j DNAT --to-destination 127.0.0.1:8123" val DNS_PORT = 8153 private val mStartForegroundSignature = Array[Class[_]](classOf[Int], classOf[Notification]) @@ -298,9 +298,9 @@ class ShadowsocksNatService extends Service with BaseService { } def setupIptables: Boolean = { - val init_sb = new StringBuilder - val http_sb = new StringBuilder - init_sb.append(Utils.getIptables).append(" -t nat -F OUTPUT\n") + val init_sb = new ArrayBuffer[String] + val http_sb = new ArrayBuffer[String] + init_sb.append(Utils.getIptables + " -t nat -F OUTPUT") val cmd_bypass = Utils.getIptables + CMD_IPTABLES_RETURN if (!InetAddressUtils.isIPv6Address(config.proxy.toUpperCase)) { init_sb.append(cmd_bypass.replace("-d 0.0.0.0", "-d " + config.proxy)) @@ -308,16 +308,13 @@ class ShadowsocksNatService extends Service with BaseService { init_sb.append(cmd_bypass.replace("0.0.0.0", "127.0.0.1")) if (hasRedirectSupport) { init_sb - .append(Utils.getIptables) - .append(" -t nat -A OUTPUT -p udp --dport 53 -j REDIRECT --to ") - .append(DNS_PORT) - .append("\n") + .append(Utils.getIptables + " -t nat -A OUTPUT -p udp --dport 53 -j REDIRECT --to " + + DNS_PORT) } else { init_sb - .append(Utils.getIptables) - .append(" -t nat -A OUTPUT -p udp --dport 53 -j DNAT --to-destination 127.0.0.1:") - .append(DNS_PORT) - .append("\n") + .append(Utils.getIptables + + " -t nat -A OUTPUT -p udp --dport 53 -j DNAT --to-destination 127.0.0.1:" + + DNS_PORT) } if (config.isGFWList) { val chn_list: Array[String] = getResources.getStringArray(R.array.chn_list) @@ -354,10 +351,8 @@ class ShadowsocksNatService extends Service with BaseService { } } } - val init_rules: String = init_sb.toString() - Console.runRootCommand(init_rules) - val redt_rules: String = http_sb.toString() - Console.runRootCommand(redt_rules) + Console.runRootCommand(init_sb.toArray) + Console.runRootCommand(http_sb.toArray) true }