Skip to content

Commit

Permalink
Add SOCKS support
Browse files Browse the repository at this point in the history
  • Loading branch information
adisbladis committed May 25, 2020
1 parent 7efeeb4 commit 11f78d4
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 6 deletions.
6 changes: 5 additions & 1 deletion go.mod
Expand Up @@ -2,4 +2,8 @@ module github.com/adisbladis/activated-tunnel

go 1.14

require golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37
require (
github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5
golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3
)
3 changes: 3 additions & 0 deletions go.sum
@@ -1,6 +1,9 @@
github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio=
github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37 h1:cg5LA/zNPRzIXIWSCxQW10Rvpy94aQh3LT/ShoCpkHw=
golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3 h1:0GoQqolDA55aaLxZyTzK/Y2ePZzZTUrRacwib7cNsYQ=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d h1:+R4KGOnez64A81RvjARKc4UT5/tI9ujCIVX+P5KiHuI=
Expand Down
29 changes: 24 additions & 5 deletions main.go
Expand Up @@ -2,8 +2,10 @@ package main // import "github.com/adisbladis/activated-tunnel"

import (
"fmt"
"github.com/armon/go-socks5"
"golang.org/x/crypto/ssh"
"golang.org/x/crypto/ssh/agent"
"golang.org/x/net/context"
"io"
"net"
"os"
Expand Down Expand Up @@ -51,25 +53,42 @@ func (tunnel *SSHtunnel) Start() error {
}(listener)
}

serverConn, err := ssh.Dial("tcp", tunnel.Server.String(), tunnel.Config)
if err != nil {
panic(err)
}

for {
select {
case c := <-connections:
go func() {
go tunnel.forward(c)
// tunnel.forward(serverConn, c)
tunnel.forwardSocks(serverConn, c)
}()
}
}

return nil
}

func (tunnel *SSHtunnel) forward(localConn net.Conn) {
serverConn, err := ssh.Dial("tcp", tunnel.Server.String(), tunnel.Config)
func (tunnel *SSHtunnel) forwardSocks(serverConn *ssh.Client, localConn net.Conn) {

dial := func(ctx context.Context, net_, addr string) (net.Conn, error) {
return serverConn.Dial(net_, addr)
}

conf := &socks5.Config{
Dial: dial,
}
server, err := socks5.New(conf)
if err != nil {
fmt.Printf("Server dial error: %s\n", err)
return
panic(err)
}

server.ServeConn(localConn)
}

func (tunnel *SSHtunnel) forward(serverConn *ssh.Client, localConn net.Conn) {
remoteConn, err := serverConn.Dial("tcp", tunnel.Remote.String())
if err != nil {
fmt.Printf("Remote dial error: %s\n", err)
Expand Down

0 comments on commit 11f78d4

Please sign in to comment.