Skip to content

Instantly share code, notes, and snippets.

@ahmetozer
Created May 6, 2024 21:45
Show Gist options
  • Save ahmetozer/945ca1ce4c116e8975541161af0ce3f9 to your computer and use it in GitHub Desktop.
Save ahmetozer/945ca1ce4c116e8975541161af0ce3f9 to your computer and use it in GitHub Desktop.
Get last IP address of network at golang
package main
import (
"log"
"net"
)
func main() {
// convert string to IPNet struct
ip1, net1, _ := net.ParseCIDR("fd34:0135:0123::2/120")
ip2, net2, _ := net.ParseCIDR("10.0.1.2/20")
last1 := lastIP(net1)
log.Printf("ip1: %s, net1: %d, last1: %s", ip1, net1.Mask, last1)
last2 := lastIP(net2)
log.Printf("ip2: %s, net2: %d, last2: %s", ip2, net2.Mask, last2)
}
func lastIP(n *net.IPNet) net.IP {
lastIp, lastMask, _ := net.ParseCIDR("fd::/128")
size := 16
if n.IP.To4() != nil {
lastIp, lastMask, _ = net.ParseCIDR("10.0.0.1/32")
log.Println(len(lastIp))
size = 4
}
for i := 0; i < size; i++ {
lastIp[i] = (n.IP[i] & n.Mask[i]) | (n.Mask[i] ^ lastMask.Mask[i])
}
return lastIp[:size]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment