vforward

package module
v1.2.4 Latest Latest
Warning

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

Go to latest
Published: Apr 26, 2024 License: Apache-2.0 Imports: 12 Imported by: 5

README

vforward Build Status

golang vforward,TCP/UDP port forwarding,端口转发,主动连接,被动连接,大多用于内网端口反弹。

D2D 命令行:

内网开放端口,外网无法访问的情况下。内网使用D2D主动连接外网端口。以便外网发来数据转发到内网端口中去。

工作原理:
|A内网|  ←  |D2D|  →  |B外网|(1,A和B收到[D2D]发来连接)
|A内网|  ←  |D2D|  ←  |B外网|(2,B然后向[D2D]回应数据,数据将转发到A内网。)
|A内网|  →  |D2D|  →  |B外网|(3,A内网收到数据再发出数据,由[D2D]转发到B外网。)
命令行:
-ARemote string
      A端远程请求连接地址 (format "12.13.14.15:123")
-ALocal string
      A端本地发起连接地址 (default "0.0.0.0")
-BRemote string
      B端远程请求连接地址 (format "22.23.24.25:234")
-BLocal string
      B端本地发起连接地址 (default "0.0.0.0")
-KeptIdeConn int
      保持一方连接数量,以备快速互相连接。 (default 2)
-IdeTimeout duration
    空闲连接超时。单位:ns, us, ms, s, m, h
-MaxConn int
      限制连接最大的数量 (default 500)
-Network string
      网络地址类型 (default "tcp")
-ReadBufSize int
      交换数据缓冲大小。单位:字节 (default 4096)
-Timeout duration
      转发连接时候,请求远程连接超时。单位:ns, us, ms, s, m, h (default 5s)
-TryConnTime duration
      尝试或发起连接时间,可能一方不在线,会一直尝试连接对方。单位:ns, us, ms, s, m, h (default 500ms)

L2D

是在内网或公网都可以使用,配合D2D或L2L使用功能更自由。L2D功能主要是转发连接(端口转发)。

工作原理:
|A端口|  →  |L2D|  →  |B端口|(1,B收到A发来数据)
|A端口|  ←  |L2D|  ←  |B端口|(2,然后向A回应数据)
|A端口|  →  |L2D|  →  |B端口|(3,B然后再收到A数据)
命令行:
-FromLocal string
      转发请求的源地址 (default "0.0.0.0")
-Listen string
      本地网卡监听地址 (format "0.0.0.0:123")
-MaxConn int
      限制连接最大的数量
-Network string
      网络地址类型 (default "tcp")
-ReadBufSize int
      交换数据缓冲大小。单位:字节 (default 4096)
-Timeout duration
      转发连接时候,请求远程连接超时。单位:ns, us, ms, s, m, h (default 5s)
-ToRemote string
      转发请求的目地址 (format "22.23.24.25:234")

L2L 命令行:

是在公网主机上面监听两个TCP端口,由两个内网客户端连接。 L2L使这两个连接进行交换数据,达成内网到内网通道。 注意:1)双方必须主动连接公网L2L。2)不支持UDP协议。

工作原理:
|A内网|  →  |L2L|  ←  |B内网|(1,A和B同时连接[L2L],由[L2L]互相桥接A和B这两个连接)
|A内网|  ←  |L2L|  ←  |B内网|(2,B 往 A 发送数据)
|A内网|  →  |L2L|  →  |B内网|(3,A 往 B 发送数据)
命令行:
-ALocal string
      A本地监听网卡IP地址 (format "12.13.14.15:123")
-BLocal string
      B本地监听网卡IP地址 (format "22.23.24.25:234")
-KeptIdeConn int
      保持一方连接数量,以备快速互相连接。 (default 2)
-IdeTimeout duration
    空闲连接超时。单位:ns, us, ms, s, m, h
-MaxConn int
      限制连接最大的数量
-Network string
      网络地址类型 (default "tcp")
-ReadBufSize int
      交换数据缓冲大小。单位:字节 (default 4096)
