Package netutil contains extensions to the net package.




    This section is empty.


    This section is empty.


    func AddrIP

    func AddrIP(addr net.Addr) net.IP

      AddrIP gets the IP address contained in addr. It returns nil if no address is present.

      func CheckRelayIP

      func CheckRelayIP(sender, addr net.IP) error

        CheckRelayIP reports whether an IP relayed from the given sender IP is a valid connection target.

        There are four rules:

        - Special network addresses are never valid.
        - Loopback addresses are OK if relayed by a loopback host.
        - LAN addresses are OK if relayed by a LAN host.
        - All other addresses are always acceptable.

        func IsLAN

        func IsLAN(ip net.IP) bool

          IsLAN reports whether an IP is a local network address.

          func IsSpecialNetwork

          func IsSpecialNetwork(ip net.IP) bool

            IsSpecialNetwork reports whether an IP is located in a special-use network range This includes broadcast, multicast and documentation addresses.

            func IsTemporaryError

            func IsTemporaryError(err error) bool

              IsTemporaryError checks whether the given error should be considered temporary.

              func IsTimeout

              func IsTimeout(err error) bool

                IsTimeout checks whether the given error is a timeout.

                func SameNet

                func SameNet(bits uint, ip, other net.IP) bool

                  SameNet reports whether two IP addresses have an equal prefix of the given bit length.



                  type DistinctNetSet

                  type DistinctNetSet struct {
                  	Subnet uint // number of common prefix bits
                  	Limit  uint // maximum number of IPs in each subnet
                  	// contains filtered or unexported fields

                    DistinctNetSet tracks IPs, ensuring that at most N of them fall into the same network range.

                    func (*DistinctNetSet) Add

                    func (s *DistinctNetSet) Add(ip net.IP) bool

                      Add adds an IP address to the set. It returns false (and doesn't add the IP) if the number of existing IPs in the defined range exceeds the limit.

                      func (DistinctNetSet) Contains

                      func (s DistinctNetSet) Contains(ip net.IP) bool

                        Contains whether the given IP is contained in the set.

                        func (DistinctNetSet) Len

                        func (s DistinctNetSet) Len() int

                          Len returns the number of tracked IPs.

                          func (*DistinctNetSet) Remove

                          func (s *DistinctNetSet) Remove(ip net.IP)

                            Remove removes an IP from the set.

                            func (DistinctNetSet) String

                            func (s DistinctNetSet) String() string

                              String implements fmt.Stringer

                              type IPTracker

                              type IPTracker struct {
                              	// contains filtered or unexported fields

                                IPTracker predicts the external endpoint, i.e. IP address and port, of the local host based on statements made by other hosts.

                                func NewIPTracker

                                func NewIPTracker(window, contactWindow time.Duration, minStatements int) *IPTracker

                                  NewIPTracker creates an IP tracker.

                                  The window parameters configure the amount of past network events which are kept. The minStatements parameter enforces a minimum number of statements which must be recorded before any prediction is made. Higher values for these parameters decrease 'flapping' of predictions as network conditions change. Window duration values should typically be in the range of minutes.

                                  func (*IPTracker) AddContact

                                  func (it *IPTracker) AddContact(host string)

                                    AddContact records that a packet containing our endpoint information has been sent to a certain host.

                                    func (*IPTracker) AddStatement

                                    func (it *IPTracker) AddStatement(host, endpoint string)

                                      AddStatement records that a certain host thinks our external endpoint is the one given.

                                      func (*IPTracker) PredictEndpoint

                                      func (it *IPTracker) PredictEndpoint() string

                                        PredictEndpoint returns the current prediction of the external endpoint.

                                        func (*IPTracker) PredictFullConeNAT

                                        func (it *IPTracker) PredictFullConeNAT() bool

                                          PredictFullConeNAT checks whether the local host is behind full cone NAT. It predicts by checking whether any statement has been received from a node we didn't contact before the statement was made.

                                          type Netlist

                                          type Netlist []net.IPNet

                                            Netlist is a list of IP networks.

                                            func ParseNetlist

                                            func ParseNetlist(s string) (*Netlist, error)

                                              ParseNetlist parses a comma-separated list of CIDR masks. Whitespace and extra commas are ignored.

                                              func (*Netlist) Add

                                              func (l *Netlist) Add(cidr string)

                                                Add parses a CIDR mask and appends it to the list. It panics for invalid masks and is intended to be used for setting up static lists.

                                                func (*Netlist) Contains

                                                func (l *Netlist) Contains(ip net.IP) bool

                                                  Contains reports whether the given IP is contained in the list.

                                                  func (Netlist) MarshalTOML

                                                  func (l Netlist) MarshalTOML() interface{}

                                                    MarshalTOML implements toml.MarshalerRec.

                                                    func (*Netlist) UnmarshalTOML

                                                    func (l *Netlist) UnmarshalTOML(fn func(interface{}) error) error

                                                      UnmarshalTOML implements toml.UnmarshalerRec.