Page MenuHomePhabricator

endpoint.go
No OneTemporary

endpoint.go

package endpoint
import (
"fmt"
"io"
"golang.org/x/crypto/ssh"
"net"
)
type Endpoint struct {
Host string
Port int
}
func (endpoint *Endpoint) String() string {
return fmt.Sprintf("%s:%d", endpoint.Host, endpoint.Port)
}
type SSHtunnel struct {
Local *Endpoint
Server *Endpoint
Remote *Endpoint
Config *ssh.ClientConfig
ServerConnection *ssh.ServerConfig
}
// type localEndpoint []Endpoint
//
// type remoteEndpoint []Endpoint
//func (index *arrayFlags) Set
// var testend Endpoint
//
// testend.Host = "localhost"
// testend.Port = "5"
func (tunnel *SSHtunnel) Start() error {
for {
listener, err := net.Listen("tcp", tunnel.Local.String())
if err != nil {
return err
}
defer listener.Close()
for {
conn, err := listener.Accept()
if err != nil {
return err
}
go tunnel.forward(conn)
}
}
}
func (tunnel *SSHtunnel) forward(localConn net.Conn) {
serverConn, err := ssh.Dial("tcp", tunnel.Server.String(), tunnel.Config)
if err != nil {
fmt.Printf("Server dial error: %s\n", err)
return
}
remoteConn, err := serverConn.Dial("tcp", tunnel.Remote.String())
if err != nil {
fmt.Printf("Remote dial error: %s\n", err)
return
}
copyConn:=func(writer, reader net.Conn) {
_, err:= io.Copy(writer, reader)
if err != nil {
fmt.Printf("io.Copy error: %s", err)
}
}
go copyConn(localConn, remoteConn)
go copyConn(remoteConn, localConn)
}

File Metadata

Mime Type
text/plain
Expires
Mon, Feb 24, 4:14 PM (1 d, 4 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
15162
Default Alt Text
endpoint.go (1 KB)

Event Timeline