Revert "add simple config file support."

This reverts commit e9ef64bf6745494d0a33560de6226f371d63c9be.
This commit is contained in:
nadoo 2017-07-18 19:01:42 +08:00
parent cacde72e04
commit e27e482272
5 changed files with 57 additions and 70 deletions

3
.gitignore vendored
View File

@ -15,6 +15,7 @@
# custom
*.zip
*.conf
glider
doc/

View File

@ -7,21 +7,18 @@ glider is a forward proxy with several protocols support.
## Usage
```bash
glider v0.2 usage:
-checkduration int
proxy check duration(seconds) (default 30)
-checkhost string
glider v0.1 usage:
-checksite string
proxy check address (default "www.apple.com:443")
-config string
config file path
-forward value
-duration int
proxy check duration(seconds) (default 30)
-f value
forward url, format: SCHEMA://[USER|METHOD:PASSWORD@][HOST]:PORT[,SCHEMA://[USER|METHOD:PASSWORD@][HOST]:PORT]
-listen value
-l value
listen url, format: SCHEMA://[USER|METHOD:PASSWORD@][HOST]:PORT
-strategy string
-s string
forward strategy, default: rr (default "rr")
-verbose
verbose mode
-v verbose mode
Available Schemas:
mixed: serve as a http/socks5 proxy on the same port. (default)
@ -44,34 +41,31 @@ Available forward strategies:
ha: High Availability mode
Examples:
glider -config glider.conf
-run glider with specified config file.
glider -listen :8443
glider -l :8443 -v
-listen on :8443, serve as http/socks5 proxy on the same port.
glider -listen ss://AEAD_CHACHA20_POLY1305:pass@:8443
-listen on 0.0.0.0:8443 as a shadowsocks server.
glider -l ss://AEAD_CHACHA20_POLY1305:pass@:8443
-listen on 0.0.0.0:8443 as a ss server.
glider -listen socks5://:1080 -verbose
glider -l socks5://:1080 -v
-listen on :1080 as a socks5 proxy server, in verbose mode.
glider -listen http://:8080 -forward socks5://127.0.0.1:1080
glider -l http://:8080 -f socks5://127.0.0.1:1080 -v
-listen on :8080 as a http proxy server, forward all requests via socks5 server.
glider -listen redir://:1081 -forward ss://method:pass@1.1.1.1:443
glider -l redir://:1081 -f ss://method:pass@1.1.1.1:443
-listen on :1081 as a transparent redirect server, forward all requests via remote ss server.
glider -listen tcptun://:80=2.2.2.2:80 -forward ss://method:pass@1.1.1.1:443
glider -l tcptun://:80=2.2.2.2:80 -f ss://method:pass@1.1.1.1:443
-listen on :80 and forward all requests to 2.2.2.2:80 via remote ss server.
glider -listen socks5://:1080 -listen http://:8080 -forward ss://method:pass@1.1.1.1:443
glider -l socks5://:1080 -l http://:8080 -f ss://method:pass@1.1.1.1:443
-listen on :1080 as socks5 server, :8080 as http proxy server, forward all requests via remote ss server.
glider -listen redir://:1081 -listen dnstun://:53=8.8.8.8:53 -forward ss://method:pass@server1:port1,ss://method:pass@server2:port2
glider -l redir://:1081 -l dnstun://:53=8.8.8.8:53 -f ss://method:pass@server1:port1,ss://method:pass@server2:port2
-listen on :1081 as transparent redirect server, :53 as dns server, use forward chain: server1 -> server2.
glider -listen socks5://:1080 -forward ss://method:pass@server1:port1 -forward ss://method:pass@server2:port2 -s rr
glider -l socks5://:1080 -f ss://method:pass@server1:port1 -f ss://method:pass@server2:port2 -s rr
-listen on :1080 as socks5 server, forward requests via server1 and server2 in roundrbin mode.
```

72
main.go
View File

