Documentation
¶
Index ¶
Constants ¶
const CacheTime = time.Second * 15
CacheTime is the time a mapping will cache an external address for
const MappingDuration = time.Second * 60
MappingDuration is a default port mapping duration. Port mappings are renewed every (MappingDuration / 3)
Variables ¶
var ( //ErrShouldHaveIPAddress ... ErrShouldHaveIPAddress = errors.New("error machine should have an assigned IP address") //ErrNoNATDeviceFound ... ErrNoNATDeviceFound = errors.New("error no NAT devices found") //ErrCreatingHost ... ErrCreatingHost = errors.New("error creating host") //ErrCantUpdateBroadcastAddress ... ErrCantUpdateBroadcastAddress = errors.New("error cant update broadcast address") //ErrCantConnectToNATDiscoverAddress ... ErrCantConnectToNATDiscoverAddress = errors.New("error cant connect to NAT discover address") // ErrNoMapping signals no mapping exists for an address ErrNoMapping = errors.New("mapping not established") // ErrCantGetExternalAddress ... ErrCantGetExternalAddress = errors.New("error cant get external address") )
Functions ¶
Types ¶
type Host ¶
type Host struct {
// contains filtered or unexported fields
}
func (*Host) GetBroadcastAddrInfo ¶
func (*Host) GetInternalPort ¶
func (*Host) GetMapping ¶ added in v1.0.1
func (*Host) GetNATDevice ¶ added in v1.0.1
func (*Host) GetNATType ¶
func (h *Host) GetNATType() network.Reachability
type Mapping ¶ added in v1.0.0
type Mapping interface {
// NAT returns the NAT object this Mapping belongs to.
NAT() *NAT
// Protocol returns the protocol of this port mapping. This is either
// "tcp" or "udp" as no other protocols are likely to be NAT-supported.
Protocol() string
// InternalPort returns the internal device port. Mapping will continue to
// try to map InternalPort() to an external facing port.
InternalPort() int
// ExternalPort returns the external facing port. If the mapping is not
// established, port will be 0
ExternalPort() int
// ExternalAddr returns the external facing address. If the mapping is not
// established, addr will be nil, and and ErrNoMapping will be returned.
ExternalAddr() (addr net.Addr, err error)
// Close closes the port mapping
Close() error
}
Mapping represents a port mapping in a NAT.
type NAT ¶ added in v1.0.0
type NAT struct {
// contains filtered or unexported fields
}
NAT is an object that manages address port mappings in NATs (Network Address Translators). It is a long-running service that will periodically renew port mappings, and keep an up-to-date list of all the external addresses.
func DiscoverNAT ¶ added in v1.0.0
DiscoverNAT looks for a NAT device in the network and returns an object that can manage port mappings.
func (*NAT) GetInternalAddress ¶ added in v1.0.0
func (*NAT) NewMapping ¶ added in v1.0.0
NewMapping attempts to construct a mapping on protocol and internal port It will also periodically renew the mapping until the returned Mapping -- or its parent NAT -- is Closed.
May not succeed, and mappings may change over time; NAT devices may not respect our port requests, and even lie. Clients should not store the mapped results, but rather always poll our object for the latest mappings.