mirror of
https://github.com/zhigang1992/flora-kit.git
synced 2026-04-30 14:02:31 +08:00
增加 networksetup 调用,启动的时候,自动开启网络的代理到 Flora
This commit is contained in:
@@ -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
69
flora/networksetup.go
Normal 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
|
||||
}
|
||||
Reference in New Issue
Block a user