Frage

Ich habe einig Cross-Plattform-DNS-Client-Code, den ich zu tun Ende verwenden SMTP zu beenden und an den Fenstern kann ich die aktuellen DNS-Server IP-Adressen, indem Sie in der Registrierung finden. Auf dem Mac kann ich wahrscheinlich den Systemconfiguration Rahmen verwenden, wie in der ersten Antwort erwähnt, aber die genaue Methode, dies zu tun nicht ohne weiteres ersichtlich ist.

Zum Beispiel SCDynamicStoreCopyDHCPInfo gibt einige der dynamischen DHCP-Daten, sondern nicht die DNS-Serveradressen.

War es hilfreich?

Lösung

Sie sind auch von /etc/resolv.conf

Andere Tipps

Sie können über den Systemconfiguration Rahmen . Es ist in C.

Update: Es scheint der Rest der Bahn ist schwieriger zu verwenden, als ich dachte. Suchen Sie nach dem Schlüssel. "State: / Netzwerk / Service / ServiceID / DNS", wo ServiceID ist die ID des Dienstes

Ich weiß, dass seine sehr spät, diese Frage zu beantworten, kann aber für die andere hilfreich sein.

Dieser Kodex wird für diese Aufgabe helfen ..

SCPreferencesRef _prefsDNS = SCPreferencesCreate(NULL, CFSTR("DNSSETTING"), NULL);

CFArrayRef services = SCNetworkServiceCopyAll(_prefsDNS);

if (services) {
long count = CFArrayGetCount(services);
for (int i = 0; i < count; i++) {
service = CFArrayGetValueAtIndex(services, i);
interface = SCNetworkServiceGetInterface(service);
NSString *interfaceServiceID = (__bridge NSString*)SCNetworkServiceGetServiceID(service);
CFStringRef primaryservicepath = CFStringCreateWithFormat(NULL,NULL,CFSTR("State:/Network/Service/%@/DNS"),interfaceServiceID);
        //    NSLog(@"%@",primaryservicepath);


SCDynamicStoreRef dynRef=SCDynamicStoreCreate(kCFAllocatorSystemDefault, CFSTR("DNSSETTING"), NULL, NULL);
                // NSLog(@"%@",dynRef);
CFDictionaryRef dnskey = SCDynamicStoreCopyValue(dynRef,primaryservicepath);

           //     NSLog(@"%@",dnskey);
//dnskey will give you the DNS server address.

Ich weiß, dass es eine lange Zeit her ist, seit Sie diese benötigt, aber es gibt nichts Schlimmeres als eine alte ungelöste Antwort. Sie können nicht darauf zugreifen aus „/etc/resolv.conf“ wegen Berechtigungsprobleme. Nach langem Suchen und ein wenig Glück entdeckte ich Sie es über res_ninit () Funktion erhalten.

// Get native iOS System Resolvers
res_ninit(&_res);
res_state res = &_res;

for (int i = 0; i < res->nscount; i++) {
  sa_family_t family = res->nsaddr_list[i].sin_family;
  int port = ntohs(res->nsaddr_list[i].sin_port);
  if (family == AF_INET) { // IPV4 address
    char str[INET_ADDRSTRLEN]; // String representation of address
    inet_ntop(AF_INET, & (res->nsaddr_list[i].sin_addr.s_addr), str, INET_ADDRSTRLEN);
  } else if (family == AF_INET6) { // IPV6 address
    char str[INET6_ADDRSTRLEN]; // String representation of address
    inet_ntop(AF_INET6, &(res->nsaddr_list [i].sin_addr.s_addr), str, INET6_ADDRSTRLEN);
  }
}
res_ndestroy(res);

Sie sind von /etc/resolv.conf lesen konnte.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top