Exemplo n.º 1
0
func main() {
	flag.Parse()
	if *fKeyFile == "" {
		flag.Usage()
		return
	}
	// Read key file.
	key, err := ioutil.ReadFile(*fKeyFile)
	if err != nil {
		log.Fatalf("key file: %s", err)
	}

	// Dial.
	conn, err := spipe.Dial(key, "tcp", *fAddr)
	if err != nil {
		log.Fatalf("Dial: %s", err)
	}
	defer conn.Close()

	errc := make(chan error, 1)

	go func() {
		_, err := io.Copy(conn, os.Stdin)
		errc <- err
	}()
	go func() {
		_, err := io.Copy(os.Stdout, conn)
		errc <- err
	}()
	<-errc
	conn.Close()
}
Exemplo n.º 2
0
func main() {
	flag.Parse()
	if *fKeyFile == "" {
		flag.Usage()
		return
	}
	// Read key file.
	key, err := ioutil.ReadFile(*fKeyFile)
	if err != nil {
		log.Fatalf("key file: %s", err)
	}

	s, _ := net.Listen("tcp", *sAddr)
	for {
		c, _ := s.Accept()

		// Dial.
		conn, err := spipe.Dial(key, "tcp", *fAddr)
		if err != nil {
			log.Fatalf("Dial: %s", err)
		}
		defer conn.Close()
		errc := make(chan error, 1)
		go func() {
			_, err := io.Copy(conn, c)
			errc <- err
		}()
		go func() {
			_, err := io.Copy(c, conn)
			errc <- err
		}()
		<-errc
		conn.Close()
	}
}
Exemplo n.º 3
0
func NewTCPConn(key []byte, peer string) (conn net.Conn, err error) {
	sconn, err := spipe.Dial(key, "tcp", peer)
	if err != nil {
		return
	}

	return newBufferedSpipeConn(sconn), nil
}
Exemplo n.º 4
0
func (pipe *spipeData) Run() {
	if pipe.Type == "enc" {
		s, _ := net.Listen("tcp", ":"+pipe.LocalPort)

		for {
			c, _ := s.Accept()
			t, _ := spipe.Dial(pipe.key, "tcp", pipe.TargetDest)
			go pipe.handleCopy(c, t)
		}
	} else {
		s, _ := spipe.Listen(pipe.key, "tcp", ":"+pipe.LocalPort)

		for {
			c, _ := s.Accept()
			t, _ := net.Dial("tcp", pipe.TargetDest)
			go pipe.handleCopy(c, t)
		}
	}
}
Exemplo n.º 5
0
Arquivo: main.go Projeto: rdterner/tp
func forward(local io.ReadWriteCloser) {
	defer local.Close()

	var err error
	var remote io.ReadWriteCloser

	if secure {
		remote, err = spipe.Dial(key, "tcp", *tcs)
	} else {
		remote, err = net.Dial("tcp", *tcs)
	}
	if err != nil {
		log.Printf("failed to dial tcs %q: %v", *tcs, err)
		return
	}
	defer remote.Close()

	_, err = remote.Write(header)
	if err != nil {
		log.Printf("failed to write header: %v", err)
		return
	}

	var dumpOutWriter io.WriteCloser
	if len(*dumpOut) != 0 {
		dumpOutWriter, err = os.OpenFile(*dumpOut, os.O_APPEND|os.O_WRONLY|os.O_CREATE, 0777)
		if err != nil {
			log.Printf("failed to open dump out file %q: %v", *dumpOut, err)
			return
		}
		defer dumpOutWriter.Close()
	}

	var dumpInWriter io.WriteCloser
	if len(*dumpIn) != 0 {
		dumpInWriter, err = os.OpenFile(*dumpIn, os.O_APPEND|os.O_WRONLY|os.O_CREATE, 0777)
		if err != nil {
			log.Printf("failed to open dump in file %q: %v", *dumpIn, err)
			return
		}
		defer dumpInWriter.Close()
	}

	wg := &sync.WaitGroup{}
	wg.Add(2)

	go func() {
		if dumpInWriter != nil {
			io.Copy(local, io.TeeReader(remote, dumpInWriter))
		} else {
			io.Copy(local, remote)
		}
		wg.Done()
		local.Close()
	}()

	go func() {
		if dumpOutWriter != nil {
			io.Copy(remote, io.TeeReader(local, dumpOutWriter))
		} else {
			io.Copy(remote, local)
		}
		wg.Done()
		remote.Close()
	}()
	wg.Wait()
}