mirror of
				https://github.com/coredns/coredns.git
				synced 2025-11-04 03:03:14 -05:00 
			
		
		
		
	
		
			
	
	
		
			41 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
		
		
			
		
	
	
			41 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| 
								 | 
							
								package dnsutil
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								import "strings"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// ExtractAddressFromReverse turns a standard PTR reverse record name
							 | 
						||
| 
								 | 
							
								// into an IP address. This works for ipv4 or ipv6.
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								// 54.119.58.176.in-addr.arpa. becomes 176.58.119.54. If the conversion
							 | 
						||
| 
								 | 
							
								// failes the empty string is returned.
							 | 
						||
| 
								 | 
							
								func ExtractAddressFromReverse(reverseName string) string {
							 | 
						||
| 
								 | 
							
									search := ""
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									switch {
							 | 
						||
| 
								 | 
							
									case strings.HasSuffix(reverseName, v4arpaSuffix):
							 | 
						||
| 
								 | 
							
										search = strings.TrimSuffix(reverseName, v4arpaSuffix)
							 | 
						||
| 
								 | 
							
									case strings.HasSuffix(reverseName, v6arpaSuffix):
							 | 
						||
| 
								 | 
							
										search = strings.TrimSuffix(reverseName, v6arpaSuffix)
							 | 
						||
| 
								 | 
							
									default:
							 | 
						||
| 
								 | 
							
										return ""
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									// Reverse the segments and then combine them.
							 | 
						||
| 
								 | 
							
									segments := reverse(strings.Split(search, "."))
							 | 
						||
| 
								 | 
							
									return strings.Join(segments, ".")
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								func reverse(slice []string) []string {
							 | 
						||
| 
								 | 
							
									for i := 0; i < len(slice)/2; i++ {
							 | 
						||
| 
								 | 
							
										j := len(slice) - i - 1
							 | 
						||
| 
								 | 
							
										slice[i], slice[j] = slice[j], slice[i]
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									return slice
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								const (
							 | 
						||
| 
								 | 
							
									// v4arpaSuffix is the reverse tree suffix for v4 IP addresses.
							 | 
						||
| 
								 | 
							
									v4arpaSuffix = ".in-addr.arpa."
							 | 
						||
| 
								 | 
							
									// v6arpaSuffix is the reverse tree suffix for v6 IP addresses.
							 | 
						||
| 
								 | 
							
									v6arpaSuffix = ".ip6.arpa."
							 | 
						||
| 
								 | 
							
								)
							 |