diff --git a/go.mod b/go.mod index 3f18cca..131fd8c 100644 --- a/go.mod +++ b/go.mod @@ -5,14 +5,14 @@ go 1.12 require ( github.com/OperatorFoundation/obfs4 v1.0.0 github.com/OperatorFoundation/shapeshifter-ipc/v2 v2.0.0 - github.com/OperatorFoundation/shapeshifter-transports/transports/Dust/v3 v3.0.11 - github.com/OperatorFoundation/shapeshifter-transports/transports/Optimizer/v3 v3.0.11 - github.com/OperatorFoundation/shapeshifter-transports/transports/Replicant/v3 v3.0.11 - github.com/OperatorFoundation/shapeshifter-transports/transports/meeklite/v3 v3.0.11 - github.com/OperatorFoundation/shapeshifter-transports/transports/meekserver/v3 v3.0.11 - github.com/OperatorFoundation/shapeshifter-transports/transports/obfs2/v3 v3.0.11 - github.com/OperatorFoundation/shapeshifter-transports/transports/obfs4/v3 v3.0.11 - github.com/OperatorFoundation/shapeshifter-transports/transports/shadow/v3 v3.0.11 + github.com/OperatorFoundation/shapeshifter-transports/transports/Dust/v3 v3.0.12 + github.com/OperatorFoundation/shapeshifter-transports/transports/Optimizer/v3 v3.0.12 + github.com/OperatorFoundation/shapeshifter-transports/transports/Replicant/v3 v3.0.12 + github.com/OperatorFoundation/shapeshifter-transports/transports/meeklite/v3 v3.0.12 + github.com/OperatorFoundation/shapeshifter-transports/transports/meekserver/v3 v3.0.12 + github.com/OperatorFoundation/shapeshifter-transports/transports/obfs2/v3 v3.0.12 + github.com/OperatorFoundation/shapeshifter-transports/transports/obfs4/v3 v3.0.12 + github.com/OperatorFoundation/shapeshifter-transports/transports/shadow/v3 v3.0.12 github.com/kataras/golog v0.0.18 github.com/opentracing/opentracing-go v1.2.0 // indirect github.com/riobard/go-bloom v0.0.0-20200614022211-cdc8013cb5b3 // indirect diff --git a/go.sum b/go.sum index 1e86465..9973783 100644 --- a/go.sum +++ b/go.sum @@ -10,20 +10,36 @@ github.com/OperatorFoundation/shapeshifter-ipc/v2 v2.0.0 h1:6aQs+TF3KULMarpzbKu8 github.com/OperatorFoundation/shapeshifter-ipc/v2 v2.0.0/go.mod h1:gb/QiZH0QDXLSQ9PskyJ2oTflB7tsP4AYc8y+FppvB0= github.com/OperatorFoundation/shapeshifter-transports/transports/Dust/v3 v3.0.11 h1:CoJAM5q0aEhAmrKSVCix2J1iMkDnVgqGhiyy/r0UK6Q= github.com/OperatorFoundation/shapeshifter-transports/transports/Dust/v3 v3.0.11/go.mod h1:3T3HbGcIVPOf/WuVJ+Mf6p5C6tBX6zlFbqyWbaqurac= +github.com/OperatorFoundation/shapeshifter-transports/transports/Dust/v3 v3.0.12 h1:7LN2WrLoQTlGb5QB6ZGq1aM3v/ZcnW5niBSKIfXtb7M= +github.com/OperatorFoundation/shapeshifter-transports/transports/Dust/v3 v3.0.12/go.mod h1:3T3HbGcIVPOf/WuVJ+Mf6p5C6tBX6zlFbqyWbaqurac= github.com/OperatorFoundation/shapeshifter-transports/transports/Optimizer/v3 v3.0.11 h1:94/oy2DQW0aHteisMvMGyT3ZAy+GYJ1c3g1Lo69Hga8= github.com/OperatorFoundation/shapeshifter-transports/transports/Optimizer/v3 v3.0.11/go.mod h1:92x1GPi1qNJljKU7Qhjhu66U6UibM9eokzIwIyQt6Lo= +github.com/OperatorFoundation/shapeshifter-transports/transports/Optimizer/v3 v3.0.12 h1:FOXWjfKvIFM986QFrZ6cvHlBZD9JEXYeRWli4iHnYqw= +github.com/OperatorFoundation/shapeshifter-transports/transports/Optimizer/v3 v3.0.12/go.mod h1:92x1GPi1qNJljKU7Qhjhu66U6UibM9eokzIwIyQt6Lo= github.com/OperatorFoundation/shapeshifter-transports/transports/Replicant/v3 v3.0.11 h1:HyKFfgOlRNc/B0sJjkBdN+jYqMPTlErG7MKxFuPpaFw= github.com/OperatorFoundation/shapeshifter-transports/transports/Replicant/v3 v3.0.11/go.mod h1:q5x1vofuSHVv7PVPx86LR7wT169SjDLGaGCR6vceEsU= +github.com/OperatorFoundation/shapeshifter-transports/transports/Replicant/v3 v3.0.12 h1:kAevDiQJGSU1+k8uDjFaxQ3xXPyyRGoJRsVVTzSakvo= +github.com/OperatorFoundation/shapeshifter-transports/transports/Replicant/v3 v3.0.12/go.mod h1:q5x1vofuSHVv7PVPx86LR7wT169SjDLGaGCR6vceEsU= github.com/OperatorFoundation/shapeshifter-transports/transports/meeklite/v3 v3.0.11 h1:wZS0LVcP5+TJNJTlV73ys6A+lgM3B+P9iH+3bKcXt40= github.com/OperatorFoundation/shapeshifter-transports/transports/meeklite/v3 v3.0.11/go.mod h1:wQZC/2AdEDj3fnuI0Bu0dL1kvUeaE7MvoyeLlLu2nfQ= +github.com/OperatorFoundation/shapeshifter-transports/transports/meeklite/v3 v3.0.12 h1:bcboyU/mDFm3ocgZ8uSMUTuryJ/edjYJgrn0qKY/NPI= +github.com/OperatorFoundation/shapeshifter-transports/transports/meeklite/v3 v3.0.12/go.mod h1:wQZC/2AdEDj3fnuI0Bu0dL1kvUeaE7MvoyeLlLu2nfQ= github.com/OperatorFoundation/shapeshifter-transports/transports/meekserver/v3 v3.0.11 h1:HIAkg5qmtxxWmEJCDCLA/ITYqtDIkK+BshqgymY5+Kc= github.com/OperatorFoundation/shapeshifter-transports/transports/meekserver/v3 v3.0.11/go.mod h1:iC28oIcxCb6KgI4Tj2a86cxLDrLqfaTlhi6EDMsU4Gg= +github.com/OperatorFoundation/shapeshifter-transports/transports/meekserver/v3 v3.0.12 h1:iKAFfb8cRWkHSumT2jg+dQ7zOos9lHnLPWEkVaFRffo= +github.com/OperatorFoundation/shapeshifter-transports/transports/meekserver/v3 v3.0.12/go.mod h1:iC28oIcxCb6KgI4Tj2a86cxLDrLqfaTlhi6EDMsU4Gg= github.com/OperatorFoundation/shapeshifter-transports/transports/obfs2/v3 v3.0.11 h1:Y12MCe3C6c7CeWnZjZc3Xn17uUXLoxnD3L1Guj+2n34= github.com/OperatorFoundation/shapeshifter-transports/transports/obfs2/v3 v3.0.11/go.mod h1:nnE7S0srPoXZDatJ7sTWhClwo/3vyMXykSDPHAdi2xo= +github.com/OperatorFoundation/shapeshifter-transports/transports/obfs2/v3 v3.0.12 h1:0r0jzjDGspARjI27Sr8KezIzm1a2Ixs5Hn6hizysAVE= +github.com/OperatorFoundation/shapeshifter-transports/transports/obfs2/v3 v3.0.12/go.mod h1:nnE7S0srPoXZDatJ7sTWhClwo/3vyMXykSDPHAdi2xo= github.com/OperatorFoundation/shapeshifter-transports/transports/obfs4/v3 v3.0.11 h1:SkbSYVapVSi/KSdLHZPSSO176p26CHNKFv7hZ1t1dK0= github.com/OperatorFoundation/shapeshifter-transports/transports/obfs4/v3 v3.0.11/go.mod h1:k1ga949kVeIGplqIb1lBE8Qi957Om/bz/GDMymQr+kA= +github.com/OperatorFoundation/shapeshifter-transports/transports/obfs4/v3 v3.0.12 h1:CbHVVqoJQvzrNerVwc5M60I7xCtDHekdRT4NFHcPI+w= +github.com/OperatorFoundation/shapeshifter-transports/transports/obfs4/v3 v3.0.12/go.mod h1:k1ga949kVeIGplqIb1lBE8Qi957Om/bz/GDMymQr+kA= github.com/OperatorFoundation/shapeshifter-transports/transports/shadow/v3 v3.0.11 h1:eQDjLsEgy7IgHdaKU10Hq9EPa8pT9ytu9jL3z1VshAs= github.com/OperatorFoundation/shapeshifter-transports/transports/shadow/v3 v3.0.11/go.mod h1:eI5kZwV2A9NBKB3UgzjY1ThIsV2sSUETBmjGbPncaf0= +github.com/OperatorFoundation/shapeshifter-transports/transports/shadow/v3 v3.0.12 h1:gOKx+fiNRUMD8uAG5l+Q9zmXQNTNU8Y6t3KmWRAVhoc= +github.com/OperatorFoundation/shapeshifter-transports/transports/shadow/v3 v3.0.12/go.mod h1:eI5kZwV2A9NBKB3UgzjY1ThIsV2sSUETBmjGbPncaf0= github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da h1:KjTM2ks9d14ZYCvmHS9iAKVt9AyzRSqNU1qabPih5BY= github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da/go.mod h1:eHEWzANqSiWQsof+nXEI9bUVUyV6F53Fp89EuCh2EAA= github.com/blanu/Dust v1.0.0/go.mod h1:jLFQI2Ufz4kBnGiTzh8O9+/p4U/9MLbouXkaympnTI0= diff --git a/main.go b/main.go index fb028f0..25220e4 100644 --- a/main.go +++ b/main.go @@ -34,6 +34,7 @@ import ( "flag" "fmt" "github.com/OperatorFoundation/shapeshifter-dispatcher/common/pt_extras" + "github.com/OperatorFoundation/shapeshifter-dispatcher/transports" pt "github.com/OperatorFoundation/shapeshifter-ipc/v2" "github.com/kataras/golog" "io" @@ -177,11 +178,6 @@ func main() { if *options != "" && *optionsFile != "" { golog.Fatal("cannot specify -options and -optionsFile at the same time") } - if err = log.Init(*enableLogging, path.Join(stateDir, dispatcherLogFile), ipcLogLevel); err != nil { - println("stateDir:", stateDir) - println("--> Error: ", err.Error()) - golog.Fatalf("--> [ERROR]: %s - failed to initialize logging", execName) - } if *optionsFile != "" { fmt.Println("checking for optionsFile") _, err := os.Stat(*optionsFile) @@ -246,7 +242,7 @@ func main() { } } else { - targetValidationError := validatetarget(targetHost, targetPort, target) + targetValidationError := validatetarget(isClient, targetHost, targetPort, target) if targetValidationError != nil { golog.Errorf("could not validate: %s",targetValidationError) return diff --git a/modes/pt_socks5/pt_socks5.go b/modes/pt_socks5/pt_socks5.go index f761ff4..c299794 100644 --- a/modes/pt_socks5/pt_socks5.go +++ b/modes/pt_socks5/pt_socks5.go @@ -54,7 +54,7 @@ func ClientSetup(socksAddr string, ptClientProxy *url.URL, names []string, optio go clientAcceptLoop(name, ln, ptClientProxy, options) pt.Cmethod(name, socks5.Version(), ln.Addr()) - log.Infof("%s - registered listener: %s", name, ln.Addr()) + golog.Infof("%s - registered listener: %s", name, ln.Addr()) launched = true } @@ -68,7 +68,7 @@ func clientAcceptLoop(name string, ln net.Listener, proxyURI *url.URL, options s conn, err := ln.Accept() if err != nil { if e, ok := err.(net.Error); ok && !e.Temporary() { - log.Errorf("serverAcceptLoop failed") + golog.Errorf("serverAcceptLoop failed") _ = ln.Close() return } @@ -84,7 +84,7 @@ func clientHandler(name string, conn net.Conn, proxyURI *url.URL, options string // Read the client's SOCKS handshake. socksReq, err := socks5.Handshake(conn, needOptions) if err != nil { - log.Errorf("%s - client failed socks handshake: %s", name, err) + golog.Errorf("%s - client failed socks handshake: %s", name, err) return } addrStr := commonLog.ElideAddr(socksReq.Target) @@ -95,8 +95,8 @@ func clientHandler(name string, conn net.Conn, proxyURI *url.URL, options string transport, argsToDialerErr := pt_extras.ArgsToDialer(name, options, dialer) if argsToDialerErr != nil { - log.Errorf("Error creating a transport with the provided options: %s", options) - log.Errorf("Error: %s", argsToDialerErr) + golog.Errorf("Error creating a transport with the provided options: %s", options) + golog.Errorf("Error: %s", argsToDialerErr) return } // Obtain the proxy dialer if any, and create the outgoing TCP connection. @@ -106,7 +106,7 @@ func clientHandler(name string, conn net.Conn, proxyURI *url.URL, options string if proxyErr != nil { // This should basically never happen, since config protocol // verifies this. - log.Errorf("%s(%s) - failed to obtain proxy dialer: %s", name, addrStr, commonLog.ElideError(err)) + golog.Errorf("%s(%s) - failed to obtain proxy dialer: %s", name, addrStr, commonLog.ElideError(err)) _ = socksReq.Reply(socks5.ReplyGeneralFailure) return } @@ -114,20 +114,20 @@ func clientHandler(name string, conn net.Conn, proxyURI *url.URL, options string remote, err2 := transport.Dial() if err2 != nil { - log.Errorf("%s(%s) - outgoing connection failed: %s", name, addrStr, commonLog.ElideError(err2)) + golog.Errorf("%s(%s) - outgoing connection failed: %s", name, addrStr, commonLog.ElideError(err2)) _ = socksReq.Reply(socks5.ErrorToReplyCode(err2)) return } err = socksReq.Reply(socks5.ReplySucceeded) if err != nil { - log.Errorf("%s(%s) - SOCKS reply failed: %s", name, addrStr, commonLog.ElideError(err)) + golog.Errorf("%s(%s) - SOCKS reply failed: %s", name, addrStr, commonLog.ElideError(err)) return } if err = modes.CopyLoop(conn, remote); err != nil { golog.Warnf("%s(%s) - closed connection: %s", name, addrStr, commonLog.ElideError(err)) } else { - log.Infof("%s(%s) - closed connection", name, addrStr) + golog.Infof("%s(%s) - closed connection", name, addrStr) } return @@ -149,11 +149,11 @@ func ServerSetup(ptServerInfo pt.ServerInfo, stateDir string, options string) (l if LnError != nil { continue } - log.Infof("%s - registered listener: %s", name, log.ElideAddr(bindaddr.Addr.String())) + golog.Infof("%s - registered listener: %s", name, log.ElideAddr(bindaddr.Addr.String())) modes.ServerAcceptLoop(name, transportLn, &ptServerInfo, serverHandler) transportLnErr := transportLn.Close() if transportLnErr != nil { - log.Errorf("Listener close error: %s", transportLnErr.Error()) + golog.Errorf("Listener close error: %s", transportLnErr.Error()) } } }() @@ -168,19 +168,19 @@ func ServerSetup(ptServerInfo pt.ServerInfo, stateDir string, options string) (l func serverHandler(name string, remote net.Conn, info *pt.ServerInfo) { addrStr := log.ElideAddr(remote.RemoteAddr().String()) - log.Infof("%s(%s) - new connection", name, addrStr) + golog.Infof("%s(%s) - new connection", name, addrStr) // Connect to the orport. orConn, err := pt.DialOr(info, remote.RemoteAddr().String(), name) if err != nil { - log.Errorf("%s(%s) - failed to connect to ORPort: %s", name, addrStr, log.ElideError(err)) + golog.Errorf("%s(%s) - failed to connect to ORPort: %s", name, addrStr, log.ElideError(err)) return } if err = modes.CopyLoop(orConn, remote); err != nil { - log.Warnf("%s(%s) - closed connection: %s", name, addrStr, log.ElideError(err)) + golog.Warnf("%s(%s) - closed connection: %s", name, addrStr, log.ElideError(err)) } else { - log.Infof("%s(%s) - closed connection", name, addrStr) + golog.Infof("%s(%s) - closed connection", name, addrStr) } return diff --git a/modes/transparent_tcp/transparent_tcp.go b/modes/transparent_tcp/transparent_tcp.go index 7a69564..f704eed 100644 --- a/modes/transparent_tcp/transparent_tcp.go +++ b/modes/transparent_tcp/transparent_tcp.go @@ -56,7 +56,7 @@ func clientHandler(name string, options string, conn net.Conn, proxyURI *url.URL // This should basically never happen, since config protocol // verifies this. fmt.Println("-> failed to obtain dialer", proxyURI, proxy.Direct) - log.Errorf("(%s) - failed to obtain proxy dialer: %s", commonLog.ElideError(err)) + golog.Errorf("(%s) - failed to obtain proxy dialer: %s", commonLog.ElideError(err)) return } } @@ -64,8 +64,8 @@ func clientHandler(name string, options string, conn net.Conn, proxyURI *url.URL // Deal with arguments. transport, argsToDialerErr := pt_extras.ArgsToDialer(name, options, dialer) if argsToDialerErr != nil { - log.Errorf("Error creating a transport with the provided options: %v", options) - log.Errorf("Error: %v", argsToDialerErr.Error()) + golog.Errorf("Error creating a transport with the provided options: %v", options) + golog.Errorf("Error: %v", argsToDialerErr.Error()) println("-> Error creating a transport with the provided options: ", options) println("-> Error: ", argsToDialerErr.Error()) return @@ -77,25 +77,25 @@ func clientHandler(name string, options string, conn net.Conn, proxyURI *url.URL println("--> Unable to dial transport server: ", dialErr.Error()) println("-> Name: ", name) println("-> Options: ", options) - log.Errorf("--> Unable to dial transport server: %v", dialErr.Error()) + golog.Errorf("--> Unable to dial transport server: %v", dialErr.Error()) return } if conn == nil { println("--> Application connection is nil") - log.Errorf("%s - closed connection. Application connection is nil", name) + golog.Errorf("%s - closed connection. Application connection is nil", name) } if remote == nil { println("--> Transport server connection is nil.") - log.Errorf("%s - closed connection. Transport server connection is nil", name) + golog.Errorf("%s - closed connection. Transport server connection is nil", name) } if err := modes.CopyLoop(conn, remote); err != nil { golog.Warnf("%s(%s) - closed connection: %s", name, commonLog.ElideError(err)) println("%s(%s) - closed connection: %s", name, commonLog.ElideError(err)) } else { - log.Infof("%s(%s) - closed connection", name) + golog.Infof("%s(%s) - closed connection", name) println("%s(%s) - closed connection", name) } } @@ -108,14 +108,14 @@ func serverHandler(name string, remote net.Conn, info *pt.ServerInfo) { // Connect to the orport. orConn, err := pt.DialOr(info, remote.RemoteAddr().String(), name) if err != nil { - log.Errorf("%s - failed to connect to ORPort: %s", name, log.ElideError(err)) + golog.Errorf("%s - failed to connect to ORPort: %s", name, log.ElideError(err)) return } if err = modes.CopyLoop(orConn, remote); err != nil { - log.Warnf("%s - closed connection: %s", name, log.ElideError(err)) + golog.Warnf("%s - closed connection: %s", name, log.ElideError(err)) } else { - log.Infof("%s - closed connection", name) + golog.Infof("%s - closed connection", name) } } diff --git a/modes/transparent_udp/transparent_udp.go b/modes/transparent_udp/transparent_udp.go index 2c3fb24..a3c1045 100644 --- a/modes/transparent_udp/transparent_udp.go +++ b/modes/transparent_udp/transparent_udp.go @@ -114,7 +114,7 @@ func serverHandler(name string, remote net.Conn, info *pt.ServerInfo) { addrStr := log.ElideAddr(remote.RemoteAddr().String()) fmt.Println("### handling", name) - log.Infof("%s(%s) - new connection", name, addrStr) + golog.Infof("%s(%s) - new connection", name, addrStr) serverAddr, err := net.ResolveUDPAddr("udp", info.OrAddr.String()) if err != nil { diff --git a/modes/udp_common.go b/modes/udp_common.go index ba94be7..69e56ab 100644 --- a/modes/udp_common.go +++ b/modes/udp_common.go @@ -28,6 +28,7 @@ import ( "github.com/OperatorFoundation/obfs4/common/log" "github.com/OperatorFoundation/shapeshifter-dispatcher/common/pt_extras" pt "github.com/OperatorFoundation/shapeshifter-ipc/v2" + "github.com/kataras/golog" "net" "net/url" ) @@ -37,16 +38,16 @@ func ClientSetupUDP(socksAddr string, ptClientProxy *url.URL, names []string, op for _, name := range names { udpAddr, err := net.ResolveUDPAddr("udp", socksAddr) if err != nil { - log.Errorf("Error resolving address %s", socksAddr) + golog.Errorf("Error resolving address %s", socksAddr) } ln, err := net.ListenUDP("udp", udpAddr) if err != nil { - log.Errorf("failed to listen %s %s", name, err.Error()) + golog.Errorf("failed to listen %s %s", name, err.Error()) continue } - log.Infof("%s - registered listener", name) + golog.Infof("%s - registered listener", name) go clientHandler(name, options, ln, ptClientProxy) } @@ -72,11 +73,11 @@ func ServerSetupUDP(ptServerInfo pt.ServerInfo, stateDir string, options string, if LnError != nil { continue } - log.Infof("%s - registered listener: %s", name, log.ElideAddr(bindaddr.Addr.String())) + golog.Infof("%s - registered listener: %s", name, log.ElideAddr(bindaddr.Addr.String())) ServerAcceptLoop(name, transportLn, &ptServerInfo, serverHandler) transportLnErr := transportLn.Close() if transportLnErr != nil { - log.Errorf("Listener close error: %s", transportLnErr.Error()) + golog.Errorf("Listener close error: %s", transportLnErr.Error()) } } }() diff --git a/reduceMicroformats.go b/reduceMicroformats.go index 15e01dd..6a00d75 100644 --- a/reduceMicroformats.go +++ b/reduceMicroformats.go @@ -26,7 +26,7 @@ package main import ( "errors" - "github.com/OperatorFoundation/shapeshifter-dispatcher/common/log" + "github.com/kataras/golog" ) //This is for proposal no.9 @@ -80,9 +80,9 @@ func validateProxyListenAddr(proxyListenHost *string, proxyListenPort *string, p } if *proxyListenHost != "" && *proxyListenAddr != "" { - log.Infof("proxylistenhost: %s", *proxyListenHost) - log.Infof("proxylistenport: %s", *proxyListenPort) - log.Infof("proxylistenaddr: %s", *proxyListenAddr) + golog.Infof("proxylistenhost: %s", *proxyListenHost) + golog.Infof("proxylistenport: %s", *proxyListenPort) + golog.Infof("proxylistenaddr: %s", *proxyListenAddr) return errors.New("you cannot specify both --proxylistenhost and --proxylistenaddr") } diff --git a/testTCPObfs2Output.txt b/testTCPObfs2Output.txt index e69de29..6320cd2 100644 --- a/testTCPObfs2Output.txt +++ b/testTCPObfs2Output.txt @@ -0,0 +1 @@ +data \ No newline at end of file