Determining if an IP address falls within a specified range is a common requirement in networking applications. In Go/GoLang, this can be achieved efficiently using the inherent numeric representation of IP addresses.
To represent IP addresses, Go utilizes bigendian byte slices, providing an expedient method for comparison using bytes.Compare. This approach eliminates the need for string parsing or complex regular expressions.
Consider an IP range defined as 216.14.49.184 to 216.14.49.191. To validate if an input IP address, such as 216.14.49.185, belongs to this range, we can leverage the following code:
package main import ( "bytes" "fmt" "net" ) var ( ip1 = net.ParseIP("216.14.49.184") ip2 = net.ParseIP("216.14.49.191") ) func check(ip string) bool { trial := net.ParseIP(ip) if trial.To4() == nil { fmt.Printf("%v is not an IPv4 address\n", trial) return false } if bytes.Compare(trial, ip1) >= 0 && bytes.Compare(trial, ip2) <= 0 { fmt.Printf("%v is between %v and %v\n", trial, ip1, ip2) return true } fmt.Printf("%v is NOT between %v and %v\n", trial, ip1, ip2) return false } func main() { check("1.2.3.4") check("216.14.49.185") check("1::16") }
This script demonstrates the efficiency of this approach, validating and classifying IP addresses with ease:
1.2.3.4 is NOT between 216.14.49.184 and 216.14.49.191 216.14.49.185 is between 216.14.49.184 and 216.14.49.191 1::16 is not an IPv4 address
In conclusion, this method provides a streamlined and efficient means of validating IP addresses against a specified range in Go/GoLang, an invaluable tool for networking applications.
The above is the detailed content of How to Efficiently Validate IP Ranges in Go/GoLang?. For more information, please follow other related articles on the PHP Chinese website!