开发者

Getting DNS server IP on IPhone

开发者 https://www.devze.com 2023-02-16 23:52 出处:网络
I\'m trying to get the my dns server IP using using libresolv framework , but all I get is \"0.0.0.0\"

I'm trying to get the my dns server IP using using libresolv framework , but all I get is "0.0.0.0"

-(void) getDns
{
    res_init();

    for (int i=0;i<MAXNS;i++)
    {       
        printf("%s",inet_ntoa(_res.nsaddr_list[i].sin_addr));

    }
}

Anything wrong with my code here ?

Thanks

Edit

Tried to use the code in SO's other question, but this is what I get when the host is "apple.com"

2011-03-16 15:07:21.689 开发者_开发技巧MobileMax[5876:207] RESOLVED 0:<17.149.160.49>
2011-03-16 15:07:21.691 MobileMax[5876:207] RESOLVED 1:<17.251.200.70>
2011-03-16 15:07:21.691 MobileMax[5876:207] RESOLVED 2:<17.112.152.57>

While when running the command : cat /etc/resolv.conf I get nameserver 10.0.0.138 which is what I want.

Any idea how to get that ?

Edit2

I tried this as well, but still getting the "0.0.0.0" response.

u_char buf[NS_PACKETSZ];
int responseLen;             

    res_query("www.google.com",ns_c_in,ns_t_ns,buf,sizeof(buf));


You are not resolving anything, you are just printing the address stored in some variable. You actually need to call res_query or res_search. But on iOS, you're better off with using the CFHost* methods, like in this question. There's also sample code from Apple (search the MyResolveNameToAddress function).

Update after understanding the question: According to this question you cannot access the /etc/resolv.conf file (permissions). But according to this question you might succeed by using the SystemConfigFramework but I've got no idea whether it works on iOS (the framework exists, but whether that information is exposed I don't know).


Try below code to get DNS Server Address . Don't forget to link libresolv.lib

    #include <arpa/inet.h>
    #include <ifaddrs.h>
    #include <resolv.h>
    #include <dns.h>

    - (NSString *) getDNSServers
    {
    // dont forget to link libresolv.lib
    NSMutableString *addresses = [[NSMutableString alloc]initWithString:@"DNS Addresses \n"];

    res_state res = malloc(sizeof(struct __res_state));

    int result = res_ninit(res);

    if ( result == 0 )
    {
        for ( int i = 0; i < res->nscount; i++ )
        {
            NSString *s = [NSString stringWithUTF8String :  inet_ntoa(res->nsaddr_list[i].sin_addr)];
            [addresses appendFormat:@"%@\n",s];
            NSLog(@"%@",s);
        }
    }
    else
        [addresses appendString:@" res_init result != 0"];

    return addresses;
}
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号