mirror of
https://github.com/ergochat/ergo.git
synced 2024-12-21 10:12:53 +01:00
84e3b5d77b
This didn't work correctly for IPv6 or custom nets. /UNDLINE IP can temporarily be used to reset the throttle.
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
|
|
}
|