@ -1,40 +1,33 @@
package main
import (
"flag"
"fmt"
"log"
"os"
"os/signal"
"strings"
"syscall"
"github.com/nadoo/conflag"
)
// VERSION .
const VERSION = "0.2"
const version = "0.1.3"
var conf struct {
var config struct {
Verbose bool
Strategy string
CheckHost string
CheckSite string
CheckDuration int
Listen arrFlags
Forward arrFlags
}
var flag = conflag.New()
func logf(f string, v ...interface{}) {
if conf.Verbose {
if config.Verbose {
log.Printf(f, v...)
}
}
func usage() {
app := os.Args[0]
fmt.Fprintf(os.Stderr, "\n")
fmt.Fprintf(os.Stderr, "%s v%s usage:\n", app, VERSION)
fmt.Fprintf(os.Stderr, "%s v%s usage:\n", app, version)
flag.PrintDefaults()
fmt.Fprintf(os.Stderr, "\n")
@ -64,34 +57,31 @@ func usage() {
fmt.Fprintf(os.Stderr, "\n")
fmt.Fprintf(os.Stderr, "Examples:\n")
fmt.Fprintf(os.Stderr, " "+app+" -config glider.conf\n")
fmt.Fprintf(os.Stderr, " -run glider with specified config file.\n")
fmt.Fprintf(os.Stderr, "\n")
fmt.Fprintf(os.Stderr, " "+app+" -listen :8443\n")
fmt.Fprintf(os.Stderr, " "+app+" -l :8443 -v\n")
fmt.Fprintf(os.Stderr, " -listen on :8443, serve as http/socks5 proxy on the same port.\n")
fmt.Fprintf(os.Stderr, "\n")
fmt.Fprintf(os.Stderr, " "+app+" -listen ss://AEAD_CHACHA20_POLY1305:pass@:8443\n")
fmt.Fprintf(os.Stderr, " "+app+" -l ss://AEAD_CHACHA20_POLY1305:pass@:8443\n")
fmt.Fprintf(os.Stderr, " -listen on 0.0.0.0:8443 as a shadowsocks server.\n")
fmt.Fprintf(os.Stderr, "\n")
fmt.Fprintf(os.Stderr, " "+app+" -listen socks5://:1080 -verbose\n")
fmt.Fprintf(os.Stderr, " "+app+" -l socks5://:1080 -v\n")
fmt.Fprintf(os.Stderr, " -listen on :1080 as a socks5 proxy server, in verbose mode.\n")
fmt.Fprintf(os.Stderr, "\n")
fmt.Fprintf(os.Stderr, " "+app+" -listen http://:8080 -forward socks5://127.0.0.1:1080\n")
fmt.Fprintf(os.Stderr, " "+app+" -l http://:8080 -f socks5://127.0.0.1:1080 -v\n")
fmt.Fprintf(os.Stderr, " -listen on :8080 as a http proxy server, forward all requests via socks5 server.\n")
fmt.Fprintf(os.Stderr, "\n")
fmt.Fprintf(os.Stderr, " "+app+" -listen redir://:1081 -forward ss://method:pass@1.1.1.1:443\n")
fmt.Fprintf(os.Stderr, " "+app+" -l redir://:1081 -f ss://method:pass@1.1.1.1:443\n")
fmt.Fprintf(os.Stderr, " -listen on :1081 as a transparent redirect server, forward all requests via remote ss server.\n")
fmt.Fprintf(os.Stderr, "\n")
fmt.Fprintf(os.Stderr, " "+app+" -listen tcptun://:80=2.2.2.2:80 -forward ss://method:pass@1.1.1.1:443\n")
fmt.Fprintf(os.Stderr, " "+app+" -l tcptun://:80=2.2.2.2:80 -f ss://method:pass@1.1.1.1:443\n")
fmt.Fprintf(os.Stderr, " -listen on :80 and forward all requests to 2.2.2.2:80 via remote ss server.\n")
fmt.Fprintf(os.Stderr, "\n")
fmt.Fprintf(os.Stderr, " "+app+" -listen socks5://:1080 -listen http://:8080 -forward ss://method:pass@1.1.1.1:443\n")
fmt.Fprintf(os.Stderr, " "+app+" -l socks5://:1080 -l http://:8080 -f ss://method:pass@1.1.1.1:443\n")
fmt.Fprintf(os.Stderr, " -listen on :1080 as socks5 server, :8080 as http proxy server, forward all requests via remote ss server.\n")
fmt.Fprintf(os.Stderr, "\n")
fmt.Fprintf(os.Stderr, " "+app+" -listen redir://:1081 -listen dnstun://:53=8.8.8.8:53 -forward ss://method:pass@server1:port1,ss://method:pass@server2:port2\n")
fmt.Fprintf(os.Stderr, " "+app+" -l redir://:1081 -l dnstun://:53=8.8.8.8:53 -f ss://method:pass@server1:port1,ss://method:pass@server2:port2\n")
fmt.Fprintf(os.Stderr, " -listen on :1081 as transparent redirect server, :53 as dns server, use forward chain: server1 -> server2.\n")
fmt.Fprintf(os.Stderr, "\n")
fmt.Fprintf(os.Stderr, " "+app+" -listen socks5://:1080 -forward ss://method:pass@server1:port1 -forward ss://method:pass@server2:port2 -s rr\n")
fmt.Fprintf(os.Stderr, " "+app+" -l socks5://:1080 -f ss://method:pass@server1:port1 -f ss://method:pass@server2:port2 -s rr\n")
fmt.Fprintf(os.Stderr, " -listen on :1080 as socks5 server, forward requests via server1 and server2 in roundrbin mode.\n")
fmt.Fprintf(os.Stderr, "\n")
}
@ -111,28 +101,30 @@ func (i *arrFlags) Set(value string) error {
func main() {
flag.BoolVar(&conf.Verbose, "verbose", false, "verbose mode")
flag.StringVar(&conf.Strategy, "strategy", "rr", "forward strategy, default: rr")
flag.StringVar(&conf.CheckHost, "checkhost", "www.apple.com:443", "proxy check address")
flag.IntVar(&conf.CheckDuration, "checkduration", 30, "proxy check duration(seconds)")
flag.Var(&conf.Listen, "listen", "listen url, format: SCHEMA://[USER|METHOD:PASSWORD@][HOST]:PORT")
flag.Var(&conf.Forward, "forward", "forward url, format: SCHEMA://[USER|METHOD:PASSWORD@][HOST]:PORT[,SCHEMA://[USER|METHOD:PASSWORD@][HOST]:PORT]")
flag.Usage = usage
err := flag.Parse()
if err != nil {
fmt.Fprintf(os.Stderr, "ERROR: %s\n", err)
return
var flags struct {
Listen arrFlags
Forward arrFlags
}
if len(conf.Listen) == 0 {
flag.BoolVar(&config.Verbose, "v", false, "verbose mode")
flag.StringVar(&config.Strategy, "s", "rr", "forward strategy, default: rr")
flag.StringVar(&config.CheckSite, "checksite", "www.apple.com:443", "proxy check address")
flag.IntVar(&config.CheckDuration, "duration", 30, "proxy check duration(seconds)")
flag.Var(&flags.Listen, "l", "listen url, format: SCHEMA://[USER|METHOD:PASSWORD@][HOST]:PORT")
flag.Var(&flags.Forward, "f", "forward url, format: SCHEMA://[USER|METHOD:PASSWORD@][HOST]:PORT[,SCHEMA://[USER|METHOD:PASSWORD@][HOST]:PORT]")
flag.Usage = usage
flag.Parse()
if len(flags.Listen) == 0 {
flag.Usage()
fmt.Fprintf(os.Stderr, "ERROR: listen url must be specified.\n")
return
}
var forwarders []Proxy
for _, chain := range conf.Forward {
for _, chain := range flags.Forward {
var forward Proxy
var err error
for _, url := range strings.Split(chain, ",") {
@ -144,7 +136,7 @@ func main() {
forwarders = append(forwarders, forward)
}
for _, listen := range conf.Listen {
for _, listen := range flags.Listen {
local, err := ProxyFromURL(listen, forwarders...)
if err != nil {
log.Fatal(err)

View File

@ -93,7 +93,7 @@ func ProxyFromURL(s string, forwarders ...Proxy) (Proxy, error) {
} else if len(forwarders) == 1 {
proxy = newProxy(addr, forwarders[0])
} else if len(forwarders) > 1 {
switch conf.Strategy {
switch config.Strategy {
case "rr":
proxy = newRRProxy(addr, forwarders)
logf("forward to remote servers in round robin mode.")
@ -101,7 +101,7 @@ func ProxyFromURL(s string, forwarders ...Proxy) (Proxy, error) {
proxy = newHAProxy(addr, forwarders)
logf("forward to remote servers in high availability mode.")
default:
logf("not supported forward mode '%s', just use the first forward server.", conf.Strategy)
logf("not supported forward mode '%s', just use the first forward server.", config.Strategy)
proxy = newProxy(addr, forwarders[0])
}
}
@ -141,7 +141,7 @@ func check(p Proxy, target string, duration int) {
startTime := time.Now()
c, err := p.Dial("tcp", target)
if err != nil {
logf("proxy-check %s -> %s, set to DISABLED. error: %s", p.Addr(), conf.CheckHost, err)
logf("proxy-check %s -> %s, set to DISABLED. error: %s", p.Addr(), config.CheckSite, err)
p.SetEnable(false)
continue
}
@ -150,6 +150,6 @@ func check(p Proxy, target string, duration int) {
// TODO: choose the fastest proxy.
dialTime := time.Since(startTime)
logf("proxy-check: %s -> %s, connect time: %s", p.Addr(), conf.CheckHost, dialTime.String())
logf("proxy-check: %s -> %s, connect time: %s", p.Addr(), config.CheckSite, dialTime.String())
}
}

View File

@ -21,7 +21,7 @@ func newStrategyProxy(addr string, forwarders []Proxy) Proxy {
}
for _, forward := range forwarders {
go check(forward, conf.CheckHost, conf.CheckDuration)
go check(forward, config.CheckSite, config.CheckDuration)
}
return &strategyProxy{addr: addr, forwarders: forwarders}