Golang : How to check if IP address is in range
For security purpose, sometimes a server can only accept connection from clients that are trusted and of certain IP addresses. This tutorial will demonstrate how to use bytes.Compare() function to check to see if an incoming IP address is within the trusted range.
checkip.go
package main
import (
"net"
"bytes"
"fmt"
)
var (
// specify the range of trusted IP addresses
start = net.ParseIP("198.162.1.100")
end = net.ParseIP("198.162.1.199")
)
func checkIP(ip string) bool {
//sanity check
input := net.ParseIP(ip)
if input.To4() == nil {
fmt.Printf("%v is not a valid IPv4 address\n", input)
return false
}
if bytes.Compare(input, start) >= 0 && bytes.Compare(input, end) <= 0 {
fmt.Printf("%v is between %v and %v\n", input, start, end)
return true
}
fmt.Printf("%v is NOT between %v and %v\n", input, start, end)
return false
}
func main() {
fmt.Println(checkIP("216.14.49.185"))
fmt.Println(checkIP("1.2.3.4"))
fmt.Println(checkIP("198.162.1.102"))
fmt.Println(checkIP("1::16"))
}
Output :
216.14.49.185 is NOT between 198.162.1.100 and 198.162.1.199
false
1.2.3.4 is NOT between 198.162.1.100 and 198.162.1.199
false
198.162.1.102 is between 198.162.1.100 and 198.162.1.199
true
1::16 is not an IPv4 address
false
Reference :
By Adam Ng
IF you gain some knowledge or the information here solved your programming problem. Please consider donating to the less fortunate or some charities that you like. Apart from donation, planting trees, volunteering or reducing your carbon footprint will be great too.
Advertisement
Tutorials
+15.5k Golang : How to login and logout with JWT example
+11.5k How to tell if a binary(executable) file or web application is built with Golang?
+15k Golang : Accurate and reliable decimal calculations
+33.7k Golang : Proper way to set function argument default value
+5.9k Golang : Measure execution time for a function
+10.5k Android Studio : Checkbox for user to select options example
+6.6k Golang : Find the longest line of text example
+16.7k Golang : Fix cannot convert buffer (type *bytes.Buffer) to type string error
+28.3k Get file path of temporary file in Go
+10.1k Golang : Convert file unix timestamp to UTC time example
+10.9k Golang : Read until certain character to break for loop
+5.2k Golang : What is StructTag and how to get StructTag's value?