-Timeout duration
      转发连接时候,请求远程连接超时。单位:ns, us, ms, s, m, h (default 5s)

列表:

const DefaultReadBufSize int = 4096                                             // 默认交换数据缓冲大小
type Addr struct {                                                      // 地址
    Network       string                                                        // 网络类型
    Local, Remote net.Addr                                                      // 本地,远程
}
type D2D struct {                                                       // D2D(内网to内网)
    TryConnTime     time.Duration                                               // 尝试或发起连接时间,可能一方不在线,会一直尝试连接对方。
    ReadBufSize     int                                                         // 交换数据缓冲大小
    Timeout         time.Duration                                               // 发起连接超时
    ErrorLog        *log.Logger                                                 // 日志
    Context         context.Context                                             // 上下文
}
    func (dd *D2D) MaxConn(n int)                                               // 限制连接最大的数量
    func (dd *D2D) KeptIdeConn(n int)                                           // 保持一方连接数量,以备快速互相连接。
    func (dd *D2D) IdeTimeout(d time.Duration)                                  // 空闲连接超时
    func (dd *D2D) Close() error                                                // 关闭
    func (dd *D2D) Transport(a, b *Addr) (*D2DSwap, error)                      // 建立连接
type D2DSwap struct {                                                    // D2D交换数据
    Verify  func(a, b net.Conn) (net.Conn, net.Conn, error)                     // 数据交换前对双方连接操作,可以现实验证之类
}
    func (dds *D2DSwap) Close() error                                           // 关闭
    func (dds *D2DSwap) ConnNum() int                                           // 当前连接数
    func (dds *D2DSwap) Swap() error                                            // 开始交换
type L2D struct {                                                        // L2D(端口转发)
    ReadBufSize     int                                                         // 交换数据缓冲大小
    Timeout         time.Duration                                               // 发起连接超时
    ErrorLog        *log.Logger                                                 // 日志
    Context         context.Context                                             // 上下文
}
    func (ld *L2D) MaxConn(n int)                                               // 限制连接最大的数量
    func (ld *L2D) Close() error                                                // 关闭
    func (ld *L2D) Transport(laddr, raddr *Addr) (*L2DSwap, error)              // 建立连接
type L2DSwap struct {                                                     // L2D交换数据
    Verify          func(lconn, rconn net.Conn) (net.Conn, net.Conn, error)     // 数据交换前对双方连接操作,可以现实验证之类
}
    func (lds *L2DSwap) Close() error                                           // 关闭
    func (lds *L2DSwap) ConnNum() int                                           // 当前连接数
    func (lds *L2DSwap) Swap() error                                            // 开始交换
type L2L struct {                                                         // L2L(内网to内网)
    ReadBufSize     int                                                         // 交换数据缓冲大小
    ErrorLog        *log.Logger                                                 // 日志
}
    func (ll *L2L) MaxConn(n int)                                               // 限制连接最大的数量
    func (ll *L2L) KeptIdeConn(n int)                                           // 保持一方连接数量,以备快速互相连接。
    func (ll *L2L) IdeTimeout(d time.Duration)                                  // 空闲连接超时
    func (ll *L2L) Close() error                                                // 关闭
    func (ll *L2L) Transport(aaddr, baddr *Addr) (*L2LSwap, error)              // 建立连接
type L2LSwap struct {                                                     // L2L交换数据
    Verify  func(a, b net.Conn) (net.Conn, net.Conn, error)                     // 数据交换前对双方连接操作,可以现实验证之类
}
    func (lls *L2LSwap) Close() error                                           // 关闭
    func (lls *L2LSwap) ConnNum() int                                           // 当前连接数
    func (lls *L2LSwap) Swap() error                                            // 开始交换

Documentation

Index

Constants

View Source
const DefaultReadBufSize int = 4096 // 默认交换数据缓冲大小

Variables

This section is empty.

Functions

This section is empty.

Types

type Addr

type Addr struct {
	Network       string
	Local, Remote net.Addr // 本地,远程
}

Addr 地址包含本地,远程

type D2D

type D2D struct {
	TryConnTime time.Duration   // 尝试或发起连接时间,可能一方不在线,会一直尝试连接对方。(默认:1s)
	ReadBufSize int             // 交换数据缓冲大小
	Timeout     time.Duration   // 发起连接超时
	ErrorLog    *log.Logger     // 日志
	Context     context.Context // 上下文
	// contains filtered or unexported fields
}

D2D 内网开放端口,外网无法访问的情况下。内网使用D2D主动连接外网端口。以便外网发来数据转发到内网端口中去。

	-------------------------------------
 |     |  ←1  |   |  2→  |     |(1,A和B收到[D2D]发来连接)
 |A内网|  ←4  |D2D|  ←3  |B外网|(2,B然后向[D2D]回应数据,数据将转发到A内网。)
 |     |  5→  |   |  6→  |     |(3,A内网收到数据再发出数据,由[D2D]转发到B外网。)
	-------------------------------------

func (*D2D) Close

func (T *D2D) Close() error

Close 关闭D2D

error   错误

func (*D2D) IdeTimeout

func (T *D2D) IdeTimeout(d time.Duration)

空闲连接超时

func (*D2D) KeptIdeConn

func (T *D2D) KeptIdeConn(n int)

保持一方连接数量,以备快速互相连接。(默认:1)

func (*D2D) MaxConn

func (T *D2D) MaxConn(n int)

限制连接最大的数量。(默认:500)

func (*D2D) Transport

func (T *D2D) Transport(a, b *Addr) (*D2DSwap, error)

Transport 建立连接,支持协议类型:"tcp", "tcp4","tcp6", "unix", "unixpacket"。其它还没测试支持:"udp", "udp4", "udp6", "ip", "ip4", "ip6", "unixgram"

a, b *Addr  A,B方地址
*D2DSwap    数据交换
error       错误

func (*D2D) Verify added in v1.2.0

func (T *D2D) Verify(a func(net.Conn) bool, b func(net.Conn) bool)

Verify 连接第一时间完成,即验证可用后才送入池中。

a func(net.Conn) error 验证 b func(net.Conn) error 验证

type D2DSwap

type D2DSwap struct {
	Verify func(a, b net.Conn) (net.Conn, net.Conn, error) // 数据交换前对双方连接操作,可以现实验证之类
	// contains filtered or unexported fields
}

D2DSwap 数据交换

func (*D2DSwap) Close

func (T *D2DSwap) Close() error

Close 关闭数据交换 .Swap(),你还可以再次使用 .Swap() 启动。

error       错误

func (*D2DSwap) ConnNum

func (T *D2DSwap) ConnNum() int

ConnNum 当前正在转发的连接数量

int     实时连接数量

func (*D2DSwap) Swap

func (T *D2DSwap) Swap() error

Swap 开始数据交换,它是从连接池中读出空闲连接,进行双方交换数据。 如果你关闭了交换,只是临时关闭的。还可以再次调用Swap。 永远关闭需要调用 D2D.Close() 的关闭。

error       错误

type L2D

type L2D struct {
	ReadBufSize int           // 交换数据缓冲大小
	Timeout     time.Duration // TCP发起连接超时,udp远程读取超时(默认:60s)
	ErrorLog    *log.Logger   // 日志
	Context     context.Context
	// contains filtered or unexported fields
}

L2D 是在内网或公网都可以使用,配合D2D或L2L使用功能更自由。L2D功能主要是转发连接(端口转发)。

	-------------------------------------
 |     |  1→  |   |  2→  |     |(1,B收到A发来数据)
 |A端口|  ←4  |L2D|  ←3  |B端口|(2,然后向A回应数据)
 |     |  5→  |   |  6→  |     |(3,B然后再收到A数据)
	-------------------------------------

func (*L2D) Close

func (T *L2D) Close() error

Close 关闭L2D

error   错误

func (*L2D) MaxConn

func (T *L2D) MaxConn(n int)

