Как получить доменное имя IP-адреса и IP-адрес из доменного имени в Objective C?
Я могу получить текущий IP-адрес моего устройства / машины , которую я использую-с помощью , используя ответ на этот вопрос.
Я прошел через этот вопрос. Java позволяет получить IP-адрес из доменного имени. Возможно ли это в объективе с? Но как?
Второй вопрос заключается в том, как получить имя устройства/машины, используя его IP-адрес. Допустим, у меня есть IP-адрес 192.168.0.74 = как называется устройство? в объективе с?
3 ответа:
Я не уверен, что это лучший способ сделать это, но это работает для меня, в основном. Я ввел IP-адреса StackOverflow (69.59.196.211), и он вернул мне
stackoverflow.com
, но я ввел один из IP-адресов Google (210.55.180.158), и он вернул мнеcache.googlevideo.com
(для всех результатов, а не только для первого).int error; struct addrinfo *results = NULL; error = getaddrinfo("69.59.196.211", NULL, NULL, &results); if (error != 0) { NSLog (@"Could not get any info for the address"); return; // or exit(1); } for (struct addrinfo *r = results; r; r = r->ai_next) { char hostname[NI_MAXHOST] = {0}; error = getnameinfo(r->ai_addr, r->ai_addrlen, hostname, sizeof hostname, NULL, 0 , 0); if (error != 0) { continue; // try next one } else { NSLog (@"Found hostname: %s", hostname); break; } } freeaddrinfo(results);
Для адреса может быть несколько имен, поэтому вы можете не останавливаться на первом найденном.
Вам нужно прочитать таблицу маршрутизации-в основном так же, как это делает команда" netstat-r". Реализация netstat является opensource-она находится в пакете
Network_cmds-396.6
В
Http://www.opensource.apple.com/release/mac-os-x-1082/
Так что вы можете проверить, что он делает. Шлюз по умолчанию содержит флаг "G", но не должен подключать флаг "I" (когда и Wi - Fi, и ячейка активны, Wi-Fi используется для подключения к интернету-шлюз ячейки не является используется и присваивается флаг "I").
Надеюсь, это поможет.
Я написал быстрый вариант принятого ответа, хотя и не уверен на 100% в его правильности.
func reverseDNS(ip: String) -> String { var results: UnsafeMutablePointer<addrinfo>? = nil defer { if let results = results { freeaddrinfo(results) } } let error = getaddrinfo(ip, nil, nil, &results) if (error != 0) { print("Unable to reverse ip: \(ip)") return ip } for addrinfo in sequence(first: results, next: { $0?.pointee.ai_next }) { guard let pointee = addrinfo?.pointee else { print("Unable to reverse ip: \(ip)") return ip } let hname = UnsafeMutablePointer<Int8>.allocate(capacity: Int(NI_MAXHOST)) defer { hname.deallocate() } let error = getnameinfo(pointee.ai_addr, pointee.ai_addrlen, hname, socklen_t(NI_MAXHOST), nil, 0, 0) if (error != 0) { continue } return String(cString: hname) } return ip }