mirror of
https://github.com/ergochat/ergo.git
synced 2024-12-20 17:52:36 +01:00
34 lines
823 B
Go
34 lines
823 B
Go
|
// Copyright 2020 Shivaram Lingamneni <slingamn@cs.stanford.edu>
|
||
|
// Released under the MIT license
|
||
|
|
||
|
package flatip
|
||
|
|
||
|
// begin ad-hoc utilities
|
||
|
|
||
|
// ParseToNormalizedNet attempts to interpret a string either as an IP
|
||
|
// network in CIDR notation, returning an IPNet, or as an IP address,
|
||
|
// returning an IPNet that contains only that address.
|
||
|
func ParseToNormalizedNet(netstr string) (ipnet IPNet, err error) {
|
||
|
_, ipnet, err = ParseCIDR(netstr)
|
||
|
if err == nil {
|
||
|
return
|
||
|
}
|
||
|
ip, err := ParseIP(netstr)
|
||
|
if err == nil {
|
||
|
ipnet.IP = ip
|
||
|
ipnet.PrefixLen = 128
|
||
|
}
|
||
|
return
|
||
|
}
|
||
|
|
||
|
// IPInNets is a convenience function for testing whether an IP is contained
|
||
|
// in any member of a slice of IPNet's.
|
||
|
func IPInNets(addr IP, nets []IPNet) bool {
|
||
|
for _, net := range nets {
|
||
|
if net.Contains(addr) {
|
||
|
return true
|
||
|
}
|
||
|
}
|
||
|
return false
|
||
|
}
|