natx

package
v0.0.0-...-a08ad04 Latest Latest
Warning

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

Go to latest
Published: Nov 5, 2024 License: AGPL-3.0 Imports: 7 Imported by: 0

Documentation

Overview

STUN 客户端。 实现 NAT 层级探测(STUN:Cone/Sym)和生存期探测(STUN:Live)的逻辑。

Index

Constants

This section is empty.

Variables

View Source
var (
	// UDP拨号错误
	ErrDialUDP = errors.New("dial to server udp failed")

	// 客户端UDP地址未探测
	ErrNotAddr = errors.New("client udp addr is empty")
)

Functions

This section is empty.

Types

type Client

type Client struct {
	LevCone chan NatLevel      // NAT 层级通知(STUN:Cone)
	LevSym  chan NatLevel      // NAT 层级通知(STUN:Sym)
	Live    chan time.Duration // NAT 生存期通知
	UDPeer  chan *net.UDPAddr  // 客户端UDP地址通知
	Tester  chan STUNTester    // STUN 测试类型
	// contains filtered or unexported fields
}

Client 作为客户端的Finder 其中conn为主监听地址,用于STUN:Cone|Sym通讯, 以及STUN:Live的旧地址(端口)使用。 注记: 将 STUN:Cone|Sym 的通知分开更安全。

func ListenUDP

func ListenUDP(ctx context.Context) (*Client, error)

ListenUDP 创建一个客户端UDP监听。 监听本地所有IP地址,采用系统自动分配的端口。 应用于本地受限节点。

func NewClient

func NewClient(conn *net.UDPConn) *Client

NewClient 新建一个Finder客户端。 @conn 为客户端UDP监听连接

func (*Client) Close

func (c *Client) Close()

Close 关闭客户端。

func (*Client) Dial

func (c *Client) Dial() error

Dial 向对端UDP服务器拨号。 在请求NAT探测服务,收到对端的ServInfo信息后开始。 注意: 外部应当先调用SetInfo()设置基本数据。

func (*Client) Dialled

func (c *Client) Dialled() bool

Dialled 是否已拨号成功。 已经获取公网地址是执行 STUN:Live 的前提条件。

func (*Client) LinkPeer

func (c *Client) LinkPeer(nat NatLevel, data []byte) *stun.Peer

LinkPeer 提取关联节点。 专用于与其它UDP节点打洞和通讯, 这需要在用户已经获知当前节点的NAT层级之后才能使用。 注: 使用最后一次 STUN:Cone 或 STUN:Sym 探测的端口。 也即:用户需要首先探知自己的公网UDP地址。 提示: 如果用户已知自己节点的NAT层级, 获取公网UDP地址可以仅由简单的 STUN:Sym 请求实现。

@nat 自身NAT层级 @data 附带数据,可选 @return 打洞关联节点

func (*Client) PubAddr

func (c *Client) PubAddr() *net.UDPAddr

PubAddr 获取公网UDP地址。

func (*Client) Serve

func (c *Client) Serve(ctx context.Context) *Client

Serve 启动本地监听&判断服务。

func (*Client) SetCmpAddr

func (c *Client) SetCmpAddr(addr *net.UDPAddr)

SetCmpAddr 设置对比地址 即之前 STUN:Cone 请求获得的地址。

func (*Client) SetInfo

func (c *Client) SetInfo(ip netip.Addr, serv *stun.ServInfo)

SetInfo 设置UDP基本信息。 包括: - 服务器UDP监听地址 - 服务器传递来的对称密钥 - 当前事务序列号 @ip 服务器端IP @serv 服务器传递过来的信息集

type ClientSN

type ClientSN = stun.ClientSN

ClientSN 客户端序列号引用

type NatLevel

type NatLevel = stun.NatLevel

NatLevel NAT 层级类型引用

type Rnd16

type Rnd16 = stun.Rnd16

16字节随机序列引用

type STUNTester

type STUNTester int

STUNTester NAT测试类型

const (
	STUN_CONE STUNTester = 1 + iota // STUN:Cone
	STUN_SYM                        // STUN:Sym
	STUN_LIVE                       // STUN:Live
)

Jump to

Keyboard shortcuts

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