...
1
2
3
4
5
6
7
8
9
10 package net
11
12 import "net"
13
14
15
16
17 func Reverseaddr(addr string) (arpa string, err error) {
18 ip := net.ParseIP(addr)
19 if ip == nil {
20 return "", &net.DNSError{Err: "unrecognized address", Name: addr}
21 }
22 if ip.To4() != nil {
23 return uitoa(uint(ip[15])) + "." + uitoa(uint(ip[14])) + "." + uitoa(uint(ip[13])) + "." + uitoa(uint(ip[12])) + ".in-addr.arpa.", nil
24 }
25
26 buf := make([]byte, 0, len(ip)*4+len("ip6.arpa."))
27
28 for i := len(ip) - 1; i >= 0; i-- {
29 v := ip[i]
30 buf = append(buf, hexDigit[v&0xF],
31 '.',
32 hexDigit[v>>4],
33 '.')
34 }
35
36 buf = append(buf, "ip6.arpa."...)
37 return string(buf), nil
38 }
39
40
41 func uitoa(val uint) string {
42 if val == 0 {
43 return "0"
44 }
45 var buf [20]byte
46 i := len(buf) - 1
47 for val >= 10 {
48 q := val / 10
49 buf[i] = byte('0' + val - q*10)
50 i--
51 val = q
52 }
53
54 buf[i] = byte('0' + val)
55 return string(buf[i:])
56 }
57
58 const hexDigit = "0123456789abcdef"
59
View as plain text