限制连接最大的数量

func (*L2D) Transport

func (T *L2D) Transport(laddr, raddr *Addr) (*L2DSwap, error)

Transport 支持协议类型:"tcp", "tcp4","tcp6", "unix", "unixpacket", "udp", "udp4", "udp6", "ip", "ip4", "ip6", "unixgram"

laddr, raddr *Addr  转发IP,监听IP地址
*L2DSwap    交换数据
error       错误

func (*L2D) Verify added in v1.2.0

func (T *L2D) Verify(a func(net.Conn) bool, b func(net.Conn) bool)

Verify 连接第一时间完成

a func(net.Conn) error 验证 b func(net.Conn) error 验证

type L2DSwap

type L2DSwap struct {
	Verify func(lconn, rconn net.Conn) (net.Conn, net.Conn, error) // 数据交换前对双方连接操作,可以现实验证之类
	// contains filtered or unexported fields
}

L2DSwap 数据交换

func (*L2DSwap) Close

func (T *L2DSwap) Close() error

Close 关闭交换

error   错误

func (*L2DSwap) ConnNum

func (T *L2DSwap) ConnNum() int

ConnNum 当前正在转发的连接数量

int     实时连接数量

func (*L2DSwap) Swap

func (T *L2DSwap) Swap() error

Swap 开始数据交换,当有TCP/UDP请求发来的时候,将会转发连接。 如果你关闭了交换,只是临时关闭的。还可以再次调用Swap。 永远关闭需要调用 L2D.Close() 的关闭。

error       错误

type L2L

type L2L struct {
	ReadBufSize int         // 交换数据缓冲大小
	ErrorLog    *log.Logger // 日志
	// contains filtered or unexported fields
}

L2L 是在公网主机上面监听两个TCP端口,由两个内网客户端连接。 L2L使这两个连接进行交换数据,达成内网到内网通道。 注意:1)双方必须主动连接公网L2L。2)不支持UDP协议。

	------------------------------------
 |     |  →  |   |  ←  |     |(1,A和B同时连接[D2D],由[D2D]互相桥接A和B这两个连接)
 |A内网|  ←  |D2D|  ←  |B内网|(2,B 往 A 发送数据)
 |     |  →  |   |  →  |     |(3,A 往 B 发送数据)
	------------------------------------

func (*L2L) Close

func (T *L2L) Close() error

Close 关闭L2L

error   错误

func (*L2L) IdeTimeout

func (T *L2L) IdeTimeout(d time.Duration)

空闲连接超时

func (*L2L) KeptIdeConn

func (T *L2L) KeptIdeConn(n int)

保持一方连接数量,以备快速互相连接。(默认:1)

func (*L2L) MaxConn

func (T *L2L) MaxConn(n int)

限制连接最大的数量

func (*L2L) Transport

func (T *L2L) Transport(aaddr, baddr *Addr) (*L2LSwap, error)

Transport 支持协议类型:"tcp", "tcp4","tcp6", "unix" 或 "unixpacket".

aaddr, baddr *Addr  A&B监听地址
*L2LSwap    交换数据
error       错误

func (*L2L) Verify added in v1.2.0

func (T *L2L) Verify(a func(net.Conn) bool, b func(net.Conn) bool)

Verify 连接第一时间完成,即验证可用后才送入池中。

a func(net.Conn) error 验证 b func(net.Conn) error 验证

type L2LSwap

type L2LSwap struct {
	Verify func(a, b net.Conn) (net.Conn, net.Conn, error) // 数据交换前对双方连接操作,可以现实验证之类
	// contains filtered or unexported fields
}

func (*L2LSwap) Close

func (T *L2LSwap) Close() error

func (*L2LSwap) ConnNum

func (T *L2LSwap) ConnNum() int

ConnNum 当前正在转发的连接数量

int     实时连接数量

func (*L2LSwap) Swap

func (T *L2LSwap) Swap() error

Directories

Path Synopsis
cmd
d2d
l2d
l2l

Jump to

Keyboard shortcuts

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