mirror of
https://github.com/DJSundog/wg-portal.git
synced 2025-01-11 10:12:42 -05:00
38 lines
787 B
Go
38 lines
787 B
Go
package common
|
|
|
|
import "net"
|
|
|
|
// BroadcastAddr returns the last address in the given network, or the broadcast address.
|
|
func BroadcastAddr(n *net.IPNet) net.IP {
|
|
// The golang net package doesn't make it easy to calculate the broadcast address. :(
|
|
var broadcast net.IP
|
|
if len(n.IP) == 4 {
|
|
broadcast = net.ParseIP("0.0.0.0").To4()
|
|
} else {
|
|
broadcast = net.ParseIP("::")
|
|
}
|
|
for i := 0; i < len(n.IP); i++ {
|
|
broadcast[i] = n.IP[i] | ^n.Mask[i]
|
|
}
|
|
return broadcast
|
|
}
|
|
|
|
// http://play.golang.org/p/m8TNTtygK0
|
|
func IncreaseIP(ip net.IP) {
|
|
for j := len(ip) - 1; j >= 0; j-- {
|
|
ip[j]++
|
|
if ip[j] > 0 {
|
|
break
|
|
}
|
|
}
|
|
}
|
|
|
|
// IsIPv6 check if given ip is IPv6
|
|
func IsIPv6(address string) bool {
|
|
ip := net.ParseIP(address)
|
|
if ip == nil {
|
|
return false
|
|
}
|
|
return ip.To4() == nil
|
|
}
|