func RevLookupName(ip net.IP) string {
	if x := ip.To4(); x != nil {
		return fmt.Sprintf("%d.%d.%d.%d.in-addr.arpa.", x[3], x[2], x[1], x[0])
	}

	if x := ip.To16(); x != nil {
		return fmt.Sprintf(
			"%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.ip6.arpa.",
			x[15]&15,
			x[15]>>4,
			x[14]&15,
			x[14]>>4,
			x[13]&15,
			x[13]>>4,
			x[12]&15,
			x[12]>>4,

			x[11]&15,
			x[11]>>4,
			x[10]&15,
			x[10]>>4,
			x[9]&15,
			x[9]>>4,
			x[8]&15,
			x[8]>>4,

			x[7]&15,
			x[7]>>4,
			x[6]&15,
			x[6]>>4,
			x[5]&15,
			x[5]>>4,
			x[4]&15,
			x[4]>>4,

			x[3]&15,
			x[3]>>4,
			x[2]&15,
			x[2]>>4,
			x[1]&15,
			x[1]>>4,
			x[0]&15,
			x[0]>>4,
		)
	}

	return ""
}
// RevLookupName returns a domain name for the DNS reverse lookup or "" if ip
// is not a valid IP address.
RevLookupName returns a domain name for the DNS reverse lookup or "" if ip
is not a valid IP address.
// RevLookupName returns a domain name for the DNS reverse lookup or " " if ip // is not a valid IP address .
func RevLookupName(ip net.IP) string {
	if x := ip.To4(); x != nil {
		return fmt.Sprintf("%d.%d.%d.%d.in-addr.arpa.", x[3], x[2], x[1], x[0])
	}
	if x := ip.To16(); x != nil {
		return fmt.Sprintf(
			"%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.ip6.arpa.",
			x[15]&15,
			x[15]>>4,
			x[14]&15,
			x[14]>>4,
			x[13]&15,
			x[13]>>4,
			x[12]&15,
			x[12]>>4,
			x[11]&15,
			x[11]>>4,
			x[10]&15,
			x[10]>>4,
			x[9]&15,
			x[9]>>4,
			x[8]&15,
			x[8]>>4,
			x[7]&15,
			x[7]>>4,
			x[6]&15,
			x[6]>>4,
			x[5]&15,
			x[5]>>4,
			x[4]&15,
			x[4]>>4,
			x[3]&15,
			x[3]>>4,
			x[2]&15,
			x[2]>>4,
			x[1]&15,
			x[1]>>4,
			x[0]&15,
			x[0]>>4,
		)
	}
	return ""
}
func RevLookupName ( ip net . IP ) string { if x := ip . To4 ( ) ; x != nil { return fmt . Sprintf ( " " , x [ 3 ] , x [ 2 ] , x [ 1 ] , x [ 0 ] ) } if x := ip . To16 ( ) ; x != nil { return fmt . Sprintf ( " " , x [ 15 ] & 15 , x [ 15 ] >> 4 , x [ 14 ] & 15 , x [ 14 ] >> 4 , x [ 13 ] & 15 , x [ 13 ] >> 4 , x [ 12 ] & 15 , x [ 12 ] >> 4 , x [ 11 ] & 15 , x [ 11 ] >> 4 , x [ 10 ] & 15 , x [ 10 ] >> 4 , x [ 9 ] & 15 , x [ 9 ] >> 4 , x [ 8 ] & 15 , x [ 8 ] >> 4 , x [ 7 ] & 15 , x [ 7 ] >> 4 , x [ 6 ] & 15 , x [ 6 ] >> 4 , x [ 5 ] & 15 , x [ 5 ] >> 4 , x [ 4 ] & 15 , x [ 4 ] >> 4 , x [ 3 ] & 15 , x [ 3 ] >> 4 , x [ 2 ] & 15 , x [ 2 ] >> 4 , x [ 1 ] & 15 , x [ 1 ] >> 4 , x [ 0 ] & 15 , x [ 0 ] >> 4 , ) } return " " }
RevLookupName returns a domain name for the DNS reverse lookup or "" if ip
is not a valid IP address.
RevLookupName returns a domain name for the DNS reverse lookup or " " if ip is not a valid IP address .