summaryrefslogtreecommitdiff
path: root/DomainDig/ReverseDNSService.swift
blob: 3b212a86e516d47069fbb29e0f18a5b5a86285c6 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import Foundation

struct ReverseDNSService {
    static func lookup(ip: String, resolverURLString: String) async -> ServiceResult<String> {
        let octets = ip.split(separator: ".")
        guard octets.count == 4 else {
            return .error("Invalid IPv4 address")
        }

        let reversed = octets.reversed().joined(separator: ".")
        let ptrDomain = "\(reversed).in-addr.arpa"

        do {
            let records = try await DNSLookupService.lookup(
                domain: ptrDomain,
                recordType: .PTR,
                resolverURLString: resolverURLString
            )
            if let record = records.first?.value {
                return .success(record)
            }
            return .empty("No PTR record found")
        } catch {
            return .error(error.localizedDescription)
        }
    }
}