diff options
| author | Brandon Wiley <brandon@blanu.net> | 2016-11-15 14:52:04 -0600 | 
|---|---|---|
| committer | Brandon Wiley <brandon@blanu.net> | 2016-11-15 14:52:04 -0600 | 
| commit | 8a7de7e1e252a73d786bafab042eedde8c025ad6 (patch) | |
| tree | eefeca82da3a8f61bcc19ba2d4dd6c43952c77b7 /obfs4proxy | |
| parent | 93cb566c11b9c968677786bc6b5cf01ac06931e6 (diff) | |
Removed transports from shapeshifter-dispatcher (now located in shapeshifter-transports)
Diffstat (limited to 'obfs4proxy')
| -rw-r--r-- | obfs4proxy/obfs4proxy.go | 247 | 
1 files changed, 0 insertions, 247 deletions
| diff --git a/obfs4proxy/obfs4proxy.go b/obfs4proxy/obfs4proxy.go deleted file mode 100644 index 9e3a6ab..0000000 --- a/obfs4proxy/obfs4proxy.go +++ /dev/null @@ -1,247 +0,0 @@ -/* - * Copyright (c) 2014-2015, Yawning Angel <yawning at torproject dot org> - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - *  * Redistributions of source code must retain the above copyright notice, - *    this list of conditions and the following disclaimer. - * - *  * Redistributions in binary form must reproduce the above copyright notice, - *    this list of conditions and the following disclaimer in the documentation - *    and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -// Go language Tor Pluggable Transport suite.  Works only as a managed -// client/server. -package main - -import ( -	"flag" -	"fmt" -	golog "log" -	"net" -	"os" -	"path" -	"syscall" - -	"git.torproject.org/pluggable-transports/goptlib.git" -	"github.com/OperatorFoundation/obfs4/common/log" -	"github.com/OperatorFoundation/obfs4/common/pt_extras" -	"github.com/OperatorFoundation/obfs4/common/termmon" -	"github.com/OperatorFoundation/obfs4/transports" - -	"github.com/OperatorFoundation/obfs4/modes/pt_socks5" -	"github.com/OperatorFoundation/obfs4/modes/transparent_tcp" -	"github.com/OperatorFoundation/obfs4/modes/transparent_udp" -	"github.com/OperatorFoundation/obfs4/modes/stun_udp" - -	_ "github.com/OperatorFoundation/obfs4/proxy_dialers/proxy_socks4" -	_ "github.com/OperatorFoundation/obfs4/proxy_dialers/proxy_http" -) - -const ( -	obfs4proxyVersion = "0.0.7-dev" -	obfs4proxyLogFile = "obfs4proxy.log" -	socksAddr         = "127.0.0.1:0" -) - -var stateDir string -var termMon *termmon.TermMonitor - -func getVersion() string { -	return fmt.Sprintf("obfs4proxy-%s", obfs4proxyVersion) -} - -func main() { -	// Initialize the termination state monitor as soon as possible. -	termMon = termmon.NewTermMonitor() - -	// Handle the command line arguments. -	_, execName := path.Split(os.Args[0]) -	showVer := flag.Bool("version", false, "Print version and exit") -	logLevelStr := flag.String("logLevel", "ERROR", "Log level (ERROR/WARN/INFO/DEBUG)") -	enableLogging := flag.Bool("enableLogging", false, "Log to TOR_PT_STATE_LOCATION/"+obfs4proxyLogFile) -	unsafeLogging := flag.Bool("unsafeLogging", false, "Disable the address scrubber") -	transparent := flag.Bool("transparent", false, "Enable transparent proxy mode") -	udp := flag.Bool("udp", false, "Enable UDP proxy mode") -	target := flag.String("target", "", "Specify transport server destination address") -	clientMode := flag.Bool("client", false, "Enable client mode") -	serverMode := flag.Bool("server", false, "Enable server mode") -	statePath := flag.String("state", "", "Specify transport server destination address") -	bindAddr := flag.String("bindaddr", "", "Specify the bind address for transparent server") -	flag.Parse() - -	if *showVer { -		fmt.Printf("%s\n", getVersion()) -		os.Exit(0) -	} -	if err := log.SetLogLevel(*logLevelStr); err != nil { -		fmt.Println("failed to set log level") -		golog.Fatalf("[ERROR]: %s - failed to set log level: %s", execName, err) -	} - -	// Determine if this is a client or server, initialize the common state. -	var ptListeners []net.Listener -	launched := false -	isClient, err := checkIsClient(*clientMode, *serverMode) -	if err != nil { -		golog.Fatalf("[ERROR]: %s - must be run as a managed transport", execName) -	} -	if stateDir, err = makeStateDir(*statePath); err != nil { -		golog.Fatalf("[ERROR]: %s - No state directory: %s", execName, err) -	} -	if err = log.Init(*enableLogging, path.Join(stateDir, obfs4proxyLogFile), *unsafeLogging); err != nil { -		golog.Fatalf("[ERROR]: %s - failed to initialize logging", execName) -	} -	if err = transports.Init(); err != nil { -		log.Errorf("%s - failed to initialize transports: %s", execName, err) -		os.Exit(-1) -	} - -	log.Noticef("%s - launched", getVersion()) -	fmt.Println("launching") - -	if *transparent { -		// Do the transparent proxy configuration. -		log.Infof("%s - initializing transparent proxy", execName) -		if *udp { -			log.Infof("%s - initializing UDP transparent proxy", execName) -			if isClient { -				log.Infof("%s - initializing client transport listeners", execName) -				if *target == "" { -					log.Errorf("%s - transparent mode requires a target", execName) -				} else { -					fmt.Println("transparent udp client") -					launched = transparent_udp.ClientSetup(termMon, *target) -				} -			} else { -				log.Infof("%s - initializing server transport listeners", execName) -				if *bindAddr == "" { -					fmt.Println("%s - transparent mode requires a bindaddr", execName) -				} else { -					fmt.Println("transparent udp server") -					launched = transparent_udp.ServerSetup(termMon, *bindAddr, *target) -					fmt.Println("launched", launched, ptListeners) -				} -			} -		} else { -			log.Infof("%s - initializing TCP transparent proxy", execName) -			if isClient { -				log.Infof("%s - initializing client transport listeners", execName) -				if *target == "" { -					log.Errorf("%s - transparent mode requires a target", execName) -				} else { -					launched, ptListeners = transparent_tcp.ClientSetup(termMon, *target) -				} -			} else { -				log.Infof("%s - initializing server transport listeners", execName) -				if *bindAddr == "" { -					fmt.Println("%s - transparent mode requires a bindaddr", execName) -				} else { -					launched, ptListeners = transparent_tcp.ServerSetup(termMon, *bindAddr) -					fmt.Println("launched", launched, ptListeners) -				} -			} -		} -	} else { -		if *udp { -			log.Infof("%s - initializing STUN UDP proxy", execName) -			if isClient { -				log.Infof("%s - initializing client transport listeners", execName) -				if *target == "" { -					log.Errorf("%s - STUN mode requires a target", execName) -				} else { -					fmt.Println("STUN udp client") -					launched = stun_udp.ClientSetup(termMon, *target) -				} -			} else { -				log.Infof("%s - initializing server transport listeners", execName) -				if *bindAddr == "" { -					fmt.Println("%s - STUN mode requires a bindaddr", execName) -				} else { -					fmt.Println("STUN udp server") -					launched = stun_udp.ServerSetup(termMon, *bindAddr, *target) -					fmt.Println("launched", launched, ptListeners) -				} -			} -		} else { -			// Do the managed pluggable transport protocol configuration. -			log.Infof("%s - initializing PT 1.0 proxy", execName) -			if isClient { -				log.Infof("%s - initializing client transport listeners", execName) -				launched, ptListeners = pt_socks5.ClientSetup(termMon) -			} else { -				log.Infof("%s - initializing server transport listeners", execName) -				launched, ptListeners = pt_socks5.ServerSetup(termMon) -			} -		} -	} - -	if !launched { -		// Initialization failed, the client or server setup routines should -		// have logged, so just exit here. -		os.Exit(-1) -	} - -	fmt.Println("launched") - -	log.Infof("%s - accepting connections", execName) -	defer func() { -		log.Noticef("%s - terminated", execName) -	}() - -	// At this point, the pt config protocol is finished, and incoming -	// connections will be processed.  Wait till the parent dies -	// (immediate exit), a SIGTERM is received (immediate exit), -	// or a SIGINT is received. -	if sig := termMon.Wait(false); sig == syscall.SIGTERM { -		return -	} - -	// Ok, it was the first SIGINT, close all listeners, and wait till, -	// the parent dies, all the current connections are closed, or either -	// a SIGINT/SIGTERM is received, and exit. -	for _, ln := range ptListeners { -		ln.Close() -	} - -	termMon.Wait(true) - -  fmt.Println("waiting") -	for { -		// FIXME - block because termMon.Wait is not blocking -	} -} - -func checkIsClient(client bool, server bool) (bool, error) { -	if client { -		return true, nil -	} else if server { -		return false, nil -	} else { -		return pt_extras.PtIsClient() -	} -} - -func makeStateDir(statePath string) (string, error) { -	if statePath != "" { -		err := os.MkdirAll(statePath, 0700) -		return statePath, err -	} else { -		return pt.MakeStateDir() -	} -} | 
