refactor with glog

This commit is contained in:
wweir
2018-11-24 22:40:40 +08:00
parent 415c557a8d
commit 325d1b98b5
10 changed files with 41 additions and 44 deletions
+4 -4
View File
@@ -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
View File
@@ -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
View File
@@ -6,4 +6,4 @@ blocklist=[
"*.youtube.com",
"zh.wikipedia.org",
]
debug=true
verbose=1
+6 -14
View File
@@ -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 {
+1
View File
@@ -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
+2
View File
@@ -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=
+3 -7
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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