ip

package
v0.0.0-...-c34bea4 Latest Latest
Warning

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

Go to latest
Published: May 20, 2022 License: Apache-2.0 Imports: 7 Imported by: 0

Documentation

Overview

Package ip is a library for performing manipulations on IPv4 and IPv6 addresses and CIDR prefixes.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func CoalesceCIDRs

func CoalesceCIDRs(cidrs []*net.IPNet) ([]*net.IPNet, []*net.IPNet)

CoalesceCIDRs transforms the provided list of CIDRs into the most-minimal equivalent set of IPv4 and IPv6 CIDRs. It removes CIDRs that are subnets of other CIDRs in the list, and groups together CIDRs that have the same mask size into a CIDR of the same mask size provided that they share the same number of most significant mask-size bits.

Note: this algorithm was ported from the Python library netaddr. https://github.com/drkjam/netaddr .

func CountIPsInCIDR

func CountIPsInCIDR(ipnet *net.IPNet) *big.Int

CountIPsInCIDR takes a RFC4632/RFC4291-formatted IPv4/IPv6 CIDR and determines how many IP addresses reside within that CIDR. The first and the last (base and broadcast) IPs are excluded.

Returns 0 if the input CIDR cannot be parsed.

func GetCIDRPrefixesFromIPs

func GetCIDRPrefixesFromIPs(ips []net.IP) []*net.IPNet

GetCIDRPrefixesFromIPs returns all of the ips as a slice of *net.IPNet.

func GetIPAtIndex

func GetIPAtIndex(ipNet net.IPNet, index int64) net.IP

GetIPAtIndex get the IP by index in the range of ipNet. The index is start with 0.

func GetIPFromListByFamily

func GetIPFromListByFamily(ipList []net.IP, v4Family bool) net.IP

GetIPFromListByFamily returns a single IP address of the provided family from a list of ip addresses.

func GetNextIP

func GetNextIP(ip net.IP) net.IP

GetNextIP returns the next IP from the given IP address. If the given IP is the last IP of a v4 or v6 range, the same IP is returned.

func IPToPrefix

func IPToPrefix(ip net.IP) *net.IPNet

IPToPrefix returns the corresponding IPNet for the given IP.

func IsExcluded

func IsExcluded(excludeList []net.IP, ip net.IP) bool

IsExcluded returns whether a given IP is must be excluded due to coming from blacklisted device.

func IsIPv4

func IsIPv4(ip net.IP) bool

IsIPv4 returns true if the given IP is an IPv4

func IsIPv6

func IsIPv6(ip net.IP) bool

IsIPv6 returns if netIP is IPv6.

func IsPublicAddr

func IsPublicAddr(ip net.IP) bool

IsPublicAddr returns whether a given global IP is from a public range.

func KeepUniqueIPs

func KeepUniqueIPs(ips []net.IP) []net.IP

KeepUniqueIPs transforms the provided multiset of IPs into a single set, lexicographically sorted via a byte-wise comparison of the IP slices (i.e. IPv4 addresses show up before IPv6). The slice is manipulated in-place destructively.

1- Sort the slice by comparing the IPs as bytes 2- For every unseen unique IP in the sorted slice, move it to the end of the return slice. Note that the slice is always large enough and, because it is sorted, we will not overwrite a valid element with another. To overwrite an element i with j, i must have come before j AND we decided it was a duplicate of the element at i-1.

func ParseCIDRs

func ParseCIDRs(cidrs []string) (valid []*net.IPNet, invalid []string)

ParseCIDRs fetches all CIDRs referred to by the specified slice and returns them as regular golang CIDR objects.

func ParseScope

func ParseScope(scope string) (int, error)

func PrefixCeil

func PrefixCeil(numIPs int, multiple int) int

PrefixCeil converts the given number of IPs to the minimum number of prefixes needed to host those IPs. multiple indicates the number of IPs in a single prefix.

func PrefixToIps

func PrefixToIps(prefixCidr string) ([]string, error)

PrefixToIps converts the given prefix to an array containing all IPs in the prefix / CIDR block.

func RemoveCIDRs

func RemoveCIDRs(allowCIDRs, removeCIDRs []*net.IPNet) []*net.IPNet

RemoveCIDRs removes the specified CIDRs from another set of CIDRs. If a CIDR to remove is not contained within the CIDR, the CIDR to remove is ignored. A slice of CIDRs is returned which contains the set of CIDRs provided minus the set of CIDRs which were removed. Both input slices may be modified by calling this function.

func SortIPList

func SortIPList(ipList []net.IP)

SortIPList sorts the provided net.IP slice in place.

func SortedIPListsAreEqual

func SortedIPListsAreEqual(a, b []net.IP) bool

SortedIPListsAreEqual compares two lists of sorted IPs. If any differ it returns false.

func UnsortedIPListsAreEqual

func UnsortedIPListsAreEqual(ipList1, ipList2 []net.IP) bool

UnsortedIPListsAreEqual returns true if the list of net.IP provided is same without considering the order of the IPs in the list. The function will first attempt to sort both the IP lists and then validate equality for sorted lists.

Types

type NetsByMask

type NetsByMask []*net.IPNet

NetsByMask is used to sort a list of IP networks by the size of their masks. Implements sort.Interface.

func (NetsByMask) Len

func (s NetsByMask) Len() int

func (NetsByMask) Less

func (s NetsByMask) Less(i, j int) bool

func (NetsByMask) Swap

func (s NetsByMask) Swap(i, j int)

type NetsByRange

type NetsByRange []*netWithRange

NetsByRange is used to sort a list of ranges, first by their last IPs, then by their first IPs Implements sort.Interface.

func (NetsByRange) Len

func (s NetsByRange) Len() int

func (NetsByRange) Less

func (s NetsByRange) Less(i, j int) bool

func (NetsByRange) Swap

func (s NetsByRange) Swap(i, j int)

Jump to

Keyboard shortcuts

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