mirror of
https://github.com/wweir/sower.git
synced 2024-04-21 12:42:15 +00:00
refactor with glog
This commit is contained in:
@@ -9,11 +9,11 @@ kill:
|
||||
sudo pkill -9 sower || true
|
||||
|
||||
client: build kill
|
||||
sudo $(PWD)/sower -f conf/sower.toml
|
||||
sudo $(PWD)/sower -f conf/sower.toml -logtostderr
|
||||
|
||||
server: build kill
|
||||
$(PWD)/sower -D true
|
||||
$(PWD)/sower -logtostderr -v 1
|
||||
|
||||
run: build kill
|
||||
$(PWD)/sower -D true &
|
||||
sudo $(PWD)/sower -f conf/sower.toml
|
||||
$(PWD)/sower -logtostderr -v 1 &
|
||||
sudo $(PWD)/sower -f conf/sower.toml -logtostderr
|
||||
|
||||
+8
-3
@@ -2,6 +2,7 @@ package conf
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"strconv"
|
||||
|
||||
"github.com/BurntSushi/toml"
|
||||
)
|
||||
@@ -12,15 +13,14 @@ var Conf = struct {
|
||||
ServerAddr string `toml:"server_addr"`
|
||||
DnsServer string `toml:"dns_server"`
|
||||
BlockList []string `toml:"blocklist"`
|
||||
Debug bool `toml:"debug"`
|
||||
Verbose int `toml:"verbose"`
|
||||
}{}
|
||||
|
||||
func init() {
|
||||
flag.StringVar(&Conf.ConfigFile, "f", "", "config file location")
|
||||
flag.StringVar(&Conf.ServerPort, "P", "5533", "server mode listen port")
|
||||
flag.StringVar(&Conf.ServerAddr, "s", "", "server addr (run in client mode if set)")
|
||||
flag.StringVar(&Conf.ServerAddr, "s", "", "server IP (run in client mode if set)")
|
||||
flag.StringVar(&Conf.DnsServer, "d", "114.114.114.114", "client dns server")
|
||||
flag.BoolVar(&Conf.Debug, "D", false, "run in debug mode")
|
||||
|
||||
if !flag.Parsed() {
|
||||
flag.Parse()
|
||||
@@ -32,4 +32,9 @@ func init() {
|
||||
if _, err := toml.DecodeFile(Conf.ConfigFile, &Conf); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
// for glog
|
||||
if err := flag.Set("v", strconv.Itoa(Conf.Verbose)); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -6,4 +6,4 @@ blocklist=[
|
||||
"*.youtube.com",
|
||||
"zh.wikipedia.org",
|
||||
]
|
||||
debug=true
|
||||
verbose=1
|
||||
+6
-14
@@ -1,13 +1,12 @@
|
||||
package dns
|
||||
|
||||
import (
|
||||
"log"
|
||||
"net"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/golang/glog"
|
||||
"github.com/miekg/dns"
|
||||
"github.com/wweir/sower/conf"
|
||||
)
|
||||
|
||||
func StartDNS(dnsServer string, blocklist []string) {
|
||||
@@ -35,7 +34,7 @@ func StartDNS(dnsServer string, blocklist []string) {
|
||||
|
||||
server := &dns.Server{Addr: ":53", Net: "udp"}
|
||||
server.TsigSecret = map[string]string{"axfr.": "so6ZGir4GPAqINNh9U5c3A=="}
|
||||
log.Fatalln(server.ListenAndServe())
|
||||
glog.Fatalln(server.ListenAndServe())
|
||||
}
|
||||
|
||||
// TODO: delete me
|
||||
@@ -59,7 +58,7 @@ func bestTry(w dns.ResponseWriter, r *dns.Msg, name, dnsServer string) {
|
||||
}
|
||||
|
||||
if _, err := net.DialTimeout("tcp", ip+":http", time.Second); err != nil {
|
||||
log.Println(ip+":80", err)
|
||||
glog.V(2).Infoln(ip+":80", err)
|
||||
rr, _ := dns.NewRR(name + " A 127.0.0.1")
|
||||
r.Answer = []dns.RR{rr}
|
||||
w.WriteMsg(r)
|
||||
@@ -76,26 +75,19 @@ func initRule(blocklist []string) {
|
||||
for i := range blocklist {
|
||||
rule.Add(strings.Split(blocklist[i], "."))
|
||||
}
|
||||
|
||||
if conf.Conf.Debug {
|
||||
log.Printf("block rule:\n%s", rule)
|
||||
}
|
||||
glog.V(1).Infof("block rule:\n%s", rule)
|
||||
}
|
||||
|
||||
func manual(w dns.ResponseWriter, r *dns.Msg, name, dnsServer string) {
|
||||
if rule.Match(strings.TrimSuffix(name, ".")) {
|
||||
if conf.Conf.Debug {
|
||||
log.Printf("match %s suss", name)
|
||||
}
|
||||
glog.V(2).Infof("match %s suss", name)
|
||||
|
||||
rr, _ := dns.NewRR(name + " A 127.0.0.1")
|
||||
r.Answer = []dns.RR{rr}
|
||||
w.WriteMsg(r)
|
||||
return
|
||||
}
|
||||
if conf.Conf.Debug {
|
||||
log.Printf("match %s fail", name)
|
||||
}
|
||||
glog.V(2).Infof("match %s fail", name)
|
||||
|
||||
msg, err := dns.Exchange(r, dnsServer+":53")
|
||||
if err != nil || len(msg.Answer) == 0 {
|
||||
|
||||
@@ -4,6 +4,7 @@ require (
|
||||
github.com/BurntSushi/toml v0.3.1
|
||||
github.com/bifurcation/mint v0.0.0-20181105071958-a14404e9a861 // indirect
|
||||
github.com/cheekybits/genny v1.0.0 // indirect
|
||||
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b
|
||||
github.com/golang/mock v1.1.1 // indirect
|
||||
github.com/hashicorp/golang-lru v0.5.0 // indirect
|
||||
github.com/lucas-clemente/aes12 v0.0.0-20171027163421-cd47fb39b79f // indirect
|
||||
|
||||
@@ -6,6 +6,8 @@ github.com/cheekybits/genny v1.0.0 h1:uGGa4nei+j20rOSeDeP5Of12XVm7TGUd4dJA9RDitf
|
||||
github.com/cheekybits/genny v1.0.0/go.mod h1:+tQajlRqAUrPI7DOSpB0XAqZYtQakVtB7wXkRAgjxjQ=
|
||||
github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
|
||||
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
|
||||
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58=
|
||||
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
|
||||
github.com/golang/mock v1.1.1 h1:G5FRp8JnTd7RQH5kemVNlMeyXQAztQ3mOWV95KxsXH8=
|
||||
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
|
||||
github.com/golang/protobuf v1.2.0 h1:P3YflyNX/ehuJFLhxviNdFxQPkGK5cDcApsge1SqnvM=
|
||||
|
||||
@@ -1,23 +1,19 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"log"
|
||||
|
||||
"github.com/golang/glog"
|
||||
"github.com/wweir/sower/conf"
|
||||
"github.com/wweir/sower/dns"
|
||||
"github.com/wweir/sower/proxy"
|
||||
)
|
||||
|
||||
func init() {
|
||||
log.SetFlags(log.LstdFlags | log.Lshortfile)
|
||||
}
|
||||
func main() {
|
||||
log.Println(conf.Conf)
|
||||
glog.Infoln("Starting:", conf.Conf)
|
||||
|
||||
if conf.Conf.ServerAddr == "" {
|
||||
proxy.StartServer(conf.Conf.ServerPort)
|
||||
} else {
|
||||
dns.StartDNS(conf.Conf.DnsServer, conf.Conf.BlockList)
|
||||
go dns.StartDNS(conf.Conf.DnsServer, conf.Conf.BlockList)
|
||||
proxy.StartClient(conf.Conf.ServerAddr)
|
||||
}
|
||||
}
|
||||
|
||||
+7
-6
@@ -1,9 +1,9 @@
|
||||
package proxy
|
||||
|
||||
import (
|
||||
"log"
|
||||
"net"
|
||||
|
||||
"github.com/golang/glog"
|
||||
"github.com/lucas-clemente/quic-go"
|
||||
)
|
||||
|
||||
@@ -11,18 +11,18 @@ func StartClient(server string) {
|
||||
connCh := listenLocal([]string{":80", ":443"})
|
||||
sess, err := quic.DialAddr(server, nil, nil)
|
||||
if err != nil {
|
||||
log.Printf("connect to remote(%s) fail:%s\n", server, err)
|
||||
return
|
||||
glog.Fatalf("connect to remote(%s) fail:%s\n", server, err)
|
||||
}
|
||||
|
||||
for {
|
||||
go func(conn net.Conn) {
|
||||
glog.V(1).Infoln("new request to", conn.RemoteAddr())
|
||||
defer conn.Close()
|
||||
conn.(*net.TCPConn).SetKeepAlive(true)
|
||||
|
||||
stream, err := sess.OpenStream()
|
||||
if err != nil {
|
||||
log.Printf("connect to remote(%s) fail:%s\n", server, err)
|
||||
glog.Warningf("connect to remote(%s) fail:%s\n", server, err)
|
||||
return
|
||||
}
|
||||
defer stream.Close()
|
||||
@@ -38,13 +38,13 @@ func listenLocal(ports []string) <-chan net.Conn {
|
||||
go func(port string) {
|
||||
ln, err := net.Listen("tcp", port)
|
||||
if err != nil {
|
||||
log.Fatalln(err)
|
||||
glog.Fatalln(err)
|
||||
}
|
||||
|
||||
for {
|
||||
conn, err := ln.Accept()
|
||||
if err != nil {
|
||||
log.Println("accept", port, "fail:", err)
|
||||
glog.Errorln("accept", port, "fail:", err)
|
||||
}
|
||||
|
||||
connCh <- conn
|
||||
@@ -52,5 +52,6 @@ func listenLocal(ports []string) <-chan net.Conn {
|
||||
}(ports[i])
|
||||
}
|
||||
|
||||
glog.Infoln("listening ports:", ports)
|
||||
return connCh
|
||||
}
|
||||
|
||||
+7
-7
@@ -1,9 +1,9 @@
|
||||
package proxy
|
||||
|
||||
import (
|
||||
"log"
|
||||
"net"
|
||||
|
||||
"github.com/golang/glog"
|
||||
"github.com/lucas-clemente/quic-go"
|
||||
"github.com/wweir/sower/parser"
|
||||
)
|
||||
@@ -11,13 +11,13 @@ import (
|
||||
func StartServer(port string) {
|
||||
ln, err := quic.ListenAddr(":"+port, nil, nil)
|
||||
if err != nil {
|
||||
log.Fatalln(err)
|
||||
glog.Fatalln(err)
|
||||
}
|
||||
|
||||
for {
|
||||
sess, err := ln.Accept()
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
glog.Errorln(err)
|
||||
}
|
||||
go acceptSession(sess)
|
||||
}
|
||||
@@ -27,7 +27,7 @@ func acceptSession(sess quic.Session) {
|
||||
for {
|
||||
stream, err := sess.AcceptStream()
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
glog.Errorln(err)
|
||||
}
|
||||
go acceptStream(stream, sess)
|
||||
}
|
||||
@@ -38,14 +38,14 @@ func acceptStream(stream quic.Stream, sess quic.Session) {
|
||||
|
||||
conn, addr, err := parser.ParseAddr(&streamConn{stream, sess})
|
||||
if err != nil {
|
||||
log.Panicln(err)
|
||||
glog.Warningln(err)
|
||||
return
|
||||
}
|
||||
log.Println(addr)
|
||||
glog.V(1).Infoln(addr)
|
||||
|
||||
rc, err := net.Dial("tcp", addr)
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
glog.Warningln(err)
|
||||
return
|
||||
}
|
||||
defer rc.Close()
|
||||
|
||||
+2
-2
@@ -2,12 +2,12 @@ package proxy
|
||||
|
||||
import (
|
||||
"io"
|
||||
"log"
|
||||
"net"
|
||||
"sync"
|
||||
"sync/atomic"
|
||||
"time"
|
||||
|
||||
"github.com/golang/glog"
|
||||
"github.com/lucas-clemente/quic-go"
|
||||
)
|
||||
|
||||
@@ -35,7 +35,7 @@ func relay(conn1, conn2 net.Conn) {
|
||||
|
||||
func redirect(conn1, conn2 net.Conn, wg *sync.WaitGroup, exitFlag *int32) {
|
||||
if _, err := io.Copy(conn2, conn1); err != nil && (atomic.LoadInt32(exitFlag) == 0) {
|
||||
log.Printf("%s<>%s -> %s<>%s: %s", conn1.RemoteAddr(), conn1.LocalAddr(), conn2.LocalAddr(), conn2.RemoteAddr(), err)
|
||||
glog.V(1).Infof("%s<>%s -> %s<>%s: %s", conn1.RemoteAddr(), conn1.LocalAddr(), conn2.LocalAddr(), conn2.RemoteAddr(), err)
|
||||
}
|
||||
|
||||
// wakeup all conn goroutine
|
||||
|
||||
Reference in New Issue
Block a user