stun

package
v0.2.0 Latest Latest
Warning

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

Go to latest
Published: May 27, 2021 License: Apache-2.0 Imports: 13 Imported by: 0

Documentation

Overview

Package stun is a STUN (RFC 3489 and RFC 5389) client implementation in golang.

It is extremely easy to use -- just one line of code.

nat, host, err := stun.NewClient().Discover()

More details please go to `main.go`.

Index

Constants

View Source
const (
	DefaultServerAddr   = "stun.ekiga.net:3478"
	DefaultSoftwareName = "StunClient"
)

Default server address and client name.

Variables

This section is empty.

Functions

This section is empty.

Types

type Client

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

Client is a STUN client, which can be set STUN server address and is used to discover NAT type.

func NewClient

func NewClient(config *ClientConfig) *Client

NewClient returns a client without network connection. The network connection will be build when calling Discover function.

func NewClientWithConnection

func NewClientWithConnection(conn net.PacketConn, config *ClientConfig) *Client

NewClientWithConnection returns a client which uses the given connection. Please note the connection should be acquired via net.Listen* method.

func (*Client) Discover

func (c *Client) Discover(serverAddr string) (NATType, *Host, error)

func (*Client) DiscoverAddr

func (c *Client) DiscoverAddr(serverAddr *net.UDPAddr) (NATType, *Host, error)

DiscoverAddr contacts the STUN server and gets the response of NAT type, host for UDP punching.

func (*Client) Keepalive

func (c *Client) Keepalive(serverAddr string) (*Host, error)

func (*Client) KeepaliveAddr

func (c *Client) KeepaliveAddr(serverAddr *net.UDPAddr) (*Host, error)

Keepalive sends and receives a bind request, which ensures the mapping stays open Only applicable when client was created with a connection.

func (*Client) SetSoftwareName

func (c *Client) SetSoftwareName(name string)

SetSoftwareName allows user to set the name of the software, which is used for logging purpose (NOT used in the current implementation).

func (*Client) SetVVerbose

func (c *Client) SetVVerbose(v bool)

SetVVerbose sets the client to be in the double verbose mode, which prints information and packet in the discover process.

func (*Client) SetVerbose

func (c *Client) SetVerbose(v bool)

SetVerbose sets the client to be in the verbose mode, which prints information in the discover process.

type ClientConfig

type ClientConfig struct {
	DisableSoftware    bool
	DisableFingerprint bool
}

func NewClientConfig

func NewClientConfig() *ClientConfig

type Host

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

Host defines the network address including address family, IP address and port.

func (*Host) Family

func (h *Host) Family() uint16

Family returns the family type of a host (IPv4 or IPv6).

func (*Host) IP

func (h *Host) IP() string

IP returns the internet protocol address of the host.

func (*Host) Port

func (h *Host) Port() uint16

Port returns the port number of the host.

func (*Host) String

func (h *Host) String() string

String returns the string representation of the host address.

func (*Host) TransportAddr

func (h *Host) TransportAddr() string

TransportAddr returns the transport layer address of the host.

type Logger

type Logger struct {
	log.Logger
	// contains filtered or unexported fields
}

Logger is a simple logger specified for this STUN client.

func NewLogger

func NewLogger() *Logger

NewLogger creates a default logger.

func (*Logger) Debug

func (l *Logger) Debug(v ...interface{})

Debug outputs the log in the format of log.Print.

func (*Logger) Debugf

func (l *Logger) Debugf(format string, v ...interface{})

Debugf outputs the log in the format of log.Printf.

func (*Logger) Debugln

func (l *Logger) Debugln(v ...interface{})

Debugln outputs the log in the format of log.Println.

func (*Logger) Info

func (l *Logger) Info(v ...interface{})

Info outputs the log in the format of log.Print.

func (*Logger) Infof

func (l *Logger) Infof(format string, v ...interface{})

Infof outputs the log in the format of log.Printf.

func (*Logger) Infoln

func (l *Logger) Infoln(v ...interface{})

Infoln outputs the log in the format of log.Println.

func (*Logger) SetDebug

func (l *Logger) SetDebug(v bool)

SetDebug sets the logger running in debug mode or not.

func (*Logger) SetInfo

func (l *Logger) SetInfo(v bool)

SetInfo sets the logger running in info mode or not.

type NATType

type NATType int

NATType is the type of NAT described by int.

const (
	NATError NATType = iota
	NATUnknown
	NATNone
	NATBlocked
	NATFull
	NATSymmetric
	NATRestricted
	NATPortRestricted
	SymmetricUDPFirewall

	// Deprecated spellings of these constants
	NATSymetric             = NATSymmetric
	NATSymetricUDPFirewall  = SymmetricUDPFirewall
	NATSymmetricUDPFirewall = SymmetricUDPFirewall
)

NAT types.

func (NATType) String

func (nat NATType) String() string

Jump to

Keyboard shortcuts

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