From d8ce35ae3fea54b0ad67f2ce94fca8a0f99941ea Mon Sep 17 00:00:00 2001 From: Bluesaxorcist Date: Fri, 16 Aug 2019 16:10:27 -0500 Subject: made dispatcher operational for obfs4 --- common/pt_extras/pt_extras.go | 84 +++++++++++++++++ modes/pt_socks5/pt_socks5.go | 102 +++++---------------- modes/stun_udp/stun_udp.go | 61 +----------- modes/transparent_tcp/transparent_tcp.go | 84 +---------------- modes/transparent_udp/transparent_udp.go | 92 ++++--------------- obfs4.json | 1 + shadow.json | 1 + shapeshifter-dispatcher/shapeshifter-dispatcher.go | 18 ++++ state/dispatcher.log | 50 ++++++++++ 9 files changed, 197 insertions(+), 296 deletions(-) create mode 100644 obfs4.json create mode 100644 shadow.json create mode 100644 state/dispatcher.log diff --git a/common/pt_extras/pt_extras.go b/common/pt_extras/pt_extras.go index 63c1aba..e38d44e 100644 --- a/common/pt_extras/pt_extras.go +++ b/common/pt_extras/pt_extras.go @@ -30,6 +30,10 @@ package pt_extras import ( "errors" "fmt" + "github.com/OperatorFoundation/shapeshifter-dispatcher/common/log" + "github.com/OperatorFoundation/shapeshifter-transports/transports/Optimizer" + "github.com/OperatorFoundation/shapeshifter-transports/transports/obfs4" + "github.com/OperatorFoundation/shapeshifter-transports/transports/shadow" "net" "net/url" "os" @@ -170,3 +174,83 @@ func resolveAddrStr(addrStr string) (*net.TCPAddr, error) { func PtShouldExitOnStdinClose() bool { return os.Getenv("TOR_PT_EXIT_ON_STDIN_CLOSE") == "1" } + +func ArgsToDialer(target string, name string, args pt.Args) (Optimizer.Transport, error) { + switch name { + //case "obfs2": + // transport := obfs2.NewObfs2Transport() + // dialer = transport.Dial + // return dialer, nil + case "obfs4": + if cert, ok := args["cert"]; ok { + if iatModeStr, ok2 := args["iatMode"]; ok2 { + iatMode, err := strconv.Atoi(iatModeStr[0]) + if err == nil { + transport := obfs4.Transport{ + CertString: cert[0], + IatMode: iatMode, + Address: target, + } + return transport, nil + } else { + log.Errorf("obfs4 transport bad iatMode value: %s %s", iatModeStr[0], err) + return nil, errors.New("obfs4 transport bad iatMode value") + } + } else { + log.Errorf("obfs4 transport missing iatMode argument: %s", args) + return nil, errors.New("obfs4 transport missing iatMode argument") + } + } else { + log.Errorf("obfs4 transport missing cert argument: %s", args) + return nil, errors.New("obfs4 transport missing cert argument") + } + case "shadow": + if password, ok := args["password"]; ok { + if cipher, ok2 := args["cipherName"]; ok2 { + transport := shadow.Transport{ + Password: password[0], + CipherName: cipher[0], + Address: target, + } + return transport, nil + } else { + log.Errorf("shadow transport missing cipher argument: %s", args) + return nil, errors.New("shadow transport missing cipher argument") + } + } else { + log.Errorf("shadow transport missing password argument: %s", args) + return nil, errors.New("shadow transport missing password argument") + } + case "Optimizer": + if _, ok := args["transports"]; ok { + if strategyName, ok2 := args["strategy"]; ok2 { + var strategy Optimizer.Strategy = nil + switch strategyName[0] { + case "first": + strategy = Optimizer.NewFirstStrategy() + case "random": + strategy = Optimizer.NewRandomStrategy() + case "rotate": + strategy = Optimizer.NewRotateStrategy() + case "track": + strategy = Optimizer.NewTrackStrategy() + case "min": + strategy = Optimizer.NewMinimizeDialDuration() + } + transports := []Optimizer.Transport{} + transport := Optimizer.NewOptimizerClient(transports, strategy) + return transport, nil + } else { + log.Errorf("Optimizer transport missing transports argument: %s", args) + return nil, errors.New("optimizer transport missing transports argument") + } + } else { + log.Errorf("Optimizer transport missing strategy argument: %s", args) + return nil, errors.New("optimizer transport missing strategy argument") + } + + default: + log.Errorf("Unknown transport: %s", name) + return nil, errors.New("unknown transport") + } +} \ No newline at end of file diff --git a/modes/pt_socks5/pt_socks5.go b/modes/pt_socks5/pt_socks5.go index 8ff2528..7b958de 100644 --- a/modes/pt_socks5/pt_socks5.go +++ b/modes/pt_socks5/pt_socks5.go @@ -30,6 +30,8 @@ package pt_socks5 import ( + "github.com/OperatorFoundation/shapeshifter-dispatcher/common/pt_extras" + "github.com/OperatorFoundation/shapeshifter-transports/transports/shadow" "io" "net" "net/url" @@ -107,86 +109,12 @@ func clientHandler(target string, termMon *termmon.TermMonitor, name string, con } } - var dialer func(address string) (net.Conn, error) + var dialer func() (net.Conn, error) // Deal with arguments. - switch name { - case "obfs2": - transport := obfs2.NewObfs2Transport() - dialer = transport.Dial - case "obfs4": - if cert, ok := args.Get("cert"); ok { - if iatModeStr, ok2 := args.Get("iatMode"); ok2 { - iatMode, err := strconv.Atoi(iatModeStr) - if err != nil { - transport := obfs4.NewObfs4Client(cert, iatMode) - dialer = transport.Dial - } else { - log.Errorf("obfs4 transport bad iatMode value: %s", iatModeStr) - socksReq.Reply(socks5.ReplyGeneralFailure) - return - } - } else { - log.Errorf("obfs4 transport missing cert argument: %s", args) - socksReq.Reply(socks5.ReplyGeneralFailure) - return - } - } else { - log.Errorf("obfs4 transport missing cert argument: %s", args) - socksReq.Reply(socks5.ReplyGeneralFailure) - return - } - //case "shadow": - // if password, ok := args["password"]; ok { - // if cipher, ok2 := args["cipherName"]; ok2 { - // transport := shadow.NewShadowClient(password[0], cipher[0]) - // dialer = transport.Dial - // } else { - // log.Errorf("shadow transport missing cipher argument: %s", args) - // socksReq.Reply(socks5.ReplyGeneralFailure) - // return - // } - // } else { - // log.Errorf("shadow transport missing password argument: %s", args) - // socksReq.Reply(socks5.ReplyGeneralFailure) - // return - // } - // case "Optimizer": - // if _, ok := args["transports"]; ok { - // if strategyName, ok2 := args["strategy"]; ok2 { - // var strategy Optimizer.Strategy = nil - // switch strategyName[0] { - // case "first": - // strategy = Optimizer.NewFirstStrategy() - // case "random": - // strategy = Optimizer.NewRandomStrategy() - // case "rotate": - // strategy = Optimizer.NewRotateStrategy() - // case "track": - // strategy = Optimizer.NewTrackStrategy() - // case "min": - // strategy = Optimizer.NewMinimizeDialDuration() - // } - //transports := []Optimizer.Transport{} - //transport := Optimizer.NewOptimizerClient(transports, strategy) - // return transport, nil - ////says too many arguments to return just like earlier. - // } else { - // log.Errorf("Optimizer transport missing transports argument: %s", args) - // socksReq.Reply(socks5.ReplyGeneralFailure) - // return - // } - //} else { - // log.Errorf("Optimizer transport missing strategy argument: %s", args) - // socksReq.Reply(socks5.ReplyGeneralFailure) - // return - //} - - default: - log.Errorf("Unknown transport: %s", name) - socksReq.Reply(socks5.ReplyGeneralFailure) - return - } + transport, _ := pt_extras.ArgsToDialer(socksReq.Target, name, args) + dialer = transport.Dial + f := dialer // Obtain the proxy dialer if any, and create the outgoing TCP connection. // dialFn := proxy.Direct.Dial @@ -204,9 +132,7 @@ func clientHandler(target string, termMon *termmon.TermMonitor, name string, con // // fmt.Println("Got dialer", dialFn, proxyURI, proxy.Direct) - f := dialer - - remote, _ := f(socksReq.Target) + remote, _ := f() if err != nil { log.Errorf("%s(%s) - outgoing connection failed: %s", name, addrStr, log.ElideError(err)) socksReq.Reply(socks5.ErrorToReplyCode(err)) @@ -264,11 +190,25 @@ func ServerSetup(termMon *termmon.TermMonitor, bindaddrString string, ptServerIn log.Errorf("obfs4 transport missing cert argument: %s", args) return } + case "shadow": + password, ok := args.Get("password") + if !ok { + return false, nil + } + + cipherName, ok2 := args.Get("cipherName") + if !ok2 { + return false, nil + } + + transport := shadow.NewShadowServer(password, cipherName) + listen = transport.Listen default: log.Errorf("Unknown transport: %s", name) return } + f := listen transportLn := f(bindaddr.Addr.String()) diff --git a/modes/stun_udp/stun_udp.go b/modes/stun_udp/stun_udp.go index c9abcd6..f9d458f 100644 --- a/modes/stun_udp/stun_udp.go +++ b/modes/stun_udp/stun_udp.go @@ -31,6 +31,7 @@ package stun_udp import ( "fmt" + "github.com/OperatorFoundation/shapeshifter-dispatcher/common/pt_extras" "github.com/OperatorFoundation/shapeshifter-transports/transports/shadow" "io" golog "log" @@ -169,39 +170,11 @@ func dialConn(tracker *ConnTracker, addr string, target string, name string, opt return } - var f func(address string) (net.Conn, error) - // Deal with arguments. - switch name { - case "obfs2": - transport := obfs2.NewObfs2Transport() - f = transport.Dial - case "obfs4": - if cert, ok := args["cert"]; ok { - if iatModeStr, ok2 := args["iatMode"]; ok2 { - iatMode, err := strconv.Atoi(iatModeStr[0]) - if err != nil { - transport := obfs4.NewObfs4Client(cert[0], iatMode) - f = transport.Dial - } else { - log.Errorf("obfs4 transport bad iatMode value: %s", iatModeStr) - return - } - } else { - log.Errorf("obfs4 transport missing cert argument: %s", args) - return - } - } else { - log.Errorf("obfs4 transport missing cert argument: %s", args) - return - } - default: - log.Errorf("Unknown transport: %s", name) - return - } + transport, _ := pt_extras.ArgsToDialer(target, name, args) fmt.Println("Dialing ", target) - remote, _ := f(target) + remote, _ := transport.Dial() // if err != nil { // fmt.Println("outgoing connection failed", err) // log.Errorf("(%s) - outgoing connection failed: %s", target, log.ElideError(err)) @@ -268,34 +241,6 @@ func ServerSetup(termMon *termmon.TermMonitor, bindaddrString string, ptServerIn log.Errorf("shadow transport missing password argument: %s", args) return } - // case "Optimizer": - // if _, ok := args["transports"]; ok { - // if strategyName, ok2 := args["strategy"]; ok2 { - // var strategy Optimizer.Strategy = nil - // switch strategyName[0] { - // case "first": - // strategy = Optimizer.NewFirstStrategy() - // case "random": - // strategy = Optimizer.NewRandomStrategy() - // case "rotate": - // strategy = Optimizer.NewRotateStrategy() - // case "track": - // strategy = Optimizer.NewTrackStrategy() - // case "min": - // strategy = Optimizer.NewMinimizeDialDuration() - // } - //transports := []Optimizer.Transport{} - //transport := Optimizer.NewOptimizerClient(transports, strategy) - // return transport, nil - ////says too many arguments to return just like earlier. tried autocorrecting and now it says transport is not type bool - // } else { - // log.Errorf("Optimizer transport missing transports argument: %s", args) - // return - // } - //} else { - // log.Errorf("Optimizer transport missing strategy argument: %s", args) - // return - //} default: log.Errorf("Unknown transport: %s", name) diff --git a/modes/transparent_tcp/transparent_tcp.go b/modes/transparent_tcp/transparent_tcp.go index d49bb32..a948d2d 100644 --- a/modes/transparent_tcp/transparent_tcp.go +++ b/modes/transparent_tcp/transparent_tcp.go @@ -30,19 +30,17 @@ package transparent_tcp import ( - "errors" "fmt" + "github.com/OperatorFoundation/shapeshifter-dispatcher/common/pt_extras" "io" "net" "net/url" - "strconv" "strings" "sync" "github.com/OperatorFoundation/shapeshifter-dispatcher/common/log" "github.com/OperatorFoundation/shapeshifter-dispatcher/common/termmon" "github.com/OperatorFoundation/shapeshifter-ipc" - "github.com/OperatorFoundation/shapeshifter-transports/transports/Optimizer" //"github.com/OperatorFoundation/shapeshifter-transports/transports/obfs2" "github.com/OperatorFoundation/shapeshifter-transports/transports/obfs4" "github.com/OperatorFoundation/shapeshifter-transports/transports/shadow" @@ -99,7 +97,7 @@ func clientHandler(target string, termMon *termmon.TermMonitor, name string, opt // Deal with arguments. - transport, _ := argsToDialer(target, name, args) + transport, _ := pt_extras.ArgsToDialer(target, name, args) dialer = transport.Dial f := dialer @@ -138,85 +136,7 @@ func clientHandler(target string, termMon *termmon.TermMonitor, name string, opt return } -func argsToDialer(target string, name string, args pt.Args) (Optimizer.Transport, error) { - switch name { - //case "obfs2": - // transport := obfs2.NewObfs2Transport() - // dialer = transport.Dial - // return dialer, nil - case "obfs4": - if cert, ok := args["cert"]; ok { - if iatModeStr, ok2 := args["iatMode"]; ok2 { - iatMode, err := strconv.Atoi(iatModeStr[0]) - if err == nil { - transport := obfs4.Transport{ - CertString: cert[0], - IatMode: iatMode, - Address: target, - } - return transport, nil - } else { - log.Errorf("obfs4 transport bad iatMode value: %s %s", iatModeStr[0], err) - return nil, errors.New("obfs4 transport bad iatMode value") - } - } else { - log.Errorf("obfs4 transport missing iatMode argument: %s", args) - return nil, errors.New("obfs4 transport missing iatMode argument") - } - } else { - log.Errorf("obfs4 transport missing cert argument: %s", args) - return nil, errors.New("obfs4 transport missing cert argument") - } - case "shadow": - if password, ok := args["password"]; ok { - if cipher, ok2 := args["cipherName"]; ok2 { - transport := shadow.Transport{ - Password: password[0], - CipherName: cipher[0], - Address: target, - } - return transport, nil - } else { - log.Errorf("shadow transport missing cipher argument: %s", args) - return nil, errors.New("shadow transport missing cipher argument") - } - } else { - log.Errorf("shadow transport missing password argument: %s", args) - return nil, errors.New("shadow transport missing password argument") - } - case "Optimizer": - if _, ok := args["transports"]; ok { - if strategyName, ok2 := args["strategy"]; ok2 { - var strategy Optimizer.Strategy = nil - switch strategyName[0] { - case "first": - strategy = Optimizer.NewFirstStrategy() - case "random": - strategy = Optimizer.NewRandomStrategy() - case "rotate": - strategy = Optimizer.NewRotateStrategy() - case "track": - strategy = Optimizer.NewTrackStrategy() - case "min": - strategy = Optimizer.NewMinimizeDialDuration() - } - transports := []Optimizer.Transport{} - transport := Optimizer.NewOptimizerClient(transports, strategy) - return transport, nil - } else { - log.Errorf("Optimizer transport missing transports argument: %s", args) - return nil, errors.New("optimizer transport missing transports argument") - } - } else { - log.Errorf("Optimizer transport missing strategy argument: %s", args) - return nil, errors.New("optimizer transport missing strategy argument") - } - default: - log.Errorf("Unknown transport: %s", name) - return nil, errors.New("unknown transport") - } -} func ServerSetup(termMon *termmon.TermMonitor, bindaddrString string, ptServerInfo pt.ServerInfo, statedir string, options string) (launched bool, listeners []net.Listener) { // Launch each of the server listeners. diff --git a/modes/transparent_udp/transparent_udp.go b/modes/transparent_udp/transparent_udp.go index 58ef491..f32397f 100644 --- a/modes/transparent_udp/transparent_udp.go +++ b/modes/transparent_udp/transparent_udp.go @@ -33,6 +33,8 @@ import ( "bytes" "encoding/binary" "fmt" + "github.com/OperatorFoundation/shapeshifter-dispatcher/common/pt_extras" + "github.com/OperatorFoundation/shapeshifter-transports/transports/shadow" "io" golog "log" "net" @@ -175,8 +177,6 @@ func dialConn(tracker *ConnTracker, addr string, target string, name string, opt fmt.Println("Dialing....") - var dialer func(address string) (net.Conn, error) - args, argsErr := pt.ParsePT2ClientParameters(options) if argsErr != nil { log.Errorf("Error parsing transport options: %s", options) @@ -184,80 +184,9 @@ func dialConn(tracker *ConnTracker, addr string, target string, name string, opt } // Deal with arguments. - switch name { - case "obfs2": - transport := obfs2.NewObfs2Transport() - dialer = transport.Dial - case "obfs4": - if cert, ok := args["cert"]; ok { - if iatModeStr, ok2 := args["iatMode"]; ok2 { - iatMode, err := strconv.Atoi(iatModeStr[0]) - if err != nil { - transport := obfs4.NewObfs4Client(cert[0], iatMode) - dialer = transport.Dial - } else { - log.Errorf("obfs4 transport bad iatMode value: %s", iatModeStr) - return - } - } else { - log.Errorf("obfs4 transport missing cert argument: %s", args) - return - } - } else { - log.Errorf("obfs4 transport missing cert argument: %s", args) - return - } - //case "shadow": - // if password, ok := args["password"]; ok { - // if cipher, ok2 := args["cipherName"]; ok2 { - //transport := shadow.NewShadowClient(password[0], cipher[0]) - //dialer = transport.Dial - ////transport.Dial isn't the right type somehow? - // } else { - // log.Errorf("shadow transport missing cipher argument: %s", args) - // return - // } - //} else { - // log.Errorf("shadow transport missing password argument: %s", args) - // return - //} - //case "Optimizer": - // if _, ok := args["transports"]; ok { - // if strategyName, ok2 := args["strategy"]; ok2 { - // var strategy Optimizer.Strategy = nil - // switch strategyName[0] { - // case "first": - // strategy = Optimizer.NewFirstStrategy() - // case "random": - // strategy = Optimizer.NewRandomStrategy() - // case "rotate": - // strategy = Optimizer.NewRotateStrategy() - // case "track": - // strategy = Optimizer.NewTrackStrategy() - // case "min": - // strategy = Optimizer.NewMinimizeDialDuration() - // } - //transports := []Optimizer.Transport{} - //transport := Optimizer.NewOptimizerClient(transports, strategy) - //return transport - ////says too many arguments to return? where is the return type specified? - // } else { - // log.Errorf("Optimizer transport missing transports argument: %s", args) - // return - // } - //} else { - // log.Errorf("Optimizer transport missing strategy argument: %s", args) - // return - //} - - default: - log.Errorf("Unknown transport: %s", name) - return - } - - f := dialer + transport, _ := pt_extras.ArgsToDialer(target, name, args) fmt.Println("Dialing ", target) - remote, _ := f(target) + remote, _ := transport.Dial() // if err != nil { // fmt.Println("outgoing connection failed", err) // log.Errorf("(%s) - outgoing connection failed: %s", target, log.ElideError(err)) @@ -311,6 +240,19 @@ func ServerSetup(termMon *termmon.TermMonitor, bindaddrString string, ptServerIn log.Errorf("obfs4 transport missing cert argument: %s", args) return } + case "shadow": + password, ok := args.Get("password") + if !ok { + return false, nil + } + + cipherName, ok2 := args.Get("cipherName") + if !ok2 { + return false, nil + } + + transport := shadow.NewShadowServer(password, cipherName) + listen = transport.Listen default: log.Errorf("Unknown transport: %s", name) return diff --git a/obfs4.json b/obfs4.json new file mode 100644 index 0000000..2697889 --- /dev/null +++ b/obfs4.json @@ -0,0 +1 @@ +{"cert": "a1cc6eI5H+1kTzXhbuwMR9w3ZkLeZuReniier8DYSlAg4ed9yTbnyDiWc1vF1WFWKFRYHQ", "iatMode": "0"} \ No newline at end of file diff --git a/shadow.json b/shadow.json new file mode 100644 index 0000000..7f4f83b --- /dev/null +++ b/shadow.json @@ -0,0 +1 @@ +{"password": "orange", "cipherName": "aes-128-ctr"} \ No newline at end of file diff --git a/shapeshifter-dispatcher/shapeshifter-dispatcher.go b/shapeshifter-dispatcher/shapeshifter-dispatcher.go index 03923a6..4995b4e 100644 --- a/shapeshifter-dispatcher/shapeshifter-dispatcher.go +++ b/shapeshifter-dispatcher/shapeshifter-dispatcher.go @@ -33,6 +33,7 @@ import ( "errors" "flag" "fmt" + "io/ioutil" golog "log" "net" "net/url" @@ -101,6 +102,7 @@ func main() { // Experimental flags under consideration for PT 2.1 socksAddr := flag.String("proxylistenaddr", "127.0.0.1:0", "Specify the bind address for the local SOCKS server provided by the client") + optionsFile := flag.String("optionsFile", "", "store all the options in a single file") // Additional command line flags inherited from obfs4proxy showVer := flag.Bool("version", false, "Print version and exit") @@ -144,6 +146,22 @@ func main() { if err = log.Init(*enableLogging, path.Join(stateDir, dispatcherLogFile), *unsafeLogging); err != nil { golog.Fatalf("[ERROR]: %s - failed to initialize logging", execName) } + if *options != "" && *optionsFile != "" { + golog.Fatal("cannot specify -options and -optionsFile at the same time") + } + if *optionsFile != "" { + _, err := os.Stat(*optionsFile) + if err != nil { + log.Errorf("optionsFile does not exist %s", *optionsFile) + } else { + contents, readErr := ioutil.ReadFile(*optionsFile) + if readErr != nil { + log.Errorf("could not open optionsFile: %s", *optionsFile) + } else { + *options = string(contents) + } + } + } log.Noticef("%s - launched", getVersion()) diff --git a/state/dispatcher.log b/state/dispatcher.log new file mode 100644 index 0000000..0128b1c --- /dev/null +++ b/state/dispatcher.log @@ -0,0 +1,50 @@ +2019/08/16 15:44:27 [NOTICE]: dispatcher-0.0.7-dev - launched +2019/08/16 15:44:27 [INFO]: ___go_build_github_com_OperatorFoundation_shapeshifter_dispatcher_shapeshifter_dispatcher - initializing transparent proxy +2019/08/16 15:44:27 [INFO]: ___go_build_github_com_OperatorFoundation_shapeshifter_dispatcher_shapeshifter_dispatcher - initializing TCP transparent proxy +2019/08/16 15:44:27 [INFO]: ___go_build_github_com_OperatorFoundation_shapeshifter_dispatcher_shapeshifter_dispatcher - initializing client transport listeners +2019/08/16 15:44:27 [INFO]: obfs4 - registered listener: 127.0.0.1:1443 +2019/08/16 15:44:27 [INFO]: ___go_build_github_com_OperatorFoundation_shapeshifter_dispatcher_shapeshifter_dispatcher - accepting connections +2019/08/16 15:45:05 [ERROR]: obfs4 transport missing iatMode argument: map[cert:[a1cc6eI5H+1kTzXhbuwMR9w3ZkLeZuReniier8DYSlAg4ed9yTbnyDiWc1vF1WFWKFRYHQ] iatmode:[0]] +2019/08/16 15:45:54 [NOTICE]: dispatcher-0.0.7-dev - launched +2019/08/16 15:45:54 [INFO]: ___go_build_github_com_OperatorFoundation_shapeshifter_dispatcher_shapeshifter_dispatcher - initializing transparent proxy +2019/08/16 15:45:54 [INFO]: ___go_build_github_com_OperatorFoundation_shapeshifter_dispatcher_shapeshifter_dispatcher - initializing TCP transparent proxy +2019/08/16 15:45:54 [INFO]: ___go_build_github_com_OperatorFoundation_shapeshifter_dispatcher_shapeshifter_dispatcher - initializing client transport listeners +2019/08/16 15:45:54 [INFO]: obfs4 - registered listener: 127.0.0.1:1443 +2019/08/16 15:45:54 [INFO]: ___go_build_github_com_OperatorFoundation_shapeshifter_dispatcher_shapeshifter_dispatcher - accepting connections +2019/08/16 15:48:59 [NOTICE]: dispatcher-0.0.7-dev - launched +2019/08/16 15:48:59 [INFO]: ___go_build_github_com_OperatorFoundation_shapeshifter_dispatcher_shapeshifter_dispatcher - initializing transparent proxy +2019/08/16 15:48:59 [INFO]: ___go_build_github_com_OperatorFoundation_shapeshifter_dispatcher_shapeshifter_dispatcher - initializing TCP transparent proxy +2019/08/16 15:48:59 [INFO]: ___go_build_github_com_OperatorFoundation_shapeshifter_dispatcher_shapeshifter_dispatcher - initializing client transport listeners +2019/08/16 15:48:59 [INFO]: obfs4 - registered listener: 127.0.0.1:1443 +2019/08/16 15:48:59 [INFO]: ___go_build_github_com_OperatorFoundation_shapeshifter_dispatcher_shapeshifter_dispatcher - accepting connections +2019/08/16 15:49:08 [NOTICE]: dispatcher-0.0.7-dev - launched +2019/08/16 15:49:08 [INFO]: ___go_build_github_com_OperatorFoundation_shapeshifter_dispatcher_shapeshifter_dispatcher - initializing transparent proxy +2019/08/16 15:49:08 [INFO]: ___go_build_github_com_OperatorFoundation_shapeshifter_dispatcher_shapeshifter_dispatcher - initializing TCP transparent proxy +2019/08/16 15:49:08 [INFO]: ___go_build_github_com_OperatorFoundation_shapeshifter_dispatcher_shapeshifter_dispatcher - initializing client transport listeners +2019/08/16 15:49:08 [INFO]: obfs4 - registered listener: 127.0.0.1:1443 +2019/08/16 15:49:08 [INFO]: ___go_build_github_com_OperatorFoundation_shapeshifter_dispatcher_shapeshifter_dispatcher - accepting connections +2019/08/16 15:49:28 [NOTICE]: dispatcher-0.0.7-dev - launched +2019/08/16 15:49:28 [INFO]: ___go_build_github_com_OperatorFoundation_shapeshifter_dispatcher_shapeshifter_dispatcher - initializing transparent proxy +2019/08/16 15:49:28 [INFO]: ___go_build_github_com_OperatorFoundation_shapeshifter_dispatcher_shapeshifter_dispatcher - initializing TCP transparent proxy +2019/08/16 15:49:28 [INFO]: ___go_build_github_com_OperatorFoundation_shapeshifter_dispatcher_shapeshifter_dispatcher - initializing client transport listeners +2019/08/16 15:49:28 [INFO]: obfs4 - registered listener: 127.0.0.1:1443 +2019/08/16 15:49:28 [INFO]: ___go_build_github_com_OperatorFoundation_shapeshifter_dispatcher_shapeshifter_dispatcher - accepting connections +2019/08/16 15:49:36 [NOTICE]: dispatcher-0.0.7-dev - launched +2019/08/16 15:49:36 [INFO]: ___go_build_github_com_OperatorFoundation_shapeshifter_dispatcher_shapeshifter_dispatcher - initializing transparent proxy +2019/08/16 15:49:36 [INFO]: ___go_build_github_com_OperatorFoundation_shapeshifter_dispatcher_shapeshifter_dispatcher - initializing TCP transparent proxy +2019/08/16 15:49:36 [INFO]: ___go_build_github_com_OperatorFoundation_shapeshifter_dispatcher_shapeshifter_dispatcher - initializing client transport listeners +2019/08/16 15:49:36 [INFO]: obfs4 - registered listener: 127.0.0.1:1443 +2019/08/16 15:49:36 [INFO]: ___go_build_github_com_OperatorFoundation_shapeshifter_dispatcher_shapeshifter_dispatcher - accepting connections +2019/08/16 15:50:04 [NOTICE]: dispatcher-0.0.7-dev - launched +2019/08/16 15:50:04 [INFO]: ___go_build_github_com_OperatorFoundation_shapeshifter_dispatcher_shapeshifter_dispatcher - initializing transparent proxy +2019/08/16 15:50:04 [INFO]: ___go_build_github_com_OperatorFoundation_shapeshifter_dispatcher_shapeshifter_dispatcher - initializing TCP transparent proxy +2019/08/16 15:50:04 [INFO]: ___go_build_github_com_OperatorFoundation_shapeshifter_dispatcher_shapeshifter_dispatcher - initializing client transport listeners +2019/08/16 15:50:04 [INFO]: obfs4 - registered listener: 127.0.0.1:1443 +2019/08/16 15:50:04 [INFO]: ___go_build_github_com_OperatorFoundation_shapeshifter_dispatcher_shapeshifter_dispatcher - accepting connections +2019/08/16 15:54:31 [NOTICE]: dispatcher-0.0.7-dev - launched +2019/08/16 15:54:31 [INFO]: ___go_build_github_com_OperatorFoundation_shapeshifter_dispatcher_shapeshifter_dispatcher - initializing transparent proxy +2019/08/16 15:54:31 [INFO]: ___go_build_github_com_OperatorFoundation_shapeshifter_dispatcher_shapeshifter_dispatcher - initializing TCP transparent proxy +2019/08/16 15:54:31 [INFO]: ___go_build_github_com_OperatorFoundation_shapeshifter_dispatcher_shapeshifter_dispatcher - initializing client transport listeners +2019/08/16 15:54:31 [INFO]: obfs4 - registered listener: 127.0.0.1:1443 +2019/08/16 15:54:31 [INFO]: ___go_build_github_com_OperatorFoundation_shapeshifter_dispatcher_shapeshifter_dispatcher - accepting connections +2019/08/16 15:57:21 [INFO]: obfs4(127.0.0.1:2222) - closed connection -- cgit v1.2.3