增加 networksetup 调用,启动的时候,自动开启网络的代理到 Flora

This commit is contained in:
Jason Lee
2016-11-21 12:43:57 +08:00
parent 9ffd8157ad
commit d244b739ea
3 changed files with 88 additions and 0 deletions

View File

@@ -58,13 +58,30 @@ func init() {
iniConfig = cfg
loadGeoIP()
loadGeneral()
loadProxy()
loadRules()
SetSocksFirewallProxy()
debug.Println("104.244.42.129", GeoIPString("104.244.42.129"))
debug.Println(RuleOfHost("www.twitter.com"))
}
// [General] section
func loadGeneral() {
section := iniConfig.Section("General")
bypassDomains := []string{}
if section.HasKey("skip-proxy") {
bypassDomains = append(bypassDomains, readArrayLine(section.Key("skip-proxy").String())...)
}
if section.HasKey("bypass-tun") {
bypassDomains = append(bypassDomains, readArrayLine(section.Key("bypass-tun").String())...)
}
SetProxyBypassDomains(bypassDomains)
}
// [Proxy] Section
func loadProxy() {
ssConfig.LocalPort = SOCKS_PORT

69
flora/networksetup.go Normal file
View File

@@ -0,0 +1,69 @@
package flora
import (
"bytes"
"fmt"
"log"
"os/exec"
"strings"
)
type execNetworkFunc func(name string)
var allow_services = "Wi-Fi|Thunderbolt Bridge|Thunderbolt Ethernet"
func ResetAllProxys() {
execNetworks(func(name string) {
runNetworksetup("-setftpproxystate", name, "off")
runNetworksetup("-setwebproxystate", name, "off")
runNetworksetup("-setsecurewebproxystate", name, "off")
runNetworksetup("-setstreamingproxystate", name, "off")
runNetworksetup("-setgopherproxystate", name, "off")
runNetworksetup("-setsocksfirewallproxystate", name, "on")
runNetworksetup("-setproxyautodiscovery", name, "off")
})
}
func SetSocksFirewallProxy() {
execNetworks(func(name string) {
runNetworksetup("-setsocksfirewallproxy", name, "127.0.0.1", fmt.Sprintf("%d", SOCKS_PORT))
})
}
func SetProxyBypassDomains(domains []string) {
execNetworks(func(name string) {
args := []string{"-setproxybypassdomains", name}
args = append(args, domains...)
runNetworksetup(args...)
})
}
func runNetworksetup(args ...string) string {
// log.Println("networksetup", args)
cmd := exec.Command("networksetup", args...)
var out, stderr bytes.Buffer
cmd.Stdout = &out
cmd.Stderr = &stderr
err := cmd.Run()
if err != nil {
log.Println(err)
log.Println(stderr.String())
}
return out.String()
}
func execNetworks(callback execNetworkFunc) {
for _, name := range listNetworks() {
if !strings.Contains(allow_services, name) {
continue
}
callback(name)
}
}
func listNetworks() (networks []string) {
out := runNetworksetup("-listallnetworkservices")
out = strings.TrimSpace(out)
networks = strings.Split(out, "\n")
return
}