revdial

package
v0.0.0-...-f8637a9 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 4, 2016 License: BSD-3-Clause Imports: 10 Imported by: 0

Documentation

Overview

Package revdial implements a Dialer and Listener which work together to turn an accepted connection (for instance, a Hijacked HTTP request) into a Dialer which can then create net.Conns connecting back to the original dialer, which then gets a net.Listener accepting those conns.

This is basically a very minimal SOCKS5 client & server.

The motivation is that sometimes you want to run a server on a machine deep inside a NAT. Rather than connecting to the machine directly (which you can't, because of the NAT), you have the sequestered machine connect out to a public machine. Both sides then use revdial and the public machine can become a client for the NATed machine.

Index

Constants

This section is empty.

Variables

View Source
var ErrListenerClosed = errors.New("revdial: Listener closed")

ErrListenerClosed is returned by Accept after Close has been called.

Functions

This section is empty.

Types

type Dialer

type Dialer struct {
	// contains filtered or unexported fields
}

The Dialer can create new connections.

func NewDialer

func NewDialer(rw *bufio.ReadWriter, c io.Closer) *Dialer

NewDialer returns the side of the connection which will initiate new connections. This will typically be the side which did the HTTP Hijack. The io.Closer is what gets closed by the Close or by any errors. It will typically be the hijacked Conn.

func (*Dialer) Close

func (d *Dialer) Close() error

Close closes the Dialer and all still-open connections from it.

func (*Dialer) Dial

func (d *Dialer) Dial() (net.Conn, error)

Dial creates a new connection back to the Listener.

func (*Dialer) Done

func (d *Dialer) Done() <-chan struct{}

Done returns a channel which is closed when d is either closed or closed by the peer.

type Listener

type Listener struct {
	// contains filtered or unexported fields
}

Listener is a net.Listener, returning new connections which arrive from a corresponding Dialer.

func NewListener

func NewListener(rw *bufio.ReadWriter) *Listener

NewListener returns a new Listener, accepting connections which arrive from rw.

func (*Listener) Accept

func (ln *Listener) Accept() (net.Conn, error)

Accept blocks and returns a new connections, or an error.

func (*Listener) Addr

func (ln *Listener) Addr() net.Addr

Addr returns a dummy address. This exists only to conform to the net.Listener interface.

func (*Listener) Close

func (ln *Listener) Close() error

Close closes the Listener, making future Accept calls return an error.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL