Golang : Reverse IP address for reverse DNS lookup example
Problem:
You need to reverse a given IPv4 address into a DNS reverse record form to perform reverse DNS lookup or simply want to read an IP address backwards. How to do that?
Solution:
Break the given IP address into a slice and reverse the octets sequence with a for loop.
Edit: The previous solution used the sort
package. However, it will sort the IP during reverse sorting(which is working as intended) ... instead of just reversing.
10.106
to 106.10
and this will introduce hard to trace bug.
Before : 106.10.138.240
After : 240.138.106.10 <-- notice the position of 106 octet swapped with 10 octet
The solution below will just reverse the octets position and no sort.
Here you go!
package main
import (
"fmt"
"net"
"strings"
)
func ReverseIPAddress(ip net.IP) string {
if ip.To4() != nil {
// split into slice by dot .
addressSlice := strings.Split(ip.String(), ".")
reverseSlice := []string{}
for i := range addressSlice {
octet := addressSlice[len(addressSlice)-1-i]
reverseSlice = append(reverseSlice, octet)
}
// sanity check
//fmt.Println(reverseSlice)
return strings.Join(reverseSlice, ".")
} else {
panic("invalid IPv4 address")
}
}
func main() {
ipAddress := net.ParseIP("106.10.138.240")
fmt.Println("Before : ", ipAddress.To4())
reverseIpAddress := ReverseIPAddress(ipAddress)
fmt.Println("After : ", reverseIpAddress)
// convert to DNS reverse record form
reverseIpAddress = reverseIpAddress + ".in-addr.arpa"
fmt.Println("With in-addr.arpa : ", reverseIpAddress)
}
Output:
Before : 106.10.138.240
After : 240.138.10.106
With in-addr.arpa : 240.138.10.106.in-addr.arpa
References:
https://golang.org/pkg/sort/#StringSlice
http://unix.stackexchange.com/questions/132779/how-to-read-an-ip-address-backwards
See also : Golang : Check if IP address is version 4 or 6
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
+23.4k Golang : Create PDF file from HTML file
+14.2k Golang : Get current time from the Internet time server(ntp) example
+16.1k Golang : delete and modify XML file content
+4.7k Golang : Grab news article text and use NLP to get each paragraph's sentences
+9.1k Golang : Wait and sync.WaitGroup example
+14.3k Golang : invalid character ',' looking for beginning of value
+13.7k Golang : Get all local users and print out their home directory, description and group id
+18.3k Golang : Determine if directory is empty with os.File.Readdir() function
+13.5k Golang : Rename directory
+22.6k Golang : Upload to S3 with official aws-sdk-go package
+5.1k Golang : Get missing location after unmarshal binary and gob decode time.
+7.5k Golang : Another camera capture GUI application with GTK and OpenCV